Co dělají add_filters () a apply_filter ()?

Jsem trochu zmatený, proč to nefunguje – i když je třeba říci, že si nejsem jistý, co a add_filter fungují, takže všechny obecné tipy by byly také skvělé!

Chci dotaz, který vyvolá pět dřívějších příspěvků na stránku s jediným příspěvkem. Posílám datum aktuálního příspěvku a chci použít filtr, který odfiltruje příspěvky dříve.

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

Jak používám to správně? Pouhé použití add_filter nebo apply_filter před vytvořením instance nového objektu WP_Query se nezdá, že by fungoval správně.

Předem děkujeme!

Upravit: Chcete-li jít do věcí dále, rád bych pochopil jak předat proměnnou do filtru, protože nemůžu dostat $ date k předání z jiné funkce.

Zde je řečena další funkce (je to volání Ajaxu ve WordPressu, proto začínám získáním ID příspěvku pro aktuální stránku prostřednictvím proměnné $ _POST):

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

Komentáře

  • Dobře, první věci, první: na jaký hák, přesně, snažíte se přidat svůj filtr? To je důležité, protože vaše $date proměnná používá $post data, takže musíme vědět, jestli ' re filtrování uvnitř nebo vně smyčky.
  • Myslím, že by to mohlo být místo, kde mě nedostatek znalostí filtrů wp zaráží. Myslel jsem, že háček je ' posts_where ' a přidá daný řetězec k dotazu SQL. Pokud si ' vím, že ' je mimo smyčku, protože ' s v předzpracovávací části vytváření smyčky. Máte návrh, jak bych pomocí osvědčených postupů dosáhl svého cíle?
  • Jistě, můžeme se tam dostat. 🙂 Jaké datum chcete použít? Přesnější otázka: Jak chcete určit jaké datum použít?

Odpovědět

Co se pokoušíte filtrovat? Předpokládám, že se pokoušíte přidat filtr do háku filtru s názvem posts_before. V takovém případě musíte přidat svůj filtr do tohoto háku pomocí 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" ); 

Upozorňujeme, že jsem změnil název vaší funkce. filter_posts_before() je příliš obecný název funkce a je velmi pravděpodobné, že způsobí kolizi pojmenování funkcí.

UPRAVIT

A jen objasnit:

  • apply_filters() je umístění háku filtru , je volán jádrovým kódem a slouží k použít všechny filtry, které jsou přidány do fronty podle motivů / pluginů ( a jádro).
  • add_filter() je volán Themes / Plugins (a jádro) a slouží k přidání filtrů do fronty , které se použijí na zavěšení jádrem.

EDIT 2

Na základě výše uvedeného komentáře je háček posts_where. Pojďme tedy znovu vytvořit funkci zpětného volání:

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

Komentáře

  • Děkuji za vysvětlení! <

Nezapomeňte přejmenovat filtr. Stále nerozumím tomu, jak předat $ date k této proměnné, můžete to také objasnit? Díky!

  • Co je to proměnná $date a odkud pochází?
  • $ date pochází z jiné mé funkce, je to datum aktuálního příspěvku ve formátu ' Ymd '.
  • Globalizujete $date nebo jej vracíte z funkce, co? Můžete zveřejnit tuto funkci ' s kódem , také?
  • Okey-cokey, aktualizoval jsem původní příspěvek o několik podrobností. Datum jsem mohl globalizovat, ale je to zcela nutné? Je to tak? není nejlepší, pokud je to možné, jen to nějak předat?
  • Napsat komentář

    Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *