Php wp_更新_从锚定点击的帖子类别

Php wp_更新_从锚定点击的帖子类别,php,wordpress,taxonomy,Php,Wordpress,Taxonomy,要使用wp\u update\u post更改和更新帖子类别。应通过单击”更改类别; 编辑-进一步信息 更新主题函数中的Post代码-尚未测试 function live_paused_status( $post_id ){ if (current_user_can('edit_post', $post->ID)) { $live_paused = array( 'post_category' => 6 ); echo '<a hre

要使用
wp\u update\u post
更改和更新帖子
类别
。应通过单击
”更改类别;
编辑-进一步信息

更新主题函数中的Post代码-尚未测试

function live_paused_status( $post_id ){
if (current_user_can('edit_post', $post->ID)) {

    $live_paused = array(
        'post_category' => 6
    );
    echo '<a href="" id=""><button title="" data-toggle="tooltip" class="campaigns-link-button" type="button" data-original-title="Pause Campaign"><i class="fa fa-pause"></i></button></a>';

    // unhook this function so it doesn't loop infinitely
    remove_action('save_post', 'live_paused_status');

    // update the post, which calls save_post again
    wp_update_post( $live_paused );

    // re-hook this function
    add_action('save_post', 'live_paused_status');
 }
}

add_action('save_post', 'live_paused_status');
function live\u暂停状态($post\u id){
if(当前用户可以('edit_post',$post->ID)){
$live\u=数组(
“职位类别”=>6
);
回声';
//取消勾选此函数,使其不会无限循环
删除操作(“保存发布”、“活动暂停状态”);
//更新帖子,再次调用save_post
wp_更新_发布($live_暂停);
//重新钩住这个函数
添加动作(“保存帖子”、“实时暂停状态”);
}
}
添加动作(“保存帖子”、“实时暂停状态”);
环路


您需要向连接的脚本发出AJAX请求。在WordPress中连接AJAX有点奇怪,但与其尝试为您这样做,不如查看WordPress Codex中的文档:

您将添加一个操作,该操作基本上将从表单输入传递帖子类别ID,您将使用JS在帖子请求中发送该操作,然后您将获取该ID并更新该类别

希望这有帮助

编辑

<?php 

add_action( 'wp_ajax_custom_update_category', 'custom_update_category' );

function custom_update_category() {
    $cat_id = sanitize_text_field( $_POST['cat_id']); //passed from AJAX. Make sure to escape it just in case.
    # update the category here with $cat_id
}
  • 请注意,我将
    操作
    命名为与我的示例中的
    add\u操作
    上的后缀相同(
    custom\u update\u category
    )。正在从select输入抓取
    cat_id
    ,然后将其发送到AJAX请求的
    data
    对象中

  • 使用该
    数据
    对象,我可以在该脚本的PHP中获取
    $cat_id


  • 动作
    名称确实是关键。

    只需使用ajax即可。就这样,谢谢你,迪帕克。你有没有可能在答案里写上怎么写,这样我就可以结束这个问题了。干杯。你能发布更多的代码吗,比如你的循环和更新后的代码已经更新了。再次感谢。谢谢你的更新,Plushy对象。我一个人没有多大进步。我就是想不通。AJAX真的有必要将帖子类别从一个更改为另一个吗?您基本上是在请求浏览器事件(例如,单击链接)来启动类别更新。需要在客户端(浏览器)和服务器(WP)之间建立这种连接
    function live_paused_status( $post_id ){
    if (current_user_can('edit_post', $post->ID)) {
    
        $live_paused = array(
            'post_category' => 6
        );
        echo '<a href="" id=""><button title="" data-toggle="tooltip" class="campaigns-link-button" type="button" data-original-title="Pause Campaign"><i class="fa fa-pause"></i></button></a>';
    
        // unhook this function so it doesn't loop infinitely
        remove_action('save_post', 'live_paused_status');
    
        // update the post, which calls save_post again
        wp_update_post( $live_paused );
    
        // re-hook this function
        add_action('save_post', 'live_paused_status');
     }
    }
    
    add_action('save_post', 'live_paused_status');
    
     <?php $query = new WP_Query( array( 'post_type' => 'campaigns'));?>
        <?php if ($query->have_posts()) : while ( $query->have_posts() ) : $query->the_post(); ?>
          <div class="card">
            <div class="card-footer">
              <div class="row">
                <div class="col-4 campaigns-link">
                  <?php echo live_paused_status(); ?>
                </div>
              </div>
            </div>
          </div>
       <?php endwhile; wp_reset_postdata(); ?>
    
    <?php 
    
    add_action( 'wp_ajax_custom_update_category', 'custom_update_category' );
    
    function custom_update_category() {
        $cat_id = sanitize_text_field( $_POST['cat_id']); //passed from AJAX. Make sure to escape it just in case.
        # update the category here with $cat_id
    }
    
          var cat_id = $('#product-cat-select').val();
    
          $.ajax({
            type : "POST",
            url : ajaxurl,
            data : {
              action: "custom_update_category",
              cat_id: cat_id
            },
            success: function(response) {
              console.log( response );
            }
         });