サポート » 使い方全般 » カスタム投稿タイプの特定のカスタム分類の表示

  • 解決済 yacchi

    (@yacchi)


    当方WordPress初心者でございます。
    もしかしたら極簡単な質問内容かもしれず恐縮でございますが、お力添えいただければ幸いでございます。

    さて、WordPressで構築するサイトのトップページ(index.php)に【TOPICS】という形で新着情報等を掲載したいと考えております。
    メインの投稿は他にあるのと、CMS管理の都合上、「CMS Press(ver0.2.0)」というプラグインを使って「topics」というカスタム投稿タイプを作成しました。
    また、その「topics」というカスタム投稿タイプに『topics_tag』というカスタム分類を追加・[pickup]というタグ(カテゴリ)を作成し、一部の「topics」投稿に[pickup]というタグを付与して、本筋の【TOPICS】とは別枠に表示させようと考えております。

    まず、カスタム投稿タイプ「topics」の表示は以下のコードで実現することができました。

    <div id="topics">
    <?php
    	$myQuery = new WP_Query();
    	$param = array(
    		'posts_per_page' => '5',
    		'post_type' => 'topics',
    		'post_status' => 'publish',
    		'orderby' => 'ID',
    		'order' => 'DESC'
    	);
    	$myQuery->query($param);
    ?>
    <ul>
    <?php if($myQuery->have_posts()): while($myQuery->have_posts()) : $myQuery->the_post(); ?>
    <li><?php the_content(); ?>(<?php the_date_xml(); ?>)</li>
    <?php endwhile; endif; ?>
    </ul>
    </div>

    しかし、カスタム分類『topics_tag』の[pickup]タグ(カテゴリ)を付与して下記2点を実現したいのですが、どうしてもできなくて大変困っております。

    • [pickup]タグ(カテゴリ)を付与した投稿以外を表示(本筋の【TOPICS】)
    • [pickup]タグ(カテゴリ)を付与した投稿のみを表示

    以下のコードで実現できると思い試してみたのですが、駄目でした。

    <div id="topics">
    <?php
    	$myQuery = new WP_Query();
    	$param = array(
    		'posts_per_page' => '5',
    		'post_type' => 'topics',
    		'tag__not_in' => 'xx', //[pickup]タグのID
    		'post_status' => 'publish',
    		'orderby' => 'ID',
    		'order' => 'DESC'
    	);
    	$myQuery->query($param);
    ?>
    <ul>
    <?php if($myQuery->have_posts()): while($myQuery->have_posts()) : $myQuery->the_post(); ?>
    <li><?php the_content(); ?>(<?php the_date_xml(); ?>)</li>
    <?php endwhile; endif; ?>
    </ul>
    </div>
    
    <div id="topics-pickup">
    <?php
    	$myQuery = new WP_Query();
    	$param = array(
    		'posts_per_page' => '5',
    		'post_type' => 'topics',
    		'tag' => 'pickup', //[pickup]タグのスラッグ
    		'post_status' => 'publish',
    		'orderby' => 'ID',
    		'order' => 'DESC'
    	);
    	$myQuery->query($param);
    ?>
    <ul>
    <?php if($myQuery->have_posts()): while($myQuery->have_posts()) : $myQuery->the_post(); ?>
    <li><?php the_content(); ?>(<?php the_date_xml(); ?>)</li>
    <?php endwhile; endif; ?>
    </ul>
    </div>

    当フォーラムや検索エンジンで解決法を探したのですが、どうしても見つけることができなかったので、こちらでご質問させていただきました。
    よろしくお願いいたします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • テーマフォルダの functions.php に以下を追加:

    function my_posts_where( $where ) {
      return str_replace( 'IN', 'NOT IN', $where );
    }
    
    function my_query_posts( $args ) {
      $defaults = array( 'exclude_term' => false );
      $args = wp_parse_args( $args, $defaults );
    
      if ( $args['exclude_term'] )
        add_filter( 'posts_where', 'my_posts_where' );
    
      query_posts( $args );
    
      if ( $args['exclude_term'] )
        remove_filter( 'posts_where', 'my_posts_where' );
    }

    index.php で以下のように記述:

    <ul>
    <?php
    my_query_posts( array(
      'exclude_term' => true, // これを書けばpickupを付与した投稿以外
      'posts_per_page' => '5',
      'post_type' => 'topics',
      'post_status' => 'publish',
      'orderby' => 'ID',
      'order' => 'DESC',
      'taxonomy' => 'topics_tag',
      'term' => 'pickup'
    ) );
    
    if ( have_posts() ) :
      while( have_posts() ) :
        the_post();
    ?>
    <li><?php the_content(); ?>(<?php the_date_xml(); ?>)</li>
    <?php
      endwhile;
    endif;
    wp_reset_query();
    ?>
    </ul>

    ちなみに
    「topics_tag」は「カテゴリー」や「タグ」と同等の「分類」です。
    「pickup」は「ターム」と言って、その分類で実際なんちゅうやつなのかを表します。
    例:
    「この投稿は WordPress というカテゴリーに分類されているのね」
    「この投稿は Tips というタグに分類されているのさ」
    「この投稿は pickup という topics_tag に分類されているんだ」

    #細かいツッコミは不要 > all

    kzさま、早速のご教示ありがとうございます。
    教えていただいた内容で、希望通りに完璧に実現することができました!

    しかし、「functions.php」をいじるのは思いもよりませんでした。
    PHP知識がほとんどない私には到底及ばない方法で、とても参考になりました。
    また、タームなどの通名もわかりやすく教えていただき、大変感謝いたします。

    お忙しい中、誠にありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「カスタム投稿タイプの特定のカスタム分類の表示」には新たに返信することはできません。