У меня есть установка WordPress. У меня на моем сайте около 3 пользовательских типов сообщений. Когда я выполняю поиск, все результаты типа сообщения отображаются на лицевой стороне на 1 странице. Некоторые типы сообщений полностью отличаются от других контентных мудрей, поэтому результаты выглядят немного забавными.
Есть ли способ разделить результаты на вкладки в соответствии с типом сообщения? Я хочу оставить результаты по умолчанию так, как они сейчас (все результаты), но затем имеют вкладки вправо, отфильтровывая разные результаты в соответствии с типом публикации, к которому они принадлежат.
Я создал jpeg здесь, чтобы помочь точно объяснить, что я пытаюсь сделать.
благодаря
http://f.cl.ly/items/110S2K1A0T3m290Y0C14/Filter_post_Types.jpg
Обновление 1: просто захотелось добавить немного дополнительной информации о кодовой части
Я планировал использовать короткие коды в качестве вкладок
[tabs] [tab]All Search Results[/tab] [tab]Post Type 1 Results[/tab] [tab]Post Type 1 Results[/tab] [tab]Post Type 1 Results[/tab] [tab]
или в шаблоне PHP. Я также могу это сделать
<?php echo do_shortcode('[tabs style="boxed" id="searchTabs"] [tab title="Post Type 1"]Post Type 1 Results[/tab] [tab title="Post Type 2"]Post Type 2 Results[/tab] [tab title="Post Type 3"]Post Type 3 Results[/tab] [/tabs]'); ?>
Я думаю, что здесь есть что-то, что может мне помочь, но не уверен, как его реализовать. Http://codex.wordpress.org/Template_Tags/get_posts
Обновление 2: Другие советы, которые я получил на другом форуме, – это попробовать код, подобный этому, но я не могу правильно его реализовать в моем шаблоне поиска php, который находится здесь http://pastie.org/4248751
Предлагаемый код
<?php $the_slug = 'my_slug'; $args=array( 'name' => $the_slug, 'post_type' => 'custom_post_Type_1', 'post_status' => 'publish', 'numberposts' => 1 ); $my_posts = get_posts($args); $the_slug2 = 'my_slug2'; $args2=array( 'name' => $the_slug2, 'post_type' => 'custom_post_Type_2', 'post_status' => 'publish', 'numberposts' => 1 ); $my_posts2 = get_posts($args2); echo do_shortcode('[tabs style="boxed" id="searchTabs"] [tab title="Post Type 1"] <?php //This code is for first post type foreach( $myposts as $post ) : setup_postdata($post); ?> <li><a>"><?php the_title(); ?></a></li> <?php endforeach; ?> [/tab] [tab title="Post Type 2"] <?php //This code is for second post type foreach( $myposts2 as $post ) : setup_postdata($post); ?> <li><a>"><?php the_title(); ?></a></li> <?php endforeach; ?> [/tab] [/tabs]'); ?>
EDIT: Извините – поймите сейчас.
Пользовательские разные циклы на каждой вкладке.
Первая вкладка:
<?php global $post; rewind_posts(); $query = new WP_Query(array( 'posts_per_page' => -1, )); while ($query->have_posts()) : $query->the_post(); ?> <!-- YOUR OUTPUT CODE HERE --> <?php endwhile; wp_reset_postdata(); ?>
Каждая другая вкладка имела бы тот же цикл, но с добавленным параметром в запросе
<?php global $post; rewind_posts(); $query = new WP_Query(array( 'posts_per_page' => -1, 'post_type' => 'post_type_name', )); while ($query->have_posts()) : $query->the_post(); ?> <!-- YOUR OUTPUT CODE HERE --> <?php endwhile; wp_reset_postdata(); ?>
Я бы использовал jQuery для достижения этого, не уверен, согласятся ли все, но я попробовал, и это сработало для меня.
Когда WordPress отображает результаты поиска, у каждого есть имя класса, отражающее тип сообщения, например
<article class="page type-page ....">blah blah blah</article>
На вкладке «Все результаты» вы можете использовать jQuery с чем-то вроде:
$('.search-results .type-page').clone('.tab1');
Сначала запустите указанную функцию, чтобы копия всех результатов была клонирована в первую вкладку. Что касается других вкладок, вы можете начать вырезать и вставлять в них соответствующие разделы, используя:
$('.search-results .type-page').appendTo('.tab2');
Поскольку вы используете shortcode для вкладок, убедитесь, что вы проверили сгенерированный код вкладок и захватили правильное имя класса для каждой вкладки для замены ('.tab1') и / или ('.tab2') выше. Вы можете запустить функцию на $ document.ready, и она должна работать. Дайте мне знать, если я не слишком ясен или просто неправильно.
Надеюсь, это поможет!
Это сработало для меня. Это код для двух типов сообщений на одной вкладке, у меня есть еще две вкладки, изменяющие содержимое в строке 'post_type' => array ('post', 'aktualnosci')
<?php $args = array( 'orderby' => 'rand', 's' => $s, 'post_type' => array ( 'post', 'aktualnosci') ); query_posts($args); if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div class="col-xs-12 col-sm-6 col-md-4"> <a href="<?php the_permalink() ?>"> <?php the_post_thumbnail('post-thumbnail', array( 'class' => "img-responsive"));?> <div class="caption"> <span class="ilabel"> <?php if ( get_post_type() == 'post' ) { echo 'Oferta'; } else { echo 'Aktualności'; } ; ?> </span> <h1><?php the_title(); ?></h1> <p> <?php //first sentence excerpt only $strings = preg_split('/(\.|!|\?)\s/', strip_tags($post->post_content), 2, PREG_SPLIT_DELIM_CAPTURE); echo apply_filters('the_content', $strings[0] . $strings[1]);?> </p> </div> </a> </div> <?php