私がやりたいことは私のプラグインのオプションページのajax内からadd_submenu_page()
関数を起動することです。
"Add League"リンクをクリックすると、データベースに保存されるajax input [text]を表示してから、挿入された値を使用してサブメニューページを追加します。
私はまた新しく作成されたページと同様にエントリを削除できることを望んでいます。
与えられたコードなしで完全な実用的な例を得ることを想定することはできないので、おおまかなワードプレスAJAXセットアップをお見せします。
これらすべてをfunctions.php
に入れます。
<?php
add_action('wp_head', 'my_action_javascript');
function my_action_javascript() {
?>
<script type="text/javascript" >
jQuery(document).ready(function($) {
jQuery.ajax(
type: 'POST',
url: <?php echo admin_url('admin-ajax.php'); ?>,
data: {
action : 'your_AJAX_call',
league : $('input#league').val() // get the user input
},
success: function( response, textStatus, XMLHttpRequest ) {
$('ul#menu').append(response);
}
error: function( XMLHttpRequest, textStatus, errorThrown ) {
alert('An error occured');
}
);
});
</script>
<?php
}
add_action( 'wp_ajax_nopriv_your_AJAX_call', 'your_AJAX_call' );
add_action( 'wp_ajax_your_AJAX_call', 'your_AJAX_call' );
function your_AJAX_call() {
$league = $_POST['league'];
// do sanitization
// if sanitization is ok:
// save to DB
// echo sth like '<li><a href="new-league">New League</a></li>'
exit; // won't work without!
}
より詳細な情報を提供できるように、jsonでエンコードされた配列を返すことをお勧めします。すなわちサニタイズが短すぎるために失敗した場合
// Your sanitization logic here
$arr = array ('success'=>false,'error'=>'Length must be at least 3 Characters');
echo json_encode($arr);
http://php.net/manual/de/function.json-encode.php
それからajax呼び出しのresponse
関数で次のようにします。
var response = jQuery.parseJSON(response);
alert('An error occured: ' + response.error);
http://api.jquery.com/jQuery.parseJSON/
これがワードプレスでajaxを使うことについての良い記事です。
http://www.garyc40.com/2010/03/5-tips-for-using-ajax-in-wordpress/
編集:
これを完全に忘れていました:
この時点でページは既にレンダリングされているため、add_submenu_page()
は機能しません。