管理画面でAjaxを使う際のぷちまとめ。

function.phpに

//Ajax 設定
function add_my_ajaxurl() {
?>
	<script>
		var ajaxurl = '<?php echo admin_url( 'admin-ajax.php'); ?>';
	</script>
<?php
}
add_action( 'wp_head', 'add_my_ajaxurl', 1 );

//管理画面に既存のjQueryを読み込む
function load_script(){
	wp_enqueue_script('jquery');
}
add_action('init', 'load_script');

//管理画面全体にJSを読み込ませる
function add_my_js() {
	wp_enqueue_script('admin_print_styles',  get_bloginfo('template_url') . '/js/admin.js' , array('jquery'), '', true );
}
add_action('admin_print_scripts', 'add_my_js');

WordPressでAjaxを使う場合は必ずdmin-ajax.phpを通して使わないといけないというルールがあるので
そのファイルを読み込むように設定する

管理画面にwordpressが使っているjQueryを読み込む。
通常つかっている場合もあるけどもjqueryが重複してもどうにかしてくれる関数のようだよ。
んで、Ajaxを記述するためのjsを読み込む。
第5引数をtrueにするとbodyの閉じのあたりに読み込んでくれる。
※wp_footerは必要

読み込むjsはとりあえずこちら。

jQuery(document).ready(function ($) {
$( '#kuma' ).on( 'click', function(){
	$post_type = $("#post_type_select").val();
	$.ajax({
		type: 'POST',
		url: ajaxurl,
		datatype: 'json',
		data: {
			'action' : 'get_custom_taxonomies',
			'post_custom_type' : $post_type,
		},
		success: function( result ){ 
		var $taxonomies = $.parseJSON(result);
			console.log($taxonomies);
			$.each( $taxonomies, function( i, $taxonomy ){
				console.log($taxonomy);
				$("#taxonomy_select").append("<option value='"+ $taxonomy +"'>" + $taxonomy + "</option>");
			});
			$("#taxonomy_select").show();
		 },
	});
	return false;
});
});

‘action’ : ‘get_custom_taxonomies’,
この部分で実行したい関数名を指定

function.phpに戻り実行させたい関数の記述

// Ajaxのアクションの設定
function get_custom_taxonomies(){
	$post_type = $_POST['post_custom_type'];
	$taxonomy_name = array();
	$taxonomies = get_object_taxonomies( $post_type, 'objects' );
	if($taxonomies){
		foreach( $taxonomies as $key => $taxonomy ){
			$taxonomy_name[] = $taxonomy->name;
		}
		$result = json_encode($taxonomy_name);
	}else{
		$result = "";
	}
	echo $result;
	die();
}
add_action( 'wp_ajax_get_custom_taxonomies', 'get_custom_taxonomies' ); //ログインユーザ
add_action( 'wp_ajax_nopriv_view_sitename', 'view_sitename' ); //未ログインユーザ

これが基本的な状態になる。
んで、少しハマったところがそのままjqueryの記述がコンクリフトの関係で$が使えないので
jQuery(document).ready(function ($) {

});
囲みをちょっと変更する必要がある。
これを行うと通常時と同じように$が使えるようになる。

add_action( ‘wp_ajax_view_sitename‘, ‘view_sitename‘ ); //ログインユーザ

add_action( ‘wp_ajax_ //ログインユーザ用
add_action( ‘wp_ajax_nopriv_ //未ログインユーザ用

あとは実行したい関数名を変更したい場合は太字にしているところも変更する必要がある

jQueryを使ってhiddenを追加する

フォームを取得する方法

ttp://d.hatena.ne.jp/x6x6/20080319/1205917213

hiddenの追加

http://keywordsmemo.blogspot.jp/2011/05/formsubmithidden.html

$(function() {
$("#post").submit(function(){
var obj = $('#client_date').attr('value');
$('<input />').attr('type', 'hidden')
 .attr('name', 'tax_input[works-client][]')
 .attr('value', obj)
 .appendTo('#post');
});
});

これでいけるか。
週明けに確認。

管理画面のタイプは以下で設定し特定の箇所のみjsを読み込む。

function events_scripts() {
global $post_type;
if( 'works' == $post_type ) {
wp_enqueue_script('jquery183', get_bloginfo('template_url') . '/js/jquery-1.8.3.js');
wp_enqueue_script('jquery-ui', get_bloginfo('template_url') . '/js/jquery-ui-1.9.2.custom.js');
wp_enqueue_script('myjs', get_bloginfo('template_url') . '/js/myjs.js');
}
}
add_action( 'admin_print_scripts-post.php', 'events_scripts', 1000 );
add_action( 'admin_print_scripts-post-new.php', 'events_scripts', 1000 );

重要
tax_input[works-client][]
のままだと更新していくたびにどんどん配列としてvalueがはいっていくので
tax_input[works-client][0]とかtax_input[works-client][1]とかして入る位置を決めてみた。
位置を指定しておくと上書きをしてくれたので予想外のものが入ることがなくなった。

[jQuery ui 1.92版]管理画面にCSSとJSを読み込ませる 追記

jQuery ui1.92版

//cssの読み込み
function events_styles() {
global $post_type;
if( 'works' == $post_type ) {
wp_enqueue_style('ui-smoothness', get_bloginfo('template_url') . '/css/smoothness/jquery-ui-1.9.2.custom.css');
}
}
add_action( 'admin_print_styles-post.php', 'events_styles', 1000 );
add_action( 'admin_print_styles-post-new.php', 'events_styles', 1000 );
//jsの読み込み
function events_scripts() {
global $post_type;
if( 'works' == $post_type ) {
wp_enqueue_script('jquery183', get_bloginfo('template_url') . '/js/jquery-1.8.3.js');
wp_enqueue_script('jquery-ui', get_bloginfo('template_url') . '/js/jquery-ui-1.9.2.custom.js');
wp_enqueue_script('myjs', get_bloginfo('template_url') . '/js/myjs.js');
}
}
add_action( 'admin_print_scripts-post.php', 'events_scripts', 1000 );
add_action( 'admin_print_scripts-post-new.php', 'events_scripts', 1000 );

admin_print_scripts-post-new.phpとかを変更すれば読み込むページを変更することができる。
特定のカスタム投稿とかの場合は投稿タイプを取得して条件をいれたり
カスタムタクソノミーを取得して判断したりとか。

管理画面にjQueryを読み込むと通常の状態だとオリジナルのJSとコンクリフトを起こしてしまうのでそのあたりを考慮して最初からJSを設定する必要があるみたい。

改訂版

function events_styles() {
wp_enqueue_style('ui-smoothness', 'https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/themes/smoothness/jquery-ui.css');
}

function admin_js() {
global $post_type;
if( 'shien' == $post_type ) {
 wp_enqueue_script('ui', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js', null, true);
 wp_enqueue_script('color_ui', get_bloginfo('template_url').'/js/modcoder_excolor/jquery.modcoder.excolor.js', null, true);
 wp_enqueue_script('admin', get_bloginfo('template_url').'/js/myjs.js', null, true);
}
}

add_action( 'admin_print_styles-edit-tags.php', 'events_styles', 1000 );
add_action( 'admin_print_scripts-edit-tags.php', 'admin_js', 1000 );

wp_enqueue_scriptの仕様変更があり。

第4引数や第5引数がある。
5については true / false trueの場合には閉じ/headの近くに出力される。
admin_print_styles-edit-tags.phpの部分は「-php」でやるのではなく「.php
管理画面にJsを読み込む場合はコンクリフトのことを考える。
実行箇所のところを

jQuery(function($){
$('.edit-tags-php #tag-description,.edit-tags-php #parent').closest("div.form-field").hide();
$('.form-table input').modcoder_excolor({});
});

とし
jQuery(function($)をつかっておく。
jquery本体のほうはwordpressのjqueryを使うならコンクリフト対策がされてあるのでそれを利用する。

global $taxonomy;
if( ‘shien-cat’ == $taxonomy ) {

}
これもいける良いね!