Jeg er litt forvirret over hvorfor dette ikke fungerer – selv om det må sies at jeg ikke er sikker på hva apply_filters()
og add_filter
gjør det, så noen generelle tips vil også være bra!
Jeg vil ha et spørsmål som viser de fem tidligere innleggene på en enkelt innleggsside. Jeg sender det aktuelle innleggets dato av, og vil bruke et filter som filtrerer ut innlegg tidligere enn dette.
function sw_filter_posts_before( $where = "", $date) { $where .= " AND post_date < "" . $date . """; return $where; }
Hvordan bruker jeg dette riktig? Bare ved å bruke add_filter eller Apply_filter før du installerer et nytt WP_Query-objekt, ser det ikke ut til å fungere riktig.
Takk på forhånd!
Rediger: For å gå nærmere inn på ting, vil jeg forstå hvordan du sender en variabel inn i filteret, da jeg ikke kan få $ date til å gå fra en annen funksjon.
Her er det sagt en annen funksjon (det er et ajax-anrop i wordpress, derfor begynner jeg med å få innleggs-ID for den aktuelle siden gjennom 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
Hva prøver du å filtrere? Jeg vil anta at du prøver å legge til et filter i en filterkrok kalt posts_before
. I så fall må du legge til filteret ditt i denne 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" );
Merk at jeg endret funksjonsnavnet ditt. filter_posts_before()
er altfor generisk med et funksjonsnavn, og vil sannsynligvis forårsake en kollisjon med funksjonsnavn.
EDIT
Og bare for å presisere:
-
apply_filters()
er filterkrokposisjon , kalles av kjernekode , og brukes til å bruk eventuelle filtre som er lagt til i køen av Temaer / Plugins ( og kjerne). -
add_filter()
kalles av Temaer / plugins (og kjerne), og brukes til å legge til filtre i køen som skal påføres kroken for kjerne.
EDIT 2
Basert på kommentaren din ovenfor er kroken posts_where
. Så la oss ta en sprekk i å gjenopprette tilbakeringingsfunksjonen din:
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
- Takk for avklaringen! Jeg ' Jeg sørger for å gi nytt navn til filteret. Jeg forstår fortsatt ikke ' hvordan jeg skal passere $ date variabel til dette, kan du også avklare det? Takk!
- Hva er
$date
variabelen, og hvor kommer den fra? - $ date kommer fra en annen funksjon av meg, det er datoen for gjeldende innlegg, i formatet ' Ymd '.
- Globaliserer du
$date
, eller returnerer du den fra funksjonen, hva? Kan du legge ut den funksjonen ' s kode , også? - Okey-cokey, jeg ' har oppdatert det opprinnelige innlegget med noen flere detaljer. Jeg kunne globalisere datoen, men er det helt nødvendig? Er det ikke best, hvis mulig, å bare overføre det på en eller annen måte?
$date
-variabelen bruker$post
data, så vi må vite om vi ' re filtrering inne eller utenfor av Loop.