미래의 게시물을 게시 된 것으로 표시 남기지 만 게시물을 저장시

사용 사례 :

음악 쇼와 관련된 게시물 유형이 있습니다. ‘쇼 시간’은 게시 일정을 통해 나중에 일정 시간으로 설정됩니다. 나는 날짜가 지난 블로그 게시물을 가져 와서 날짜를 남기지 만 게시물을 저장시 게시 된 것으로 표시하지만 사용자 정의 게시물 유형에 맞게 게시물을 사용자 정의하는 방법을 알 수없는 기능을 발견했습니다.

기능은 아래와 같습니다.

<?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또는 유형 슬러그가 무엇이든됩니다.


답변

‘표시 시간’에 추가 날짜를 추가하는 것만으로 원하는 경우 메타 데이터 상자를 추가하는 것이 더 쉬울 수 있습니다. 게시 날짜를 스푸핑하기 위해이를 사용하면 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' );

현재 날짜로부터 1 주일이 지나면 쇼 타임이 표시된 모든 ‘이벤트’가 표시됩니다. 참고 : 위의 테스트되지 않았지만 작동 해야 합니다 🙂


답변

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;
}