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
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?
$date
variabel använder$post
data, så vi måste veta om vi ' re filtrering inuti eller utanför av Loop.