Mitä add_filters () ja Apply_filter () tekevät?

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

  • Okei, Ensinnäkin: mihin koukkuun tarkalleen yrität lisätä suodatinta? Sillä on merkitystä, koska muuttuja $date käyttää $post -tietoja, joten meidän on tiedettävä, onko div> suodattaa uudelleen silmukan sisäpuolelle tai ulkopuolelle .
  • Luulen, että tämä saattaa olla se, että puuttuminen wp-suodattimien tiedoista on minulle järkyttävä. Luulin, että koukku oli ' posts_where ', ja se lisäisi annetun merkkijonon SQL-kyselyyn. Sikäli kuin olen ' tietoinen siitä, että ' on silmukan ulkopuolella, koska se ' s silmukan luomisen esikäsittelyosassa. Onko sinulla ehdotusta siitä, miten saavuttaisin tavoitteeni parhaiden käytäntöjen avulla?
  • Toki voimme päästä sinne. 🙂 Mitä päivämäärää haluat käyttää? Kysytään tarkemmin: Kuinka haluat määrittää minkä päivämäärän haluat käyttää?

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!

  • Mikä on $date -muuttuja ja mistä se tulee?
  • $ date tulee toisesta funktiostani, se on nykyisen viestin päivämäärä muodossa ' Ymd '.
  • Globalisoitko $date vai palautatko sen funktiosta, mitä? Voitteko lähettää kyseisen funktion ' koodin , myös?
  • Okey-cokey, olen ' päivittänyt alkuperäisen viestin yksityiskohdilla. Voisin globalisoida päivämäärän, mutta onko se täysin välttämätöntä? Onko se ei parasta, jos mahdollista, vain siirtää se jollakin tavalla?
  • Vastaa

    Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *