将过滤器添加到wordpress admin中的“快速编辑菜单”

时间:2012-04-30 14:45:12

标签: wordpress post transition status

我目前正在开发一个wordpress插件。该插件包括一个数据库表,每次使用该帖子的数据创建,编辑或删除帖子时,该表都会更新。这个表中的一列是“post_status”,我需要它随着帖子的状态更新时更新。现在我正在使用这段代码:

function filter_transition_post_status( $new_status, $old_status, $post ) { 
    global $post;
    global $wpdb;
    $wpdb->query(" UPDATE my_table SET post_status='$new_status' WHERE post_id=$post->ID");
}
add_action('transition_post_status', 'filter_transition_post_status', 10, 3);

当我在“编辑帖子”页面中更改帖子状态时,上面的代码工作正常。当我改变帖子的状态时,变化也会发生在我的表格中。但是,当我使用“快速编辑”模式更改帖子或批量更改多个帖子的状态时,代码不起作用。我的表中没有发生变化。 任何帮助解决这个问题将不胜感激。 谢谢

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。当使用“快速编辑”模式更新帖子时,无法使用“编辑帖子”页面中的全局$ post检索帖子ID,而是使用$ _GET ['ID']。因此,为了涵盖这两个选项,“快速编辑”和“编辑帖子”我正在使用以下功能:

function filter_transition_post_status( $new_status, $old_status, $post ) { 
    global $wpdb;
    global $post;
    $my_id = get_post($_GET['ID']);
    is_array($my_id) ? $post_id = $my_id[ID] : $post_id = $post->ID;
    $wpdb->query(" UPDATE my_table SET post_status='$new_status' WHERE post_id=" .$post_id);
}
add_action('transition_post_status', 'filter_transition_post_status', 10, 3);

该函数检查$ my_id是否从$ _GET [ID]获取任何内容(在“快速编辑”页面中),如果是,它将使用它,否则它将使用全局$ post来获取id。 / p>

更新:

我得到了比Stephen Harris更好的解决方案 - “你不想引用全局$ post,但是作为论据之一给你的帖子。你只需要删除全局$交的“

function wpse50651_filter_transition_post_status( $new_status, $old_status, $post ) { 

    global $wpdb;

    $wpdb->query( 
        $wpdb->prepare( 
          "UPDATE my_table SET post_status=%s WHERE post_id=%d", 
           $new_status,$post->ID
         ) 
     );
}
add_action('transition_post_status', 'wpse50651_filter_transition_post_status', 10, 3);