2

我有一个 Wordpress 安装。我的网站上有大约 3 种自定义帖子类型。当我进行搜索时,所有帖子类型的结果都会显示在前端的一页上。有些帖子类型在内容方面与其他帖子类型完全不同,因此结果看起来有点有趣。

有没有办法根据帖子类型将结果拆分为选项卡?我想将结果保留为现在的默认方式(所有结果),然后在右侧有选项卡根据它们所属的帖子类型过滤掉不同的结果。

我在这里创建了一个 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]');
?>
4

3 回答 3

1

编辑:对不起 - 现在明白了。

在每个选项卡中使用不同的循环。

第一个标签:

<?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();
?>
于 2012-07-16T02:37:45.290 回答
1

我会使用 jQuery 来实现这一点,不确定是否每个人都同意,但我已经尝试过了,它对我有用。

当 Wordpress 显示搜索结果时,每个都有一个反映帖子类型的类名,例如

<article class="page type-page ....">blah blah blah</article>

对于(所有结果选项卡),您可以将 jQuery 与以下内容一起使用:

$('.search-results .type-page').clone('.tab1');

首先运行上述函数,以便将所有结果的副本克隆到第一个选项卡中。至于其他选项卡,您可以使用以下方法开始剪切并粘贴适当的部分:

$('.search-results .type-page').appendTo('.tab2');

由于您使用的是选项卡的简码,因此请确保检查生成的选项卡代码并为每个选项卡获取正确的类名以替换上面的 ('.tab1') 和/或 ('.tab2')。您可以在 $document.ready 上运行该函数,它应该可以工作。让我知道我是否不太清楚或完全错误..

我希望这有帮助!

于 2014-10-10T17:40:09.050 回答
0

这对我有用。它是一个选项卡中 2 种帖子类型的代码,我还有另外两个选项卡在 'post_type' => 数组('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
于 2015-09-02T15:49:24.960 回答