Что делают add_filters () и apply_filter ()?

Я немного смущен, почему это не работает – хотя, надо сказать, я не уверен, что apply_filters() и add_filter , поэтому любые общие советы тоже будут add_filter !

Мне нужен запрос, который выводит пять ранних сообщений на одной странице. Я отправляю дату текущей записи и хочу применить фильтр, который отфильтровывает сообщения раньше этого.

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

Как правильно это применить? Просто использование add_filter или apply_filter до создания экземпляра нового объекта WP_Query не работает корректно.

Заранее спасибо!

Изменить: Чтобы идти дальше, я хотел бы понять, как передать переменную в фильтр, поскольку я не могу получить $ date для перехода от другой функции.

Здесь говорится другая функция (это вызов ajax в wordpress, поэтому я начинаю с получения идентификатора сообщения для текущей страницы с помощью переменной $ _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('Ym-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; } 

Solutions Collecting From Web of "Что делают add_filters () и apply_filter ()?"

Что вы пытаетесь фильтровать? Я предполагаю, что вы пытаетесь добавить фильтр в фильтр, называемый posts_before . В этом случае вам нужно добавить свой фильтр к этому крюку через 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' ); 

Обратите внимание, что я изменил ваше имя функции. filter_posts_before() является слишком общим названием функции и, вероятно, вызывает столкновение имен функций.

РЕДАКТИРОВАТЬ

И просто уточнить:

  • apply_filters() – это место привязки фильтра , вызывается базовым кодом и используется для применения любых фильтров, которые добавляются в очередь с помощью Темы / Плагинов (и ядра).
  • add_filter() вызывается add_filter() / плагинами (и ядром) и используется для добавления фильтров в очередь, которая будет применяться к крюку по ядру.

EDIT 2

Основываясь на вашем комментарии выше, крюк – posts_where . Итак, давайте взломам на восстановление вашей функции обратного вызова:

 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( 'Ym-d', $post ); $where .= " AND post_date < '" . $date . "'"; return $where; } // Add function to the filter hook add_filter( 'posts_where', 'mytheme_filter_posts_where' );