我正在尝试通过admin-ajax.php更新wordpress单篇文章的标题。当我直接加载http://mysite.url//wp-admin/admin-ajax.php?action=myactionname * 时,一切工作都很好,但是当我尝试从前端(单个发布)加载它时,变量无法正确发送。
我正在使用Wordpress 5,Php 7.2,Nginx
内部插件:
class AjaxUpdate {
public $postid;
public $new_title;
public function __construct($postid, $new_title) {
$this->postid = $postid;
$this->new_title = $new_title;
add_action('wp_ajax_myactionname', array( $this, 'do_updatepost'));
add_action('wp_ajax_nopriv_myactionname', array( $this, 'do_updatepost'));
add_action( 'wp_enqueue_scripts', array( $this, 'ajax_update_script'));
}
public function do_updatepost() {
echo 'It Work Updatepost';
$post_update = array(
'ID' => $this->postid,
'post_title' => $this->new_title,
);
wp_update_post( $post_update, $wp_error );
wp_die();
}
public function ajax_update_script() {
wp_enqueue_script('ajaxpost', plugins_url('plugname/scripts/ajaxpost.js'), array('jquery'));
wp_localize_script('ajaxpost', 'plugname', array(
'ajaxurl' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('nonce-for-plugname'),
));
}
}
单个帖子的内部模板页面:
$wpajaxupdate = new AjaxUpdate($postid, $new_title);
jQuery(document).ready(function ($) {
var data = {
action: 'myactionname',
nonce: plugname.nonce,
};
jQuery.post(plugname.ajaxurl, data, function (response) {
alert('Worked: ' + response + JSON.stringify(data));
});
});
如果我在插件中使用此代码,则设置变量并加载http://mysite.url//wp-admin/admin-ajax.php?action=myactionname一切正常:
$wpajaxupdate = new AjaxUpdate($postid, $new_title);
我做错了什么?通过ajax更新wp帖子标题的正确方法是什么?