根据自定义域日期删除自定义帖子

时间:2016-05-11 作者:Mayank

已解决##以下更新的代码

我已经创建了名为“esitykset”的自定义帖子类型,如果它们比帖子的“show\\u date”自定义字段中的日期旧,我想删除它们。

所以我尝试了以下代码

 add_action( \'wp\', \'expire_events_daily\' );
function expire_events_daily() {
    if ( ! wp_next_scheduled( \'delete_expired_events\' ) ) {
        wp_schedule_event( time(), \'hourly\', \'delete_expired_events\');
    }
}
add_action( \'delete_expired_events\', \'delete_expired_events_callback\' );


function delete_expired_events_callback() 
{
    $args = [
        \'post_type\'      => \'esitykset\',
        \'posts_per_page\' => -1,
        \'fields\'         => \'ids\', //only get post id\'s
        \'meta_query\'     => [
            [
               \'key\'     => \'show_date\',
               \'value\'   => current_time( \'Y/m/d\' ),
               \'compare\' => \'<\'
            ]
        ]
    ];

    $events = get_posts( $args );

    if ( $events ) {
        // Loop through the post ID\'s and delete the post
        foreach ( $events as $id )
            wp_trash_post( $id );
    }
}
为了让上面的代码正常工作,我必须添加

define(\'ALTERNATE_WP_CRON\', true);
在我的wp配置中。php文件。

现在它成功了。谢谢你的帮助。

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

此处的日期格式不匹配。你说你的日期保存为Y/m/d 在自定义字段中,这是正确的,但您尝试将此格式与unix timestamp这是time())。

为了匹配或比较自定义字段中的两个不同日期,日期和时间格式必须完全相同,这就是自定义字段的工作方式。没有需要了解的逻辑,也没有转换和匹配不同日期/时间格式的逻辑,因此您需要手动确保所有内容都匹配。

而不是使用time() 要返回当前日期/时间并将其用作日期/时间比较,应使用current_time( \'Y/m/d\' ). 请注意,这只有在WordPress 3.9中才能实现

另一个注意事项是,我们可以将您的函数简化如下,这将更快、性能更好(注意:至少需要PHP 5.4)

function delete_expired_events_callback() 
{
    $args = [
        \'post_type\'      => \'esitykset\',
        \'posts_per_page\' => -1,
        \'fields\'         => \'ids\', //only get post id\'s
        \'meta_query\'     => [
            [
               \'key\'     => \'show_date\',
               \'value\'   => current_time( \'Y/m/d\' ),
               \'compare\' => \'<\'
            ]
        ]
    ];

    $events = get_posts( $args );

    if ( $events ) {
        // Loop through the post ID\'s and delete the post
        foreach ( $events as $id )
            wp_delete_post( $id );
    }
}

相关推荐

如何让`wp-list-table`显示我在Custom-Post中的`Custom-Fields`

一切都好吗<我需要wp-list-table 也要显示custom-fields 在每个custom-post 我有,但我不知道如何做到这一点,在这幅图中,它显示了带有字段的表格:Title, Author and Publication Date: 我想要的是能够选择custom-fields 将出现,例如以下示例Title, Carta, Naipe, Author, and Date of Publication: