このようにしてWordPressとAjaxを悪用しているのかどうかはわかりませんが、 WPとAjax Codex と Ajaxを使用したプラグイン開発 あまり役に立ちません。私は以下のAjaxシチュエーションを作成しました。
(function($){
$(document).ready(function(){
$('a').click(function(e){
var el = $(this).prev('input[type="checkbox"]');
if(el.is(':checked')){
el.prop('checked',false);
}
$.ajax({
url : "<?php echo CORETHEME_ADMIN_TEMPLATE_HELPER_URL . 'UncheckPackageThemeHelper.php'; ?>",
type : 'POST',
data : { 'element_name' : el.prop('name') },
success: function(result){
console.log(result);
},
error: function(jqXHR, textStatus, errorThrown ){
console.log(jqXHR, textStatus, errorThrown);
}
});
e.preventDefault();
});
});
})(jQuery);
リンクをクリックすると、チェックボックスがオフになり、その要素名がクラスに渡されます。
私のクラスにunset_package
メソッドが表示されるまで、すべてうまくいきます。
class CoreTheme_AdminPanel_Template_Helper_UncheckPackageThemeHelper{
private $_element_name = null;
public function __construct(){
if(isset($_POST["element_name"])){
$this->_element_name = $_POST["element_name"];
$this->unset_package();
}
}
public function unset_package(){
$option = get_option($this->_element_name);
if(isset($option)){
$option = '';
}
}
}
new CoreTheme_AdminPanel_Template_Helper_UncheckPackageThemeHelper();
get_option
まではすべてうまくいきます - 私は500エラーを受け取ります。この場合はget_option()メソッドが存在しないことを意味します。 get_option
とそれ以外の部分を取り出してunset_package
の内容を置き換えたら
echo json_encode($this->_element_name);
ですべてがうまくいき、要素名が返されます。
誰かがこれがうまくいかない理由を説明して、おそらく私に適切なWordPressの方法を見せてもらえますか?ドキュメンテーションは控えめに言っても非常に混乱していました。
あなたが直接ajaxリクエスト(UncheckPackageThemeHelper.php
)を通してphpファイルをロードするとき、それはWordPressの文脈の外でロードされるので、WordPressのコア機能は利用できません。
すべてのWordPress ajaxリクエストはadmin-ajax.php
を通してルーティングされるべきです。 URLを印刷するには、 admin_url
のようにします。
admin_url( 'admin-ajax.php' )
admin-ajax.php
がロードされると、WordPressがブートストラップされるので、コア機能にアクセスできるようになります。
最後のステップは、JavaScriptからaction
パラメータを渡し、そのアクションが実行されたときに呼び出したい関数にマッピングすることです。
add_action( 'wp_ajax_my_action', 'my_action_callback' );