サポート » 使い方全般 » 投稿(post)と、投稿タイプが混在した一覧を作りたい

  • 解決済 takachamp

    (@takachamp)


    投稿(post)カテゴリー(album)と、投稿タイプ(photos)を混在させて表示したいと考えています。投稿タイプ(photos)には、タクソノミーは作成していません。

    <?php
    $args = array(
    ‘post_type’ => array (‘post’,’photos’),
    ‘category_name’ => ‘album’,
    );
    query_posts( $args );
    ?>
    <?php if(have_posts() ): while(have_posts() ): the_post(); ?>
    ~以下省略~

    上記では表示されないのですが、
    どのようにしたらよろしいでしょうか?

    どうぞよろしくお願いいたします。

15件の返信を表示中 - 1 - 15件目 (全21件中)
  • お世話になっております!
    もう少し詳しく書かせていただきます。

    一般投稿(post)のカテゴリー(album)に100件、
    taxonomyを設定していない投稿タイプ(photos)に300件ほどあります。

    一般投稿のカテゴリー(album)にあるものを、投稿タイプに振り替えれば(またその逆の作業)をすればよいのですが、SEOの観点とリダイレクトの設定をしなければならないので、可能であれば、そのまま使用したいと考えています。

    このような場合、表示は可能でしょうか?

    <?php
    $args = array(
    'post_type' => array ('post','photos'),
    'category_name' => 'album',
    );
    query_posts( $args );
    ?>

    基本的なところかとも、思うのですが何卒よろしくお願いいたします。

    以下のように変更しました。

    <?php
    $args = array(
        'posts_per_page' => 100,
        'paged' => $paged,
        'post_type' => array('post','photos'),
        'tax_query' => array(
                    array(
                    'taxonomy' => 'category',
                    'field' => 'slug',
                    'terms' => 'album',
    				)
    			)
    		);
    ?>

    どうしても、タクソノミーを設定していない、投稿タイプ(photos)が
    表示されません。

    やはり、投稿タイプ(photos)に、タクソノミーを設定するか、
    ビルトイン分類を設定して一般投稿(post)のカテゴリ(album)を選択するしか、
    方法が無いのでしょうか?

    初心者のため、日々このことばかり、頭を駆け巡っています・・・。
    どなたかご教授いただけますとうれしいです。

    どうぞよろしくお願いいたします。

    こんにちは、

    テストしていませんが、アーカイブページを投稿と、カスタム投稿混在表示にするなら、
    以下のようにするとできると思います。

    functions.phpに追加

    function my_post_type_query( $query ) {
     if ( is_admin()|| ! $query->is_main_query() )
     return;
    
     if ( is_archive() ) {
     $query->set( 'post_type', array( 'post', 'photos') );
     return;
     }
    
    }
    add_action( 'pre_get_posts', 'my_post_type_query', 1 );

    早速ありがとうございます!
    試させていただいた後、ご報告いたします。

    nobita様

    ありがとうございます。
    試させていただきました。

    ページで作成していますので、nobitaさんから教えていただきました、コードの一部を下記のように変更して試させていただきました。

    function my_post_type_query( $query ) {
     if ( is_admin()|| ! $query->is_main_query() )
     return;
    
     if ( is_page(42) ) { //is_archiveからis_pageに変更しました。
     $query->set( 'post_type', array( 'post', 'photos') );
     return;
     }
    
    }
    add_action( 'pre_get_posts', 'my_post_type_query', 1 );

    ページ内のコードは、下記のように書いています。

    <?php
    $args = array(
        'posts_per_page' => 100,
        'paged' => $paged,
        'post_type' => array('post','photos'),
        'tax_query' => array(
                    array(
                    'taxonomy' => 'category',
                    'field' => 'slug',
                    'terms' => 'album',
    		)
    	)
    );
    query_posts( $args );
    ?>
    <?php if(have_posts() ): while(have_posts() ): the_post(); ?>
    ~サムネイル画像表示~
    <?php endwhile; endif; ?>
    <?php wp_reset_query(); ?>

    でも、表示されるのは、依然、一般投稿(post)のカテゴリー(album)の100件のみで、タクソノミーを設定していない、投稿タイプ(photos)300件が表示されません。

    どこか記述が違うとは思いますが、
    引き続きよろしくお願いいたします。

    お世話になっております。

    ちなみ、投稿タイプ(photos)にタクソノミー「album_cat」、タームを「n_album」を設定して、下記のようにしたところ、一般投稿(post)の100件も投稿タイプ(photos)の300件も両方表示されます。

    <?php
    $args = array(
    	'posts_per_page' => 100,
        'paged' => $paged,
        'post_type' => array('post','album_new'),
    	'tax_query' => array(
    						array(
    						'taxonomy' => 'category',
    						'field' => 'slug',
    						'terms' => 'album',
    						),
    						array(
    						'taxonomy' => 'album_cat',
    						'field' => 'slug',
    						'terms' => 'n_album',
    						),
    						'relation' => 'OR'
    			)
    		);
    ?>
    <?php query_posts( $args ); ?>

    結果をまとめてくれてありがとうございます。

    チョットと遠回りしさせてしまったみたいで、ごめんなさい。

    query_post()とpre_get_postを併用した経験がないので、どういう事になっているのか、今お返事できませんが、解決の由 まずはよかったですね

    解決済みであれば、お手数ですが、解決済みに変更しておいてください。

    >チョットと遠回りしさせてしまったみたいで、ごめんなさい。

    いえいえ、とんでもございません。
    ご回答ありがとうございます。

    結局は、投稿タイプにタクソノミー、タームを設定しなければ、
    一般投稿(post)と投稿タイプを混在して表示できないということなんでしょうか。

    こちらのトピックは、もう少しオープンにさせていただきたいと思います。

    nobitaさんありがとうございます。

    結局は、投稿タイプにタクソノミー、タームを設定しなければ、
    一般投稿(post)と投稿タイプを混在して表示できないということなんでしょうか。

    という事はないと思います。

    簡単なサンプル、Twentytwelve / functions.php

    <?php
    function my_post_type_query( $query ) {
     if ( is_admin()|| ! $query->is_main_query() )
     return;
    
     if ( is_archive() ) {
     $query->set( 'post_type', array( 'post', 'book') );
     return;
     }
    
    }
    add_action( 'pre_get_posts', 'my_post_type_query', 1 );
    
    function codex_custom_init() {
        $args = array(
          'public' => true,
          'label'  => 'Books'
        );
        register_post_type( 'book', $args );
    }
    add_action( 'init', 'codex_custom_init' );
    ?>

    をfunctions.phpに貼り付けて、投稿を作ったら、

    月別アーカイブを開くと、表示できると思います。

    リンクがおかしいときには、設定/パーマリンク の 更新ボタンだけ押してみてください。

    nobitaさま。

    引き続きありがとうございます!
    本当にお忙しいところ、お時間さいていただき、本当に感謝しております。

    ご教授いただきましたコード、試させていただきます!
    後ほどご報告させていただきます。

    nobita様
    ご連絡が大変滞って申し訳ございません。

    固定ページで表示させようとしていましたが、私には難しそうなので、
    category-album.phpを作り、http://example.com/category/albumにアクセスしたとき、
    投稿(post)のカテゴリー(album)と、投稿タイプ(photos)を表示することにしました。

    まず、nobita様から教えていただきましたコードをfunction.phpに貼り付けました。

    function my_post_type_query( $query ) {
     if ( is_admin()|| ! $query->is_main_query() )
     return;
    
     if ( is_category() ) {
     $query->set( 'post_type', array( 'post', 'photos') );
     return;
     }
    
    }
    add_action( 'pre_get_posts', 'my_post_type_query', 1 );

    そして、category-album.phpに

    <?php get_header(); ?>
    <?php if(have_posts()):while(have_posts()): the_post(); ?>
    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    <?php
    endwhile;
    endif;
    ?>
    <?php get_footer(); ?>

    と書きました。

    http://example.com/category/album
    にアクセスすると、投稿(post)のカテゴリー(album)は表示されるのですが、投稿タイプ(photos)は表示されませんでした。

    こちらの記事
    https://ja.forums.wordpress.org/topic/24420?replies=14
    も参考にしてみましたが、やはり表示されませんでした。

    どこか、間違っていますか?

    少し前後しますが、まっさらなWordpressの状態で、テーマtwentytwelveに
    nobita様に教えていただきましたコード

    function my_post_type_query( $query ) {
     if ( is_admin()|| ! $query->is_main_query() )
     return;
    
     if ( is_archive() ) {
     $query->set( 'post_type', array( 'post', 'photos') );
     return;
     }
    
    }

    をfunction.phpに書いたところ、nobita様おっしゃるとおり、月別アーカイブ(example.com/?m=201411)を開くと、通常のpostに加えて、投稿タイプ(photos)もしっかり表示されました。
    しかし、カテゴリー(example.com/?cat=2)の表示をすると、投稿タイプ(photos)は表示されません。

    if ( is_archive() ) {
    の部分を、is_category()や、is_category(‘2’)にしても表示されません。

    一方、if ( is_home() )にて、ホームを見ますと設定通り、投稿タイプ(photos)も表示されます。

    どうやら、カテゴリーページの時だけうまく設定できていないようなのですが、他に考えられる原因はございますでしょうか?
    お手数ではございますが、どうぞよろしくお願いいたします。

    *念のためパーマリンクの更新は都度行っています。

    しかし、カテゴリー(example.com/?cat=2)の表示をすると、投稿タイプ(photos)は表示されません。

    以前に、提示したカスタム投稿タイプのサンプルでは、カスタム投稿booksの新規作成ページや、編集ページには、カテゴリの指定をする場所はありませんよね。

    カテゴリーアーカイブでは、特定のカテゴリに含まれる投稿が表示されるわけですから、カスタム投稿で、カテゴリが指定されていなければ表示されません。

    では、どうすれば、カスタム投稿の編集画面や新規の画面で、カテゴリを指定できるようになるのか?

    functions.phpに以下のPHPコードを追加します。

    add_action('init','add_categories_for_book');
    
    function add_categories_for_book(){
    
        register_taxonomy_for_object_type('category', 'book');
    }

    のようにして、カスタム投稿で、カテゴリメタボックスが表示できるようにする必要があります。

    カスタム投稿の編集などで、カテゴリを指定してやれば、そのカテゴリに、投稿タイプbookの投稿が表示できるようになると思います。

    まとめると、

    <?php
    
    function my_post_type_query( $query ) {
    	if ( is_admin() || !$query->is_main_query() ) {
    
    		return;
    	}
    	if ( is_archive() ) {
    
    		$query->set( 'post_type', array( 'post', 'book' ) );
    		return;
    	}
    }
    
    add_action( 'pre_get_posts', 'my_post_type_query', 1 );
    
    function codex_custom_init() {
    	$args = array(
    		'public' => true,
    		'label'	 => 'Books'
    	);
    	register_post_type( 'book', $args );
    }
    
    add_action( 'init', 'codex_custom_init' );
    
    add_action( 'init', 'add_categories_for_book' );
    
    function add_categories_for_book() {
    
    	register_taxonomy_for_object_type( 'category', 'book' );
    }
    
    ?>

    nobitaさん

    お忙しい処、本当に早速ありがとうございます。

    ということは、カテゴリーページ(example.com/category/album)に、

    一般投稿postのカテゴリーalbumと、投稿タイプ(photos)

    を表示したい場合、投稿タイプ(photos)に対して、一般投稿postと同じカテゴリー(album)を設定して、選択しないと表示されないということですよね。

    しかし、それですと投稿タイプ(photos)を新規作成する度にカテゴリalbumのチェックしないといけませんよね?

    私の3つ目の投稿、

    やはり、投稿タイプ(photos)に、タクソノミーを設定するか、
    ビルトイン分類を設定して一般投稿(post)のカテゴリ(album)を選択するしか、
    方法が無いのでしょうか?

    や、9つ目の投稿

    結局は、投稿タイプにタクソノミー、タームを設定しなければ、
    一般投稿(post)と投稿タイプを混在して表示できないということなんでしょうか。

    というところから、抜け出せてない気がします。

    nobitaさんの御真意と相違していましたら本当に申し訳ございません。

    もう一度要件をまとめますと、

    タクソノミー(カテゴリ)の設定していない投稿タイプ(photos)と、
    一般投稿postの特定のカテゴリ(album)を混在して表示したい。

    です。

    どうぞよろしくお願いいたします。

    よく読んでなくて、ごめんなさい。

    一般投稿postのカテゴリーalbumと、投稿タイプ(photos)

    を表示したい場合、投稿タイプ(photos)に対して、一般投稿postと同じカテゴリー(album)を設定して、選択しないと表示されないということですよね。

    私の理解だと、ある特定のカテゴリを表示する場合に、特定の投稿タイプを同時に表示する場合は、カテゴリが設定されていないと難しいのではないかと思います。

    カスタム投稿タイプを、強制的にあるカテゴリに割り当てるという経験がないので、何とも言えないところですが、

    しかし、それですと投稿タイプ(photos)を新規作成する度にカテゴリalbumのチェックしないといけませんよね?

    しかし、カテゴリで紐づけることが、作業量の増加につながるという問題については、工夫をすれば解決可能ではないかと思います。

    例えば、javascript 等でチェックを入れる。

    https://ja.forums.wordpress.org/topic/13736?replies=6

    自動的にカテゴリを設定する方法を考える

    https://wordpress.org/support/topic/set-category-to-a-custom-post-type-automatically?replies=10

    保存などのタイミングで、カテゴリを指定してやる という事をすれば、作業量の問題は、ほぼ解決可能ではないかと思います。

    意図を理解できているか、不安ですが、、、

15件の返信を表示中 - 1 - 15件目 (全21件中)
  • トピック「投稿(post)と、投稿タイプが混在した一覧を作りたい」には新たに返信することはできません。