it-swarm-ko.tech

미래의 날짜가 게시 된 게시물을 게시 됨으로 표시

사용 사례 :

나는 음악 쇼와 관련된 게시물 유형이 있습니다. '쇼 시간'은 향후 게시 예정 날짜 이후로 지정됩니다. 미래의 날짜가 지정된 블로그 게시물을 가져 와서 날짜를 남기고 저장시 게시 된 것으로 표시하지만 사용자 정의 게시 유형에 맞게 사용자 정의하는 방법을 파악할 수는없는 기능을 발견했습니다.

이 기능은 다음과 같습니다.

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

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

테스트 할 사이트가 없기 때문에 확신 할 수 없지만 remove_action()add_action() 호출에서 'show'를 제거해야한다고 생각합니다. 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);
}

희망이 도움이 될까요?

6
MikeSchinkel

나는이 동작이 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 또는 귀하의 유형 슬러그가 무엇이든간에됩니다.

3
Jan Fabry

모두 '쇼 시간'에 대한 추가 날짜를 추가하는 것이면 정확하게 게시 할 수있는 메타 박스를 추가하는 것이 더 쉬울 수 있습니다. 게시 날짜를 사용하면 스푸핑에 문제가 될 수 있습니다. 워드 프레스로 설정하면 미래의 게시 날짜 (내가 생각하기에)로 업데이트 될 때마다 "미래"상태가됩니다. 따라서 게시물이 업데이트 될 때마다 다시 연결해야합니다. 또한, 의도 한대로 "Publish Date"를 예약 할 수 있습니다.

아마도 meta_key와 사용자 정의 메타 상자 만 사용하게 될 것입니다. 그것은 쿼리가 얼마나 복잡한 지에 따라 포스트를 보여줍니다.

Meta_value를 타임 스탬프로 설정하면 표시 시간 날짜별로 정렬하거나 특정 날짜 전후에 선택할 수 있습니다.

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

현재의 날짜부터 일주일도 안되는 시간을 가진 모든 "이벤트"를 얻을 수 있습니다. 참고 : 위의 내용은 테스트되지 않았지만 should work :)

1
Joe Hoyle

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;
}
0
Adam David