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