Przypadek użycia:
Mam typ postu odnoszący się do programu muzycznego. „Czas pokazu” jest określany na podstawie daty publikacji, która jest ustawiona na pewien czas w przyszłości. Znalazłem funkcję, która pobiera przyszłe wpisy na blogu i pozostawia datę, ale zaznacza post jako opublikowany podczas zapisywania, ale nie byłem w stanie dowiedzieć się, jak go dostosować do niestandardowego typu postu.
Funkcja znajduje się poniżej.
<?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');
?>
custom-post-types
init
Curtismchale
źródło
źródło
remove_action
iadd_action
dzwonisz? Twoim drugim parametrem jest'show'
, ale czy nie powinna to być funkcja, którą dodajesz lub usuwasz?Odpowiedzi:
Niesamowite połączenie odpowiedzi Mike'a i Jana. Wymyśliłem to, co działa tylko na danym typie postów. Nie potrzebujemy warunku show, ponieważ hak „future_show” chwyta tylko typ postu show i aktualizuje go.
źródło
Nie mogę powiedzieć na pewno, ponieważ nie mam swoją witrynę do testu z ale wierzę, wystarczy wyjąć
'show'
zremove_action()
iadd_action()
połączeń. Tawp_publish_post()
funkcja jest agnostyczna w odniesieniu do typów postów, przynajmniej tak wygląda po przeczytaniu kodu. Spróbuj tego:Oczywiście, jeśli chcesz ograniczyć się do robienia tylko programów, możesz chcieć zrobić coś takiego (chociaż logika będzie bardziej skomplikowana, jeśli będziesz potrzebować jej do pracy z innymi typami postów):
Mam nadzieję że to pomoże?
źródło
Myślę, że ta akcja zostanie wywołana przez
wp_transition_post_status
. Kod to:Tak więc dla normalnych przyszłych postów będzie ostatnim hakiem
future_post
, ale dla twojego typu będzie to,future_show
czy jakikolwiek typ ślimaka.źródło
Jeśli wszystko, co chcesz zrobić, to dodać dodatkową datę dla „godzin pokazu”, może być łatwiej dodać meta-box, który robi dokładnie to samo - użycie opcji Opublikuj w celu sfałszowania może być potencjalnie problematyczne, ponieważ WordPress ustawi ją na „przyszły” status, ilekroć jest aktualizowany o przyszłą datę publikacji (tak myślę), więc będziesz musiał się zaczepiać za każdym razem, gdy post jest aktualizowany, aby ustawić go z powrotem. W ten sposób możesz zarezerwować „Data publikacji” zgodnie z przeznaczeniem.
Prawdopodobnie po prostu
meta_key
użyłbym niestandardowego pola meta. Jednak zależy to od stopnia skomplikowania zapytań, które pokazują posty.Jeśli ustawisz meta_value jako znacznik czasu, możesz nadal zamawiać według daty godziny pokazu lub wybrać przed / po określonej dacie:
$events = get_posts( 'post_type=events&meta_key=show_time&meta_value=' . strtotime( '+1 week' ) . '&meta_compare=<&orderby=meta_value' );
Otrzymałbym wszystkie „wydarzenia” z czasem pokazowym nie później niż tydzień od bieżącej daty. Uwaga: powyższe nie zostało przetestowane, ale powinno działać :)
źródło
WP Dev Nacin używa prostego zastąpienia funkcji:
źródło