将未来日期的帖子标记为已发布

时间:2010-08-12 作者:curtismchale

用例:

我有一个与音乐节目相关的帖子类型。“显示时间”是通过设置为将来某个时间的发布后日期获取的。我发现了一个函数,该函数可以接收未来的日志并保留日期,但会将日志标记为在保存时发布,但无法确定如何为自定义日志类型自定义日志。

功能如下所示。

<?php
    function setup_future_hook() {
        // Replace native future_post function with replacement
        remove_action(\'future_post\',\'show\', \'_future_post_hook\');
        add_action(\'future_post\', \'show\', \'publish_future_post_now\');
    }

    function publish_future_post_now($id) {
        // Set new post\'s post_status to "publish" rather than "future."
        wp_publish_post($id);
    }

    add_action(\'init\', \'setup_future_hook\');
?>

5 个回复
最合适的回答,由SO网友:curtismchale 整理而成

结合Mike和Jan的答案,我想出了这个方法,它只适用于讨论中的帖子类型。我们不需要show的条件,因为“future\\u show”挂钩只获取show的post类型并更新它。

<?php
    function setup_future_hook() {
        // Replace native future_post function with replacement
        remove_action(\'future_show\',\'_future_post_hook\');
        add_action(\'future_show\',\'publish_future_post_now\');
    }

    function publish_future_post_now($id) {
        wp_publish_post($id);
    }

    add_action(\'init\', \'setup_future_hook\');
?>

SO网友:MikeSchinkel

我不能肯定,因为我没有你的网站来测试,但我相信你只需要删除\'show\' 从…起remove_action()add_action() 呼叫。这个wp_publish_post() 函数对于post类型是不可知的,至少在阅读代码时是这样。所以试试这个:

<?php
    function setup_future_hook() {
        // Replace native future_post function with replacement
        remove_action(\'future_post\', \'_future_post_hook\');
        add_action(\'future_post\', \'publish_future_post_now\');
    }

    function publish_future_post_now($id) {
        // Set new post\'s post_status to "publish" rather than "future."
        wp_publish_post($id);
    }

    add_action(\'init\', \'setup_future_hook\');
?>
当然,如果你只想做节目,你可能想做这样的事情(尽管如果你也需要它来处理其他类型的帖子,逻辑会更复杂):

function publish_future_post_now($id) {
    $post = get_post($id);
    if (\'show\' == $post->post_type)
        wp_publish_post($id);
}
希望这有帮助?

SO网友:Jan Fabry

我想这次行动是由wp_transition_post_status. 代码是:

function wp_transition_post_status($new_status, $old_status, $post) {
    do_action(\'transition_post_status\', $new_status, $old_status, $post);
    do_action("${old_status}_to_$new_status", $post);
    do_action("${new_status}_$post->post_type", $post->ID, $post);
}
因此,对于未来的正常帖子,最后一个钩子是future_post, 但对于你的类型来说future_show 或者不管你是什么类型的鼻涕虫。

SO网友:Joe Hoyle

如果你只想为“show times”添加一个额外的日期,那么添加一个正好可以做到这一点的元框可能会更容易——使用发布日期来欺骗它可能会有潜在的问题,因为WordPress会将它设置为“future”状态,每当它更新为未来的发布日期时(我想),所以每次更新一篇文章时,你都必须挂起以重新设置。此外,这样您就可以为预期的内容保留“发布日期”。

我可能会用meta_key, 和一个自定义元框。尽管这取决于显示帖子的查询有多复杂。

如果将meta_值设置为时间戳,则仍可以按显示时间日期排序,或选择特定日期之前/之后:

$events = get_posts( \'post_type=events&meta_key=show_time&meta_value=\' . strtotime( \'+1 week\' ) . \'&meta_compare=<&orderby=meta_value\' );

将在当前日期后的一周内获得所有“活动”的放映时间。注:以上未经测试,但应能正常工作:)

SO网友:Adam David

WP Dev Nacin使用一个简单的函数重写:

remove_action(\'future_post\', \'_future_post_hook\');
add_filter( \'wp_insert_post_data\', \'nacin_do_not_set_posts_to_future\' );

function nacin_do_not_set_posts_to_future( $data ) {
    if ( $data[\'post_status\'] == \'future\' && $data[\'post_type\'] == \'post\' )
        $data[\'post_status\'] = \'publish\';
    return $data;
}

结束

相关推荐