問題描述

用例:

我有一個與音樂表演有關的職位類型。 ‘show time’ 通過後期發佈日期被抓住,該日期設置在將來的一段時間。我發現了一個功能,可以使用未來的日誌博客帖子並留下日期,但標記的帖子是保存時發佈的,但無法確定如何為自定義帖子類型進行自定義。

功能如下。

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

次佳解決方案

我無法確定,因為我沒有您的網站進行測試,但我相信您只需要從 remove_action()add_action()調用中刪除'show'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);
}

希望這可以幫助?

第三種解決方案

我認為這個動作被 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 或者你的類型插件。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。