用例:

我有一个与音乐表演有关的帖子类型。在发布日期中,将抓住“表演时间”,该日期将在将来设置为一段时间。我找到了一个函数,该函数会涉及以后的博客文章并留下日期,但标记了帖子在保存上发布的帖子,但尚未能够为自定义帖子类型进行自定义。

该功能在下面。

<?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');
?>
有帮助吗?

解决方案

很棒的结合了Mike和Jan的答案,我想出了此功能,它仅适用于有关帖子类型。我们不需要节目的条件,因为“ Future_show”挂钩仅抓住帖子类型并更新了。

<?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');
?>

其他提示

我无法确定,因为我没有您的网站可以测试,但我相信您只需要删除 'show'remove_action()add_action() 呼叫。这 wp_publish_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);
}

希望这可以帮助?

我认为这个动作被召唤 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 或您的类型sl。

如果您要做的就是添加“显示时间”的额外日期,那么添加一个元数据框可能会更容易 - 使用发布日期来欺骗它可能会出现问题,因为WordPress会将其设置为“未来”状态每当使用未来的发布日期更新时(我认为),因此每次更新帖子时,您都必须挂钩才能重新设置。另外,这样您就可以保留“发布日期”的预期。

我可能只会使用 meta_key, 和一个定制的元盒。尽管这取决于您的查询有多复杂的显示帖子。

如果将meta_value设置为时间戳,则可以在显示时间日期之前订购,或在特定日期之前 /之后选择:

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

从当前日期开始的一周,将在Showtime中获得所有“事件”。注意:以上未经测试,但是 应该 工作 :)

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;
}
许可以下: CC-BY-SA归因
scroll top