如何在Wordpress前端将变量传递给admin-ajax.php

时间:2019-07-06 21:34:43

标签: php jquery ajax wordpress

我正在尝试通过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帖子标题的正确方法是什么?

0 个答案:

没有答案