MySQL基于wp_meta值更新wp_posts?

时间:2015-07-27 23:21:10

标签: mysql wordpress wpdb

我正在为运行查询的WordPress网站创建自定义插件。该插件将通过Wordpress' wp_schedule_event函数每天运行。此查询将对engine帖子类型采用名为wpcf-engine-days-to-go的自定义字段。目前,我的代码无效(见下文)

目标
我想更新post_status到'草案'当自定义字段值wpcf-engine-days-to-go达到' 0'时。 post_status值位于wp_posts表格中,wpcf-engine-days-to-go位于wp_postmeta表格中。

问题
基于另一个表更新一个表中的值的正确查询是什么,特别是在我的示例中?

register_activation_hook(__FILE__, 'tdengine_my_activation');
add_action('tdengine_my_daily_event', 'tdengine_do_this_daily');

function tdengine_my_activation() {
    wp_schedule_event(time(), 'daily', 'tdengine_my_daily_event');
}

function tdengine_do_this_daily() {
    global $wpdb;
    $query = "UPDATE `" . $wpdb->prefix . "posts` SET `post_status`=`draft` WHERE `meta_key` = 'wpcf-engine-days-to-go' = 0 ";
    $wpdb->query($query);
}

register_deactivation_hook(__FILE__, 'tdengine_my_deactivation');

function tdengine_my_deactivation() {
    wp_clear_scheduled_hook('tdengine_my_daily_event');
}

1 个答案:

答案 0 :(得分:0)

您实际上想要使用wp_update_post函数(https://codex.wordpress.org/Function_Reference/wp_update_post)。这将确保所有其他可能的钩子/过滤器在现在和将来都根据需要点火。

另外,WordPress' cron可能有点时髦,因为它只根据用户访问(运行PHP时)触发。如果您的网站流量较低,则可能需要运行实际的服务器cron作业。