Intereting Posts
Добавить пользователя meta с помощью переключателя во время регистрации Как найти код, выполняемый при вызове wp_head ()? Как добавить функциональность администратора, чтобы можно было выбирать другую группу полей для отображения на веб-странице с использованием дополнительных пользовательских полей? Как добавить span в WordPress Title для первого и третьего слова Позволяя wordpress решить, какой шаблон и страница использовать на основе условия WP-CLI: установка субдомена в корневой папке Номер выходного столбца в соответствии с активными боковыми панелями Любые рекомендации по управлению рекламой? Пользовательский $ wpdb возвращает неожиданные результаты по времени WordPress подавляет расширения страниц! Передняя часть пуста (т.е. ничего не отображается); Задний конец выглядит хорошо; Каковы возможные причины? Замените поведение WordPress по умолчанию с помощью Sphinx Если я удалю базу категорий из своих URL-адресов, насколько сложно будет откат? Не показывать аватары в медиа-библиотеке Как указать, когда функции были обновлены по отношению ко всей программе

Результаты поиска по категориям

Для клиента мне нужно группировать результаты на странице результатов поиска по категориям. В этом случае это не будут сообщения, но страницы , унаследованные категории, образуют сообщения с плагином Add Tags And Category To Page and Post Types .

Это шаблон страницы результатов без редактирования:

<div id="content"> <div id="inner-content" class="wrap cf"> <main id="main" class="m-all t-2of3 d-5of7 cf" role="main"> <h1 class="archive-title"><span><?php _e( 'Search Results for:', 'bonestheme' ); ?></span> <?php echo esc_attr(get_search_query()); ?></h1> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <article id="post-<?php the_ID(); ?>" <?php post_class('cf'); ?> role="article"> <header class="entry-header article-header"> <h3 class="search-title entry-title"><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3> <p class="byline entry-meta vcard"> <?php printf( __( 'Posted %1$s by %2$s', 'bonestheme' ), /* the time the post was published */ '<time class="updated entry-time" datetime="' . get_the_time('Ym-d') . '" itemprop="datePublished">' . get_the_time(get_option('date_format')) . '</time>', /* the author of the post */ '<span class="by">by</span> <span class="entry-author author" itemprop="author" itemscope itemptype="http://schema.org/Person">' . get_the_author_link( get_the_author_meta( 'ID' ) ) . '</span>' ); ?> </p> </header> <section class="entry-content"> <?php the_excerpt( '<span class="read-more">' . __( 'Read more &raquo;', 'bonestheme' ) . '</span>' ); ?> </section> <footer class="article-footer"> <?php if(get_the_category_list(', ') != ''): ?> <?php printf( __( 'Filed under: %1$s', 'bonestheme' ), get_the_category_list(', ') ); ?> <?php endif; ?> <?php the_tags( '<p class="tags"><span class="tags-title">' . __( 'Tags:', 'bonestheme' ) . '</span> ', ', ', '</p>' ); ?> </footer> <!-- end article footer --> </article> <?php endwhile; ?> <?php boilerplate_page_navi(); ?> <?php else : ?> <article id="post-not-found" class="hentry cf"> <header class="article-header"> <h1><?php _e( 'Sorry, No Results.', 'bonestheme' ); ?></h1> </header> <section class="entry-content"> <p><?php _e( 'Try your search again.', 'bonestheme' ); ?></p> </section> <footer class="article-footer"> <p><?php _e( 'This is the error message in the search.php template.', 'bonestheme' ); ?></p> </footer> </article> <?php endif; ?> </main> <?php get_sidebar(); ?> </div> </div> 

И так я до сих пор немного помог:

 <div id="content"> <div id="inner-content" class="wrap cf"> <main id="main" class="m-all t-2of3 d-5of7 cf" role="main"> <h1 class="archive-title"><span><?php _e( 'Search Results for:', 'boilerplate' ); ?></span> <?php echo esc_attr(get_search_query()); ?></h1> <?php $list_per_category = []; $search_filters = array( 'post_type' => 'page' // Doorzoekt alle post types ); $search_result = new WP_Query( $search_filters ); //var_dump($search_result); if ($search_result->have_posts()) : while ($search_result->have_posts()) : $search_result->the_post(); //Genereer de html voor het zoekresultaat van de post, en bewaar deze in een buffer ob_start(); ?> <article> <?php // create our link now that the post is setup ?> <h4 class="search-title entry-title"><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h4> <?php the_excerpt( '<span class="read-more">' . __( 'Read more &raquo;', 'boilerplate' ) . '</span>' ); ?> </article> <?php $post_html = ob_get_clean(); //Loop de hoofdcategorieen van de post door en maak hier een overkoepelende structuur voor aan die we kunnen gebruiken voor de lijstweergave van het zoekresultaat. $post_categories = get_the_category(); foreach ($post_categories as $post_category) : if($post_category->parent == 0): if (!isset($list_per_category[$post_category->term_id])): $list_per_category[$post_category->term_id]['category'] = $post_category; $list_per_category[$post_category->term_id]['posts'] = []; endif; $list_per_category[$post_category->term_id]['posts'][] = $post_html; endif; endforeach; endwhile; //Doorloop de gemaakte structuur van posts per category en toon deze foreach ($list_per_category as $list_item) : echo '<div class="category' . $list_item['category']->slug . '"> <h2>' . $list_item['category']->name . '</h2>'; foreach ($list_item['posts'] as $post_html) : echo $post_html; endforeach; echo '</div>'; endforeach; else : ?> <article id="post-not-found" class="hentry cf"> <header class="article-header"> <h1><?php _e( 'Sorry, No Results.', 'bonestheme' ); ?></h1> </header> <section class="entry-content"> <p><?php _e( 'Try your search again.', 'bonestheme' ); ?></p> </section> <footer class="article-footer"> <p><?php _e( 'This is the error message in the search.php template.', 'bonestheme' ); ?></p> </footer> </article> <?php endif; ?> </main> <?php get_sidebar(); ?> </div> 

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

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

Solutions Collecting From Web of "Результаты поиска по категориям"

Добавьте в запрос параметр поиска к вашему запросу:

 $search_filters = array( 'post_type' => 'page', // Doorzoekt alle post types 's' => $keyword // show only posts that meet the current search query ); 

И выше, вы должны просто иметь возможность захватить ключевое слово прямо из вашего запроса:

 $keyword = $_GET['s']; 

Существует также встроенная функция WordPress, которая захватывает ваш текущий поисковый запрос, который может быть лучше использовать, чем захват его вручную из строки запроса:

 $keyword = get_search_query(); 

К сожалению, это еще не решило мою проблему. Когда я ищу что-то, на что я уверен, находится на сайте, я просто ничего не получаю. Когда результатов поиска нет, появляется сообщение «Нет результатов», как ожидалось.

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

Это мой код: `

  <div id="inner-content" class="wrap cf"> <main id="main" class="m-all t-2of3 d-5of7 cf" role="main"> <h1 class="archive-title"><span><?php _e( 'Search Results for:', 'boilerplate' ); ?></span> <?php echo esc_attr(get_search_query()); ?></h1> <?php $keyword = $_GET['s']; $list_per_category = []; $search_filters = array( 'post_type' => 'page', // Doorzoekt alle post types 's' => $keyword // show only posts that meet the current search query ); $search_result = new WP_Query( $search_filters ); //var_dump($search_result); ?> <?php if ($search_result->have_posts()) : while ($search_result->have_posts()) : $search_result->the_post(); //Genereer de html voor het zoekresultaat van de post, en bewaar deze in een buffer ob_start(); ?> <article> <?php // create our link now that the post is setup ?> <h4 class="search-title entry-title"><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h4> <?php the_excerpt( '<span class="read-more">' . __( 'Read more &raquo;', 'boilerplate' ) . '</span>' ); ?> </article> <?php $post_html = ob_get_clean(); //Loop de hoofdcategorieen van de post door en maak hier een overkoepelende structuur voor aan die we kunnen gebruiken voor de lijstweergave van het zoekresultaat. $post_categories = get_the_category(); foreach ($post_categories as $post_category) : if($post_category->parent == 0): if (!isset($list_per_category[$post_category->term_id])): $list_per_category[$post_category->term_id]['category'] = $post_category; $list_per_category[$post_category->term_id]['posts'] = []; endif; $list_per_category[$post_category->term_id]['posts'][] = $post_html; endif; endforeach; endwhile; //Doorloop de gemaakte structuur van posts per category en toon deze foreach ($list_per_category as $list_item) : echo '<div class="category' . $list_item['category']->slug . '"> <h2>' . $list_item['category']->name . '</h2>'; foreach ($list_item['posts'] as $post_html) : echo $post_html; endforeach; echo '</div>'; endforeach; else : ?> <article id="post-not-found" class="hentry cf"> <header class="article-header"> <h1><?php _e( 'Sorry, No Results.', 'boilerplate' ); ?></h1> </header> <section class="entry-content"> <p><?php _e( 'Try your search again.', 'boilerplate' ); ?></p> </section> <footer class="article-footer"> <p><?php _e( 'This is the error message in the search.php template.', 'boilerplate' ); ?></p> </footer> </article> <?php endif; ?> </main> <?php get_sidebar(); ?> </div> </div>