WP每15分钟删除一次自定义帖子类型的重复条目

时间:2019-08-18 作者:vinyllicker

正在寻求帮助。

我搜索了常见的网站,但没有遇到这个具体的问题,我想知道是否有人可以帮助我。我有一个收集数据并将其保存到wordpress数据库中的scrape系统。它正在为电台保存曲目历史记录。不幸的是,我遇到了无法解决的双重压力。我想运行一个cron作业,该作业将检查该自定义帖子类型(track)的最后30个条目,如果发现任何重复项,它将删除所有条目,但最旧的条目除外。

此图显示了该问题的一个示例。

系统需要自动删除以蓝色突出显示的曲目,因为它们不需要。

因此,在summaryCron中,需要每15分钟运行一次。它需要查找最后的x个条目(可能是30个)。它需要查找任何重复项。它需要删除所有找到的文件,但最旧的文件除外(这将保留有关首次播放时间的信息)。这应该是一个非常轻的工作,以避免高cpu。

任何帮助都将不胜感激。

谢谢

enter image description here

1 个回复
SO网友:Mike Baxter

首先,确保实际上有15分钟的可用时间间隔。

// create the cron scheduled interval to be used
add_filter(\'cron_schedules\',\'ex11_cron_schedules\');
function ex11_cron_schedules($schedules){
    if(!isset($schedules["15min"])){
        $schedules["15min"] = array(
            \'interval\' => 15*60,
            \'display\' => __(\'Once every 15 minutes\'));
    }
    return $schedules;
}
然后创建自定义WP\\U查询循环,以获取需要比较的所有记录,并归档不再需要的记录(副本):

// I haven\'t tested this yet. You might need to fine tune it.
// You might also need to tune the query statements to suit the Track CPT
function wpse_archive_duplicate_tracks(){
    $args = array( \'post_type\'=>\'track\',\'pust_status\'=>\'publish\');
    $tracks = get_posts($args);
    $tracks_to_keep = array();

    foreach($tracks as $track){
        if (array_key_exists($track->artist . \'~\' .$track->post_title, $tracks_to_keep)){                
            $toUpdate = array(
                \'ID\' = $track->ID,
                \'post_status\' = \'archive\', // change to \'trash\' to delete
               );
            wp_update_post($toUpdate);
    } else {
         $tracks_to_keep[$track->artist . \'~\' .$track->post_title] = $track;
    }
}
最后,您需要安排归档功能:

wp_schedule_event(time(), \'15min\', \'wpse_archive_duplicate_tracks\');     
Parting thought: 您可能还想考虑在已检查的曲目中添加meta\\u数据字段,这样就不必每次都检查它们。但是如果副本可以随时返回,这可能不适合您的情况。

祝你好运

相关推荐

在WordPress cronjob内调用do_action()

我在WordPress中编写了一个cronjob,每5分钟执行一次get。在cronjob的函数中,我试图执行do_action:error_log(\'Send Email\'); do_action( \'trigger_new_subscription_notification_email\', $dv_id, $new_order->id ); 我的问题是现在可以在调试中看到error\\u日志。WordPress日志,但没有发送电子邮件。当我像在cronmanager,