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
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!
$date
a odkud pochází? $date
nebo jej vracíte z funkce, co? Můžete zveřejnit tuto funkci ' s kódem , také?
$date
proměnná používá$post
data, takže musíme vědět, jestli ' re filtrování uvnitř nebo vně smyčky.