Intereting Posts
wp_register_script не загружается, как ожидалось Пользовательское определение типа сообщения не должно быть в теме – как? Неподготовленное исключение, создающее торговый бот Как дескриптор WordPress загружает изображения и как их использовать в коде Сделать wp_link_pages () подходящим для Twitter-разметки Bootstrap Как поймать все ошибки PHP с помощью специального обработчика ошибок? Добавление hreflang в multisite без плагина? Пользовательский навигатор: Как получить параметр $ args? Как перенаправить пользовательский архив типа сообщения на первый термин связанной таксономии? Мои запросы AJAX занимают 30 секунд Woocommerce заменяет изображение страницы продукта на вкладках продукта Как правильно проверить данные из $ _GET или $ _REQUEST с помощью функций WordPress? WP_query: принудительное заполнение последних номеров сообщений через настройки чтения Страница приложения WordPress не найдена ошибка для сообщений с дефис в permalink Подкаст настроен на странице или добавляет / канал на страницу

Добавить фильтр не работает с get_posts

При настройке плагина «Bryans Childpage Thumbnail Generator» я применяю фильтр (с разбивкой на страницы) к get_posts для страниц WP ( post_type=page ), но не фильтрует его вообще. Вот код:

 extract(shortcode_atts(array( 'order' => 'ASC', 'orderby' => 'title', 'id' => '', 'number' => -1, 'height' => '100', 'width' => '', 'size' => 'thumbnail', 'style' => '', 'include' => '', 'pagetitle' => false, 'selector' => 'h2', 'selector_height' => '30px', 'selector_width' => '100%', 'selector_padding' => '', 'showimages' => true, 'text_align' => 'left', 'text_margin' => '', 'exclude' => '', 'posts_per_page' => '5', 'page_number' => '1', 'filter_year' => '0' ), $attr)); if( $id == '') { $id = $post->ID; } $id = intval($id); if($width != null) { $width='width:' . $width . 'px'; } if ($order == 'RAND') { $orderby = 'none'; } if($text_margin == '') { $textmargin = ($height/2)-10; $textmargin .= "px 0 0 0"; } else { $textmargin = $text_margin; } $offsettext = ($height*3); $offset = ($page_number - 1) * $posts_per_page; $offset = $offset < 1 ? 0 : $offset; function filter_where( $where = '' ) { if($filter_year > 0) $where .= " AND post_date >= '" . $filter_year . "-01-01' AND post_date < '" . ($filter_year + 1) . "-01-01'"; // eg AND post_date >= '2011-01-01' AND post_date < '2012-01-01' return $where; } add_filter( 'posts_where', 'filter_where' ); $countposts = count(get_posts(array( 'suppress_filters' => false, 'post_parent' => $id, 'post_type' => 'page', 'post_status' => 'publish', 'numberposts' => $number, 'exclude' => $exclude, 'orderby' => $orderby ))); $childpages = & get_posts(array( 'suppress_filters' => false, 'post_parent' => $id, 'post_type' => 'page', 'post_status' => 'publish', 'numberposts' => $number, 'exclude' => $exclude, 'orderby' => $orderby, 'order' => $order, 'posts_per_page' => $posts_per_page, 'offset' => $offset )); remove_filter( 'posts_where', 'filter_where' ); $totalpages = $countposts / $posts_per_page; $totalpages = intval($totalpages) + ($totalpages > intval($totalpages) ? 1 : 0); 

И вот короткий код, вызывающий этот плагин:

 <?php echo do_shortcode("[gallery_childpages number='-1' height='220' width='295' size='medium' style='armthumbs' include='' pagetitle='1' selector='H2' showimages='0' showimages='true' exclude='1,33,22' posts_per_page = '9' page_number='" . get_query_var('page') . "' filter_year='" . $_GET['fyear'] . "']"); ?> 

Пагинация работает, но фильтра нет.

Solutions Collecting From Web of "Добавить фильтр не работает с get_posts"

Согласно документации WordPress, фильтр post_where не повлияет на запрос, сгенерированный get_posts() . См. Также использование по умолчанию get_posts (), где вы можете видеть, что аргумент suppress_filters установлен равным true путем deafult. Чтобы запустить фильтр post_where в запросе, сгенерированном get_posts() вы должны установить аргумент suppress_filters в значение false:

 get_posts( array( 'suppress_filters' => FALSE ) ); 

Таким образом, код может выглядеть примерно так:

 $countposts = count(get_posts(array( 'suppress_filters' => false, 'post_parent => $id, 'post_type' => 'page', 'post_status' => 'publish', 'numberposts' => $number, 'exclude' => $exclude, 'orderby' => $orderby ))); 

Кроме того, у вас много переменных, которые не инициализируются, например, $ id, $ number, $ exclude, $ orderby или $ filter_year.

Похоже, это условие никогда не заполняется:

 if($filter_year > 0) 

так как вы не определили переменную $filter_year .