投稿(post)と、投稿タイプが混在した一覧を作りたい
-
投稿(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(); ?>
~以下省略~上記では表示されないのですが、
どのようにしたらよろしいでしょうか?どうぞよろしくお願いいたします。
-
お世話になっております!
もう少し詳しく書かせていただきます。一般投稿(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
保存などのタイミングで、カテゴリを指定してやる という事をすれば、作業量の問題は、ほぼ解決可能ではないかと思います。
意図を理解できているか、不安ですが、、、
- トピック「投稿(post)と、投稿タイプが混在した一覧を作りたい」には新たに返信することはできません。