Hvad gør add_filters () og Apply_filter ()?

Jeg er lidt forvirret over, hvorfor dette ikke fungerer – selvom det skal siges, at jeg ikke er helt sikker på, hvad apply_filters() og add_filter gør det, så alle generelle tip ville også være gode!

Jeg vil have en forespørgsel, der viser de fem tidligere indlæg på en enkelt indlægsside. Jeg sender datoen for det aktuelle indlæg og ønsker at anvende et filter, der filtrerer indlæg tidligere end dette.

function sw_filter_posts_before( $where = "", $date) { $where .= " AND post_date < "" . $date . """; return $where; } 

Hvordan anvender jeg dette korrekt? Du skal blot bruge add_filter eller Apply_filter, før du installerer et nyt WP_Query-objekt, ser ikke ud til at fungere korrekt.

På forhånd tak!

Rediger: For at gå nærmere ind på tingene vil jeg gerne forstå hvordan man sender en variabel ind i filteret, da jeg ikke kan få $ date til at overføre fra en anden funktion.

Her siges en anden funktion (det er et ajax-opkald inden for wordpress, derfor begynder jeg med at få post-id for den aktuelle side gennem en $ _POST-variabel):

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

Kommentarer

  • Okay, første ting, først: til hvilken kroge, præcist, prøver du at tilføje dit filter? Det betyder noget, fordi din $date variabel bruger $post data, så vi er nødt til at vide, om vi ' re filtrering indeni eller uden for sløjfen.
  • Jeg tror, det kan være her min mangel på wp-filtre viden slår mig ned. Jeg troede, at krogen var ' posts_where ', og det ville føje den givne streng til SQL-forespørgslen. Så vidt jeg ' er klar over, at ' er uden for sløjfen, da det ' s i forbehandlingsdelen af oprettelse af en loop. Har du et forslag til, hvordan jeg ville nå mit mål med bedste praksis?
  • Sikker på, vi kan nå dertil. 🙂 Hvilken dato vil du bruge? Spurgt mere nøjagtigt: hvordan vil du bestemme hvilken dato du skal bruge?

Svar

Hvad forsøger du at filtrere? Jeg antager, at du prøver at føje et filter til en filterkrog kaldet posts_before. I hvilket tilfælde skal du tilføje dit filter til denne krog via 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" ); 

Bemærk, at jeg ændrede dit funktionsnavn. filter_posts_before() er alt for generisk med et funktionsnavn og sandsynligvis forårsager en kollision med funktionsnavngivelse.

REDIGER

Og bare for at præciser:

  • apply_filters() er filterkrogplacering , kaldes af kernekode , og bruges til anvend alle filtre, der er tilføjet til køen ved temaer / plugins ( og kerne).
  • add_filter() kaldes af Temaer / plugins (og kerne), og bruges til at tilføje filtre til køen , der skal påføres krogen for kerne.

EDIT 2

Baseret på din kommentar ovenfor er krogen posts_where. Så lad os tage en knæk ved at genopbygge din tilbagekaldsfunktion:

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" ); 

Kommentarer

  • Tak for afklaringen! Jeg ' Jeg sørger for at omdøbe filteret. Jeg forstår stadig ikke ' hvordan man overfører $ -datoen variabel til dette, kan du også afklare det? Tak!
  • Hvad er $date variablen, og hvor kommer den fra?
  • $ date kommer fra en anden af mine funktioner, det er datoen for det aktuelle indlæg i formatet ' Ymd '.
  • Globaliserer du $date eller returnerer det fra funktionen, hvad? Kan du sende den funktion ' s kode , også?
  • Okey-cokey, jeg ' har opdateret det oprindelige indlæg med nogle flere detaljer. Jeg kunne globalisere datoen, men er det helt nødvendigt? Er det ikke bedst, hvis det er muligt, bare at videregive det på en eller anden måde?

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *