• 解決済 nobuzoh

    (@nobuzoh)


    Custom Post Type UIで「flower」というカスタム投稿タイプを作成し、
    カテゴリ「shop」にいくつか投稿しましたが、
    shopのリンクを開いても何も表示されませんでした。

    試行錯誤しているうちに、

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

    の部分を

    <?php
    	//追記1、2を追記
    	query_posts('post_type=flower&category_name=shop'); //←追記1
    	if(have_posts()):
    		while(have_posts()): the_post();
    ?>
    			<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    <?php
    		endwhile;
     	endif;
    	wp_reset_query(); //←追記2
    ?>

    というようにquery_postsでメインクエリを上書きしたところ表示されました。
    このquery_posts中のpost_typeをpostにすると表示されません。

    ここで、
    flowerのAdvanced Optionsの設定内容を確認したところ、
    利用タイプ ?という項目にpostと書かれていました。
    この利用タイプにpostと書かれていたからって、
    post_type=postじゃ表示されないのかな?と思いました。

    メインクエリ(URL)でpost_typeを指定することもできるのでしょうが(現在のURL&post_type=flower)、
    このshopカテゴリにはflower以外にもtreeというカスタム投稿タイプの投稿も表示したいと考えていますし、
    パーマリンク設定の/%category%/%postname%/というカスタム構造そのままでいければ、と思っています。

    post_type=postで表示されるならそのどちらも表示できると考えているのですが、
    Custom Post Type UIの設定に足りない部分があるのでしょうか?
    何が足りないかとかは設定内容を公開していないので、みなさまに分かる訳がありませんので、
    どう設定すればよいのかご教授願います。

    <追記>
    functions.phpに

    function shop_posts_per_page($query) {
        if ( is_admin() || ! $query->is_main_query() )
            return;
    
        if ( $query->is_category() ) {
            $query->set( 'post_type', array('flower','tree') );
        }
    }
    add_action('pre_get_posts','shop_posts_per_page');

    と記述したところどちらも表示されるようになりました。
    このやり方で良いでしょうか?
    (カテゴリ名がshopの時だけという条件の追記は必要ですが)

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    Custom Post Type UI の利用権限は、register_post_type の capability_type を設定するもので、カスタム投稿タイプの編集権限に関するものとなります。ここを post と設定すれば、投稿と同等の編集権限があれば、カスタム投稿タイプも編集が可能となるわけです。pageと設定すれば、固定ページの編集権限が必要になり、flower と設定すれば投稿や固定ページとは異なる権限を設定することも可能です。(別途、権限を追加できるプラグインなどの利用が必須)

    つまり、Custom Post Type UI の利用権限は、query_posts などで利用する post_type パラメーターとは関連性はありません。

    functions.phpに

    function shop_posts_per_page($query) {
        if ( is_admin() || ! $query->is_main_query() )
            return;
    
        if ( $query->is_category() ) {
            $query->set( 'post_type', array('flower','tree') );
        }
    }
    add_action('pre_get_posts','shop_posts_per_page');

    と記述したところどちらも表示されるようになりました。
    このやり方で良いでしょうか?

    問題ないと思います。

    トピック投稿者 nobuzoh

    (@nobuzoh)

    参考になりました。
    ありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「Custom Post Type UIで作成したカスタム投稿タイプをメインクエリで表示する方」には新たに返信することはできません。