将过滤器添加到WordPress管理中的“快速编辑菜单”

时间:2012-04-30 作者:Eyal

我目前正在开发wordpress插件。该插件包括一个数据库表,每当使用该帖子的数据创建、编辑或删除帖子时,该表都会更新。此表中的一列是“post\\u 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 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

您不想引用全局$post, 但这篇文章是作为论点之一给你的。您只需删除global $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);

结束

相关推荐

使POSTS_PER_PAGE值在所有页面上都相同

这个我差不多做完了,只剩下一个小问题。希望你能帮助我。我有两个非常简单的自定义循环。一个用于粘性贴子,一个用于非粘性贴子。我已经设法使粘性帖子只显示在第1页上,而不显示在其余页面上(使用分页时),这正是我想要的。问题是:如果我将posts\\u per\\u page设置为8,并且数据库中有1篇粘性文章,那么第一页上会有9篇文章,其余页面上会有8篇文章。我已在循环之间使用此脚本成功更改了posts\\u per\\u page值:$postcount = $wp_query->post_count;