Sunt „puțin confuz cu privire la motivul pentru care acest lucru nu funcționează – deși trebuie spus că” nu sunt sigur ce apply_filters()
și add_filter
fac, așa că orice sfat general ar fi minunat și!
Vreau o interogare care să afișeze cele cinci postări anterioare pe o singură pagină de postare. Trimit data postării curente și doriți să aplic un filtru care filtrează postările mai devreme de aceasta.
function sw_filter_posts_before( $where = "", $date) { $where .= " AND post_date < "" . $date . """; return $where; }
Cum aplic corect acest lucru? Pur și simplu utilizând add_filter sau apply_filter înainte de a crea un nou obiect WP_Query nu pare să funcționeze corect.
Vă mulțumim anticipat!
Editați: pentru a merge mai departe, aș vrea să înțeleg cum să treceți o variabilă în filtru, deoarece nu pot obține $ date pentru a trece de la o altă funcție.
Aici se spune o altă funcție (este un apel ajax în wordpress, prin urmare încep prin a obține ID-ul postării pentru pagina curentă printr-o variabilă $ _POST):
function create_more_videos_sidebar() { $id = $_POST["theID"]; $args = array( "post_type" => "videos", "posts_per_page" => 1, "p" => $id ); $wp_query = new WP_Query($args); while ($wp_query->have_posts()) : $wp_query->the_post(); $do_not_duplicate = $post->ID; $date = get_the_date("Y-m-d"); endwhile; $args = array( "post_type" => "videos", "posts_per_page" => 5 ); add_filter( "posts_where", "sw_filter_videos_before" ); //don"t know how to pass $date $wp_query = new WP_Query($args); remove_filter( "posts_where", "sw_filter_videos_before" ); //do loop stuff $response = json_encode( array( "result" => $result ) ); header( "Content-Type: application/json" ); echo $response; exit; }
Comentarii
Răspundeți
Ce încercați să filtrați? Voi presupune că încercați să adăugați un filtru la un cârlig de filtrare numit posts_before
. În acest caz, trebuie să adăugați filtrul la acest cârlig, prin add_filter()
:
function mytheme_filter_posts_before( $where = "", $date) { $where .= " AND post_date < "" . $date . """; return $where; } // Add function to the filter hook add_filter( "posts_before", "mytheme_filter_posts_before" );
Rețineți că v-am schimbat numele funcției. filter_posts_before()
este mult prea generic pentru un nume de funcție și este foarte probabil să provoace o coliziune de denumire a funcției.
EDIT
Și doar pentru a clarificați:
-
apply_filters()
este locația cârligului filtrului , este apelat de cod de bază și este utilizat pentru aplicați orice filtre care sunt adăugate la coada de Teme / Pluginuri ( și nucleu). -
add_filter()
este numit de Teme / Plugins (și core) și este folosit pentru a adăuga filtre la coadă pentru a fi aplicat cârligului de către core.
EDITARE 2
Pe baza comentariului dvs. de mai sus, cârligul este posts_where
. Deci, să luăm un crack la reconstruirea funcției de apel invers:
function mytheme_filter_posts_where( $where ) { // Here, we need to figure out how to // determine what date to use. In your // code example, you call get_the_date(), // but this function must be used inside // the Loop. Let"s try get_the_time() // instead. You"ll just need to come up // with a way to determine what post ID to use. $post = "some_post_id"; $date = get_the_time( "Y-m-d", $post ); $where .= " AND post_date < "" . $date . """; return $where; } // Add function to the filter hook add_filter( "posts_where", "mytheme_filter_posts_where" );
Comentarii
- Vă mulțumim pentru clarificare! ' mă voi asigura că redenumesc filtrul. Încă nu ' nu înțeleg cum să trec $ data variabilă la aceasta, ați putea clarifica și asta? Mulțumesc!
- Care este variabila
$date
și de unde provine? - $ date provine dintr-o altă funcție a mea, este data postării curente, în format ' Ymd '.
- Globalizați
$date
sau îl întoarceți din funcție, ce? Puteți posta codul funcției ' , de asemenea? - Okey-cokey, am ' am actualizat postarea originală cu câteva detalii. Aș putea globaliza data, dar este absolut necesar? nu este mai bine, dacă este posibil, să îl treci cumva?
$date
folosește date$post
, deci trebuie să știm dacă ' re filtrează în interior sau în afara buclei.