Vad gör add_filters () och Apply_filter ()?

Jag är lite förvirrad över varför detta inte fungerar – även om det måste sägas att jag inte är säker på vad apply_filters() och add_filter gör, så alla allmänna tips skulle också vara bra!

Jag vill ha en fråga som tar upp de fem tidigare inläggen på en enda inläggssida. Jag skickar det aktuella inläggets datum av och vill använda ett filter som filtrerar bort inlägg tidigare än detta.

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

Hur tillämpar jag detta korrekt? Att bara använda add_filter eller Apply_filter innan du installerar ett nytt WP_Query-objekt verkar inte fungera korrekt.

Tack på förhand!

Redigera: För att gå vidare på saker vill jag förstå hur man skickar en variabel in i filtret, eftersom jag inte kan få $ datum att passera från en annan funktion.

Här sägs en annan funktion (det är ett ajax-samtal inom wordpress, därför börjar jag med att få inläggs-ID för den aktuella sidan via 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

  • Okej, första saker, först: till vilken krok, exakt, försöker du lägga till ditt filter? Det betyder något, eftersom din $date variabel använder $post data, så vi måste veta om vi ' re filtrering inuti eller utanför av Loop.
  • Jag tror att det här kan vara där min brist på wp filter kunskap slår mig ner. Jag trodde att kroken var ' posts_where ', och det skulle lägga till den angivna strängen i SQL-frågan. Så långt jag ' är medveten om att ' är utanför slingan, eftersom den ' s i förbehandlingsdelen av att skapa en slinga. Har du ett förslag på hur jag skulle uppnå mitt mål med bästa praxis?
  • Visst, vi kan komma dit. 🙂 Vilket datum vill du använda? Frågas mer exakt: hur vill du bestämma vilket datum du ska använda?

Svar

Vad försöker du filtrera? Jag antar att du försöker lägga till ett filter i en filterkrok som heter posts_before. I vilket fall måste du lägga till ditt filter i den här kroken 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" ); 

Observera att jag ändrade ditt funktionsnamn. filter_posts_before() är alldeles för generiskt för ett funktionsnamn och kommer mycket sannolikt att orsaka en kollision med funktionsnamn.

EDIT

Och bara för att förtydliga:

  • apply_filters() är filterkrokplats , kallas av kärnkod , och används för att tillämpa alla filter som läggs till i kön av teman / plugins ( och kärna).
  • add_filter() kallas av Teman / plugins (och kärna) och används för att lägga till filter i kön som ska appliceras på kroken för kärna.

EDIT 2

Baserat på din kommentar ovan är kroken posts_where. Så, låt oss ta en spricka i att bygga upp din återuppringningsfunktion:

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

  • Tack för förtydligandet! Jag ' Jag ser till att byta namn på filtret. Jag förstår fortfarande inte ' hur jag skickar $ -datumet variabel till detta, kan du klargöra det också? Tack!
  • Vad är $date variabeln, och varifrån kommer den?
  • $ datum kommer från en annan funktion av mig, det är datumet för det aktuella inlägget, i formatet ' Ymd '.
  • Globaliserar du $date, eller returnerar du den från funktionen, vad? Kan du lägga upp den funktionen ' s kod , också?
  • Okey-cokey, jag ' har uppdaterat det ursprungliga inlägget med några mer detaljer. Jag kunde globalisera datumet, men är det helt nödvändigt? Är det inte bäst, om möjligt, att bara överföra det på något sätt?

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *