我正在为运行查询的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');
}
答案 0 :(得分:0)
您实际上想要使用wp_update_post函数(https://codex.wordpress.org/Function_Reference/wp_update_post)。这将确保所有其他可能的钩子/过滤器在现在和将来都根据需要点火。
另外,WordPress' cron可能有点时髦,因为它只根据用户访问(运行PHP时)触发。如果您的网站流量较低,则可能需要运行实际的服务器cron作业。