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