如何根据另一个表中的meta_key更新POST?

时间:2015-07-26 作者:CA_

因此,我有一个每天由wp\\u schedule\\u事件(cron job)调用一次的函数。该函数的目标是为所有帖子设置一个字段wpcf-engine-days-to-go 其值为"0" 到草稿。

它不工作,我怀疑问题出在我的SQL上。我引用的元数据不在wp\\u帖子的行(或表)中。如何在与wp\\U帖子相关的情况下引用wp\\U元表?

    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 个回复
SO网友:Scott Fleming

我不能评论,因为我没有代表

您的代码不会更新,因为meta_key 字段不在wp_post 桌子

首先,您需要查询所有包含meta_键的帖子wpcf-engine-days-to-go = 0 and then iterate through the post ID\'s and make your changes to the WP posts.

未测试示例:

$meta_value = 0; 
$results = $wpdb->get_results("SELECT * from wp_posts, wp_postmeta
                               WHERE wp_posts.ID = wp_postmeta.post_id
                               AND  wp_posts.post_status = \'publish\' 
                               AND  wp_postmeta.meta_key =\'wpcf-engine-days-to-go\' 
                               AND  wp_postmeta.meta_value = \'".$meta_value ."\'", ARRAY_A );

foreach($results as $row){
            // do update on this POST
           $update = $wpdb->update(\'wp_post\',
                        array(\'post_status\' => \'draft\'),                        
                        array(\'ID\'    => $row[\'ID\'] ), 
                        array(
                                \'%s\',   // string
                            ),
                        array( \'%d\') // id
                        );
    }
}

结束

相关推荐

MySQL用一张表交换另一张表?

因此,我在WordPress网站上遇到了一个情况,我必须交换我的特色图片的位置。多亏了多个帖子缩略图插件,我每篇帖子都有两个,但现在无论第一个特色图片是什么,都需要第二个,无论第二个是什么,都需要第一个。所以已经有300篇帖子了,所以手动调出它们会很费时。我想知道是否有更好的方法来做到这一点,使用MySQL中的某种语句来交换这两个。有人知道这样做的方法吗?