我想做一个cron工作,删除帖子的自定义字段中比日期更早的所有帖子。我的函数中有以下函数.php我的自定义字段名称为bewerbungs_frist
。
function foobar_truncate_posts(){
global $wpdb;
$currenttime = new DateTime();
$currenttime_string = $currenttime->format('Ymd');
# Set your threshold of max posts and post_type name
$post_type = 'job';
# Query post type
$query = "
SELECT ID FROM $wpdb->posts
WHERE post_type = '$post_type'
AND post_status = 'publish'
ORDER BY post_modified DESC
";
$results = $wpdb->get_results($query);
# Check if there are any results
if(count($results)){
foreach($results as $post){
$customfield = get_field('bewerbungs_frist', $post->ID);
$customfield_object = new DateTime($customfield);
$customfield_string = $customfield_object->format('Ymd');
if ( $customfield_string < $currenttime_string ) {
echo "The value of the custom date field is in the past";
echo $customfield_string;
$purge = wp_delete_post($post->ID);
}
}
}
}
foobar_truncate_posts();
我使用插件来处理我的cronjobs。 Hock名称为:foobar_truncate_posts
,参数为[]
cronjob有效,但它不会删除那些日期比今天更早的自定义日期的帖子。这两个变量是相同的。
$currenttime_string
20130820
$customfield_string
20130820
答案 0 :(得分:1)
你的代码中有一个拼写错误,你在$result
结束时错过了's'。
此:
foreach($result as $post){
应该是这样的:
foreach($results as $post){
我刚试了一下。完成修复后,wp_delete_post()工作得很好。
修改
我真的不清楚你要做什么。您想检查自定义字段是否设置为过去的某个时间? continue
的目的是什么?另外,我猜你正在使用高级自定义字段(ACF)。使用jquery日期选择器,您可以默认将日期格式设置为Ymd
,这样您就不必将其转换为DateTime对象。
无论如何,这个函数应该解释如何正确设置和比较时间值,你应该可以从那里获取它:
function foobar_truncate_posts(){
global $wpdb;
$currenttime = new DateTime();
$currenttime_string = $currenttime->format('Ymd');
# Set your threshold of max posts and post_type name
$post_type = 'post_type_job';
# Query post type
$query = "
SELECT ID FROM $wpdb->posts
WHERE post_type = '$post_type'
AND post_status = 'publish'
ORDER BY post_modified DESC
";
$results = $wpdb->get_results($query);
# Check if there are any results
if(count($results)){
foreach($results as $post){
$customfield = get_field('bewerbungs_frist', $post->ID);
$customfield_object = new DateTime($customfield);
$customfield_string = $customfield_object->format('Ymd');
if ( $customfield_string < $currenttime_string ) {
echo "The value of the custom date field is in the past";
$purge = wp_delete_post($post->ID);
}
}
}
}
foobar_truncate_posts();