dan
  • 0
Новичок

Кто-нибудь может помочь с этой функцией?

  • 0

Я пытаюсь написать функцию для моего файла functions.php. Я должен сделать следующее;

  • просмотрите результаты поиска и проверьте шаблон
  • если шаблон ‘landing.php’, добавьте его в массив объявлений
  • используйте идентификатор, собранный в массиве, чтобы исключить эти страницы из результатов поиска.

Я нашел некоторый код на форуме WordPress Codex, я немного добавил сам, но, к сожалению, не знаю, что делаю…

function filter_where($where = '') {
global $wpdb; // do I need this?
if ( is_search() ) {
    if(is_page_template('landing.php')) { echo 'yes!'; } // ids collected here
    $exclude = array(286);  

    for($x=0;$x<count($exclude);$x++){
      $where .= " AND ID != ".$exclude[$x];
    }
}
return $where;
}
add_filter('posts_where', 'filter_where');
Share
  1. Используемый фильтр posts_where влияет на создание SQL-запроса, поэтому по определению он выполняется до запуска запроса и получения результатов поиска.

    Таким образом, вы не можете просмотреть результаты на этом этапе, что вы можете сделать, это получить или жестко запрограммировать список нежелательных элементов из другого места и использовать их для изменения запроса.

    Обновлять

    Хорошо, это быстрее закодировать, чем пытаться решить с помощью комментариев. Это, вероятно, не идеально, но должно быть хорошей отправной точкой для того, что вы хотите:

    add_action('pre_get_posts','exclude_pages');
    
    function exclude_pages( $query ) {
    
        if( !empty( $query->query_vars['s'] ) ) {
    
            $pages = get_posts(array(
                                'post_type' => 'page',
                                'meta_query' => array( array(
                                    'key' => '_wp_page_template',
                                    'value' => 'landing.php',
                                )),
                               ));
    
            $exclude = array();
    
            foreach( $pages as $page )
                $exclude[] = $page->ID;
    
            $query->set('post__not_in', $exclude);
        }
    }
    
    • 0

Оставить ответ

You must login to add an answer.