我正在写一个插件。当有人按下我的wordpress插件设置页面中的按钮时,我想运行方法get\\u my\\u选项。进行了ajax调用,但该方法从未运行。
在页面中,我有以下代码:
<div class="wrap">
<input type="button" value="test" onclick="my_js_function();"/>
</div>
<?php
wp_enqueue_script( \'function\', plugins_url( \'/js/synchandler.js\',__FILE__), array(\'jquery\'));
wp_localize_script( \'function\', \'my_ajax_script\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) );
function get_my_option()
{
//do something
die();
}
add_action("wp_ajax_nopriv_get_my_option", "get_my_option");
add_action("wp_ajax_get_my_option", "get_my_option");
?>
添加的synchandler。js文件:
function my_js_function()
{
jQuery.ajax({
url: my_ajax_script.ajaxurl,
type: \'POST\',
data: ({ action: \'get_my_option\', affiliate: \'daisycon\' }),
success: function (response) {
console.log("got this: " + response);
}
});
}
有一个响应,但这是一个0,因此javascript添加得很好,但仅此而已。通过运行此命令,我的日志中没有错误。页面中添加了AjaxURL(似乎是一个常见错误)。
/* <![CDATA[ */
var my_ajax_script = {"ajaxurl":"http:\\/\\/mywebsite.net\\/wp-admin\\/admin-ajax.php"};
/* ]]> */
触发它的按钮使用
onclick="my_js_function();
在HTML上
button
-标签
方法虽然简单get_my_option
不会被ajax调用触发。我做错了什么?
SO网友:Frederik Spang
您需要将功能代码作为函数放入插件中(这取决于您开发插件的方式)。
我更喜欢添加add_action
调用admin\\u init-使用admin ajax调用它。php也是。
wp_enqueue_script( \'function\', plugins_url( \'/js/synchandler.js\',__FILE__), array(\'jquery\'));
wp_localize_script( \'function\', \'my_ajax_script\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' ) ) );
function get_my_option()
{
//do something
die();
}
function add_ajax_actions() {
add_action("wp_ajax_nopriv_get_my_option", "get_my_option");
add_action("wp_ajax_get_my_option", "get_my_option");
}
add_action( \'admin_init\', \'add_ajax_actions\' );
我不知道这是否是最佳实践-这纯粹是个人喜好,避免在加载的每个页面上添加挂钩-仅在管理页面上。