【问题标题】:Update post_author on button click via ajax request通过 ajax 请求在按钮单击时更新 post_author
【发布时间】:2022-08-15 14:24:37
【问题描述】:

我对 PHP 和 WordPress 有点陌生。 当作为该帖子作者的登录用户单击帖子页面本身的按钮时,我正在尝试更新帖子“post_author”。

这是我目前的代码

functions.php 文件中的 PHP

add_action( \'wp_ajax_nopriv_my_action\', \'my_action_callback\' );
add_action( \'wp_ajax_my_action\', \'my_action_callback\' );

function my_action_callback() {
    $post = get_post($post_id);
    if ($post->post_author == get_current_user_id()) {
        wp_update_post(array(
            \'ID\' => $post_id,
            \'post_author\' => 1
        ));
    }
    wp_die();
}

帖子本身的前端JS

<script>
$(document).ready(function() {
    $(\"#submit\").click(function() {
        var ajaxurl = \'MYDOMAINNAME/wp-admin/admin-ajax.php\';
        $.ajax ({
            url: ajaxurl,
            type: \'POST\',
            data: {
                action: \'my_action\',
                id: 1234
            },
        })
    });
});
</script>
<button id=\"submit\">Change Author</button>

Ajax 对我来说也很新,所以只是想把我的头脑围绕在这个问题上,并确保我正在以最好的方式接近它。

    标签: javascript php wordpress


    【解决方案1】:

    使用此代码。您已使用 $_POST["id"] 而不是 $post_id

    页脚.php

     <script>
    jQuery(document).ready(function() {
        jQuery("#submit").click(function() {
            var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>";
            jQuery.ajax ({
                url: ajaxurl,
                type: 'POST',
                data: {
                    action: 'my_action',
                    id: 42
                },
            })
        });
    });
    </script>
    

    函数.php

    add_action( 'wp_ajax_nopriv_my_action', 'my_action_callback' );
    add_action( 'wp_ajax_my_action', 'my_action_callback' );
    
    function my_action_callback($post) {
        $post_id = $_POST["id"];
        $post = get_post($post_id);
        if ($post->post_author == get_current_user_id()) {
            wp_update_post(array(
                'ID' => $post_id,
                'post_author' => 1
            ));
        }
        wp_die();
    }
    

    【讨论】:

      【解决方案2】:

      更新我的问题,我能够解决我面临的问题。

      我能够隔离的几个问题如下。

      1. 我有一个冲突函数触发了 save_post 挂钩,这导致作者在触发 wp_update_post() 函数时更改回当前用户。为了解决这个问题,我在函数发生之前添加了一个删除操作。见下文。
        remove_action('save_post', 'change_pos_auth');
        remove_action('acf/save_post', 'change_pos_auth');
        
        1. 在该帖子页面上发出 ajax 请求时,我使用以下内容获取当前帖子的 ID。
        $url = wp_get_referer();
        $post_id = url_to_postid( $url ); 
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-10
        • 1970-01-01
        • 2012-07-18
        • 2013-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多