Ce fac add_filters () și apply_filter ()?

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

  • Bine, primele lucruri, mai întâi: la ce cârlig, mai exact, încercați să adăugați filtrul? Asta contează, deoarece variabila dvs. $date folosește date $post, deci trebuie să știm dacă ' re filtrează în interior sau în afara buclei.
  • Cred că aici ar putea să mă lovească lipsa mea de cunoștințe despre filtrele wp. Am crezut că cârligul este ' posts_where ' și va adăuga șirul dat la interogarea SQL. În măsura în care ' știu că ' se află în afara buclei, așa cum ' s în partea de preprocesare a creării unei bucle. Aveți vreo sugestie despre cum aș atinge obiectivul meu cu cele mai bune practici?
  • Sigur, putem ajunge acolo. 🙂 Ce dată vrei să folosești? Întrebat mai exact: cum doriți să determinați ce dată să utilizați?

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?

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *