Mit csinálnak az add_filters () és az Apply_filter ()?

Kicsit össze vagyok zavarodva, hogy ez miért nem működik – bár el kell mondani, hogy “nem vagyok biztos benne, mi apply_filters() és add_filter csinálják, ezért minden általános tipp is nagyszerű lenne!

Szeretnék egy olyan lekérdezést, amely az öt korábbi bejegyzést hozza fel egyetlen postai oldal. Küldöm az aktuális bejegyzés dátumát, és olyan szűrőt szeretnék alkalmazni, amely kiszűri az ennél korábbi bejegyzéseket.

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

Hogyan helyesen alkalmazom ezt? Egyszerűen az add_filter vagy az Apply_filter használatával, mielőtt egy új WP_Query objektumot példányosítanánk, úgy tűnik, hogy ez nem fog megfelelően működni.

Előre is köszönöm!

Szerkesztés: Ha tovább szeretnék dolgozni, szeretném megérteni hogyan adhatok át egy változót a szűrőbe, mivel nem tudom megkapni a $ date-t egy másik függvényből.

Itt van egy másik függvény (ez egy ajax hívás a wordpress-en belül, ezért azzal kezdem, hogy a az aktuális oldal postai azonosítója egy $ _POST változón keresztül):

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; } 

Megjegyzések

  • Rendben, első dolgok, először: pontosan melyik kampóra próbálja hozzáadni a szűrőt? Ez számít, mert a $date változó $post adatokat használ, ezért tudnunk kell, hogy ' újraszűrés a hurok belsejében vagy kívül a hurokban.
  • Azt hiszem, ez lehet az az eset, amikor a wp-szűrők ismeretének hiánya lesújt rám. Úgy gondoltam, hogy a horog ' posts_where ', és hozzáadja az adott karakterláncot az SQL lekérdezéshez. Amennyire ' tudatában vagyok annak, hogy ' a cikluson kívül van, mivel ' s a ciklus létrehozásának előfeldolgozási részében. Van valami javaslata arról, hogyan érhetném el célomat a legjobb gyakorlattal?
  • Persze, eljuthatunk oda. 🙂 Milyen dátumot szeretne használni? Pontosabban feltették a kérdést: hogyan szeretné meghatározni melyik dátumot használja?

Válasz

Mit próbálsz szűrni? Feltételezem, hogy megpróbálsz szűrőt hozzáadni egy posts_before nevű szűrőhoroghoz. Ebben az esetben hozzá kell adnia a szűrőt ehhez a horoghoz a add_filter() útján:

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" ); 

Ne feledje, hogy megváltoztattam a függvény nevét. A filter_posts_before() túlságosan általános egy függvénynévhez, és nagy valószínűséggel funkció-elnevezési ütközést okoz.

SZERKESZTÉS

És csak azért, hogy tisztázni:

  • apply_filters() a szűrőhorog helye , magkóddal hívják meg , és alkalmazzon minden olyan szűrőt, amelyet hozzáadtak a sorhoz a Themes / Plugins ( és mag).
  • add_filter() Témák / bővítmények (és mag), és arra használják, hogy szűrőket adjon a sorba, amelyeket maggal kell a horogra alkalmazni.

2 SZERKESZTÉS

A fenti megjegyzésed alapján a horog posts_where. Tehát tegyünk egy pillanatot a visszahívási funkció újjáépítésénél:

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" ); 

Megjegyzések

  • Köszönöm a pontosítást! Én ' feltétlenül átnevezem a szűrőt. Még mindig nem értem ', hogy átadjam a $ dátumot ennek változója, tisztázná ezt is? Köszönöm!
  • Mi a $date változó, és honnan származik?
  • A $ date egy másik funkciómtól származik, ez az aktuális bejegyzés dátuma, ' Ymd ' formátumban. / li>
  • Globalizálod a $date szolgáltatást, vagy visszaadod a függvényből, mi? Feladhatod a függvény ' s kódját , szintén?
  • Okey-cokey, én ' frissítettem az eredeti bejegyzést néhány további részlettel. Globalizálhatnám a dátumot, de ez teljesen szükséges? nem az a legjobb, ha lehetséges, csak átadni valahogy?

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük