2

私は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]');
?>
4

3 に答える 3

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 に答える
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 に答える
0

これは私にとってはうまくいきました。これは 1 つのタブで 2 つの投稿タイプのコードです。行 'post_type' => array ( 'post', 'aktualnosci') のコンテンツを変更する 2 つのタブもあります。

      <?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 に答える