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
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?
$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.