まとめ

前述したすべてのコード・スニペット例を、2つの完全なコード・ページにまとめました: ひとつは jQuery 用、もうひとつは PHP 用です。

PHP

このコードは、プラグインのページの1つにあります。

add_action( 'admin_enqueue_scripts', 'my_enqueue' );
function my_enqueue( $hook ) {
  if ( 'myplugin_settings.php' !== $hook ) {
    return;
  }

  wp_enqueue_script(
    'ajax-script',
    plugins_url( '/js/myjquery.js', __FILE__ ),
    array( 'jquery' ),
    '1.0.0',
    true
  );

  $title_nonce = wp_create_nonce( 'title_example' );
  wp_localize_script(
    'ajax-script',
    'my_ajax_obj',
    array(
      'ajax_url' => admin_url( 'admin-ajax.php' ),
      'nonce'    => $title_nonce,
    )
  );
}

add_action( 'wp_ajax_my_tag_count', 'my_ajax_handler' );
function my_ajax_handler() {
  check_ajax_referer( 'title_example' );

  $title = wp_unslash( $_POST['title'] );

  update_user_meta( get_current_user_id(), 'title_preference', $title );

  $args = array(
    'tag' => $title,
  );

  $the_query = new WP_Query( $args );

  echo esc_html( $title ) . ' (' . $the_query->post_count . ') ';

  wp_die(); // all ajax handlers should die when finished
}

jQuery

このコードは、プラグインフォルダーの下にある js/myjquery.js というファイルにあります。

jQuery(document).ready(function($) { 	   //wrapper
  $(".pref").change(function() { 		   //event
    var this2 = this; 		           //use in callback
    $.post(my_ajax_obj.ajax_url, { 	   //POST request
      _ajax_nonce: my_ajax_obj.nonce, //nonce
      action: "my_tag_count",        //action
      title: this.value 	           //data
    }, function(data) {		           //callback
      this2.nextSibling.remove();    //remove the current title
      $(this2).after(data); 	       //insert server response
    });
  });
});

そして、設定を保存した後、結果の投稿数が選択したタイトルに追加されます。

詳細情報

原文 / 日本語訳

s
検索
c
新規投稿を作成する
r
返信
e
編集
t
ページのトップへ
j
次の投稿やコメントに移動
k
前の投稿やコメントに移動
o
コメントの表示を切替
esc
投稿やコメントの編集をキャンセル