미래의 게시물을 게시 된 것으로 표시


13

사용 사례 :

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

기능은 아래와 같습니다.

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

1
당신이 당신의에서 오류가 가능 remove_action하고 add_action전화? 두 번째 매개 변수는입니다 'show'. 추가하거나 제거하는 기능이 아니어야합니까?
Jan Fabry

답변:


7

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

7

내가 가진 테스트 사이트를 가지고 있지 않기 때문에 나는 확실히 말할 수 없다하지만 난 그냥 제거 할 필요는 생각 '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);
}

도움이 되었기를 바랍니다?


예, 첫 번째 코드는 내가 시작한 것으로 일반 WordPress 게시물에서 작동하지만 'show'조건을 추가하면 아무것도 작동하지 않습니다. 조건부가 없어도 맞춤 게시물 유형에서는 작동하지 않습니다.
curtismchale

귀하의 질문을 여러 번 읽었지만 작동하지 않는 제안 된 코드를 무시하면 정확히 무엇을 달성하려고하는지 명확하지 않습니다. 정확히 달성하려는 것을 명확히 할 수 있습니까? post_date에있는 날짜 / 시간 또는 다른 것에 게시물을 게시 하시겠습니까? 아니면 이미 해결 했습니까?
MikeSchinkel

이미 해결되었습니다 (아래 코드를 제공했습니다). 미래에 예약되어 있어도 맞춤 게시물 유형 게시물을 게시하고 싶었습니다.
curtismchale

4

이 작업이에 의해 호출 된 것 같습니다 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또는 유형 슬러그가 무엇이든됩니다.


1

'표시 시간'에 추가 날짜를 추가하는 것만으로 원하는 경우 메타 데이터 상자를 추가하는 것이 더 쉬울 수 있습니다. 게시 날짜를 스푸핑하기 위해이를 사용하면 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 주일이 지나면 쇼 타임이 표시된 모든 '이벤트'가 표시됩니다. 참고 : 위의 테스트되지 않았지만 작동 해야 합니다 :)


나는이 100 %에 동의합니다-게시 날짜를 이벤트 날짜의 핵으로 사용하는 것보다 메타 상자를 사용하는 것이 훨씬 좋습니다.
Travis Northcutt

예, meta_box가 작동하지만 멋진 jQuery 날짜 및 시간 선택기를 추가하는 것이 어렵다는 것을 알았습니다. 주식 WP 하나는 내가 생각해 낼 수있는 것보다 훨씬 좋았습니다.
curtismchale

WP Easy Post Types 플러그인은 사용자 정의 날짜 필드를 제공하고 간단한 날짜 선택기를 제공합니다. 이벤트 목록 기능에 직접 사용했습니다.
Rick Curran

0

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

작동 방식에 대한 설명을 추가하십시오.
Nicolai
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.