Olen hieman hämmentynyt siitä, miksi tämä ei toimi – vaikka on sanottava, en ole niin varma mitä apply_filters()
ja add_filter
tekevät, joten myös yleiset vinkit olisivat hienoja!
Haluan kyselyn, joka tuo esiin viisi aikaisempaa viestiä yhden postisivun. Lähetän nykyisen viestin päivämäärän ja haluan käyttää suodatinta, joka suodattaa pois aikaisemmat viestit.
function sw_filter_posts_before( $where = "", $date) { $where .= " AND post_date < "" . $date . """; return $where; }
Kuinka soveltanko tätä oikein? Yksinkertaisesti add_filter- tai Apply_filter-sovelluksen käyttäminen ennen uuden WP_Query-objektin instantointia ei tunnu toimivan oikein.
Kiitos jo etukäteen!
Muokkaa: Jos haluat mennä asioihin pidemmälle, haluaisin ymmärtää kuinka välittää muuttuja suodattimeen, koska en voi saada $ päivämäärää toisesta toiminnosta.
Tässä on mainittu toinen toiminto (se on ajax-kutsu WordPressissä, joten aloitan saamalla nykyisen sivun postitunnus $ _POST -muuttujan kautta):
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; }
kommentit
Vastaa
Mitä yrität suodattaa? Oletan, että yrität lisätä suodattimen suodatinkokoukseen nimeltä posts_before
. Tällöin sinun on lisättävä suodatin tähän koukkuun 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" );
Huomaa, että muutin funktion nimeäsi. filter_posts_before()
on aivan liian yleinen funktion nimestä ja aiheuttaa todennäköisesti funktioiden nimeämistörmäyksen.
MUOKKAA
Ja vain tarkenna:
-
apply_filters()
on -suodattimen koukun sijainti , kutsutaan ydinkoodilla , ja sitä käytetään käytä kaikkia suodattimia, jotka lisätään jonoon Themes / Plugins ( ja ydin). -
add_filter()
kutsutaan nimellä Teemat / laajennukset (ja ydin), ja sitä käytetään suodattimien lisäämiseen jonoon , jotka lisätään koukkuun ytimellä.
MUOKKAA 2
Yllä olevan kommenttisi perusteella koukku on posts_where
. Joten ottakaamme halki rakentaessasi takaisinsoittotoimintoa:
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" );
Kommentit
- Kiitos selvennyksestä! <
Haluan nimetä suodattimen uudelleen. En vieläkään ymmärrä, kuinka ate id välitetään ' muuttuja tähän, voisitteko myös selventää sitä? Kiitos!
$date
-muuttuja ja mistä se tulee? $date
vai palautatko sen funktiosta, mitä? Voitteko lähettää kyseisen funktion ' koodin , myös?
$date
käyttää$post
-tietoja, joten meidän on tiedettävä, onko div> suodattaa uudelleen silmukan sisäpuolelle tai ulkopuolelle .