web-dev-qa-db-ja.com

一般的なカテゴリテンプレートだけを使用して、カテゴリに分類される通常の投稿とカスタム投稿の種類を表示する方法

1)私のサイトには投稿があり、2つのカスタム投稿の種類(ニュース&エッセイ)2)それらはすべてスポーツと健康のような通常のカテゴリーを共有しますこのテンプレートは、コンテンツ投稿タイプに関係なく、その下にあるすべてのコンテンツを表示しながら、すべてのカテゴリを処理します。

あるいは、一般的なcategory.phpテンプレートですべてのカテゴリ表示を処理したいのですが、カスタム投稿タイプも含める必要があります。

これはばかげた質問かもしれませんが、長い間休んでWordpressに戻ってきたため、デフォルトのWordpressのテーマを理解するのは難しいと思います。ただ混乱していて、いまイライラしています。

助けてください

4
damx

query_posts() 関数 - メインの/デフォルトのクエリを変更するためのあなたの愚痴を見てください。元のクエリを置き換えるのではなく変更するには、事前にglobal $wp_queryを呼び出してください。

このような何かはあなたのためにトリックをするべきです。メインループが始まる直前に、最初の4行をcategory.phpに入れてください。

// Modify the default loop, include custom post types
global $wp_query;
$args = array_merge( $wp_query->query, array( 'post_type' => 'any' ) );
query_posts( $args );

// The beginning of the loop looks like this:
while ( have_posts() ) : the_post();

投稿タイプをもっと選択的に表示したい場合は、一般的な'post_type'=>'any'の代わりに希望の投稿タイプを持つ配列を指定できます。

$args = array_merge( $wp_query->query, array( 'post_type' => array('post','news','essays') ) );

そしてWordPressの世界とWPSEの世界へようこそ。
欲求不満はすぐになくなるでしょう;)

6
Michal Mau

最初私はMauglyの解決策を使いましたが、それから私はwordpress codexでこれを見つけました:

add_action( 'pre_get_posts', 'add_my_custom_post_type' );
/**
 * @param WP_Query $query
 * @return WP_Query
 */
function add_my_custom_post_type( $query ) {
    if ($query->is_main_query()) 
        $query->set( 'post_type', array( 'post', 'page', 'any_custom_type' ) );
    return $query;
}

それが誰かに役立つことを願っています..多分それはMauglyの解決策よりは最もきれいではないが少しきれいなものではありません..

2
Kower

@ tivnetの回答を参考にして、これに追加したいと思いました。 ( コメントを残したほうがいいけど、担当者の人数が足りない

私は解決策はうまくいったと思ったが、おそらく管理エリアにも影響を与えるという意図しない結果をもたらした。つまり、wp-admin(wp-admin/edit.php)の投稿にアクセスするとすべてのページとカスタム投稿タイプも表示される一般的な投稿リストに。他のユーザーを混乱させるのでしょうか。しかし、追加:

and !is_admin()

if()ステートメント内では、pre_get_postsをフロントエンドで修正しながら、この問題を解決するようです。

add_action('pre_get_posts', 'add_my_custom_post_type');

/**
 * @param WP_Query $query
 * @return WP_Query
 */
function add_my_custom_post_type($query) {
    if(
        empty($query->query['post_type'])
        or $query->query['post_type'] === 'post'
        and !is_admin()
    ){
        $query->set('post_type', 'any');
    }
}
0
steveBeeSmart

►これが@ Kowerの提案の私のバージョンです。管理者の問題をいくつか解決します。

add_action('pre_get_posts', 'add_my_custom_post_type');

/**
 * @param WP_Query $query
 * @return WP_Query
 */
function add_my_custom_post_type($query) {
    if(
        empty($query->query['post_type'])
        or $query->query['post_type'] === 'post'
    ){
        $query->set('post_type', array('post', 'my_custom_type'));
    }
}
0
tivnet

カスタム投稿タイプを通常のループ(投稿ページなど)に含めるには、if ( have_posts() ) :の前にindex.phpに次のコードを追加するだけです。

$args = array(
'post_type'   => array('post', 'custom_post_type'),
'post_status' => 'publish',
);
$new_post_loop = new WP_Query( $args );

その後、次の2行を修正します。

if ( have_posts() ) :if ( $new_post_loop -> have_posts() ) :に変更します

そして

while ( have_posts() ) : the_post();からwhile ( $new_post_loop -> have_posts() ) : $new_post_loop -> the_post();

この解決策は、add_action( 'pre_get_posts')を使用して生成されるバックエンドのすべての投稿画面にカスタム投稿タイプが表示されるという問題を回避します。

0
Mangucha
function namespace_add_custom_types( $query ) 
{
 if( is_category() || is_tag() && empty( $query->query_vars['suppress_filters'] ) ) 
 {
   $query->set( 'post_type', array(
  'post', 'nav_menu_item', 'your-custom-post-type-here'
   ));
  return $query;
}
}
add_filter( 'pre_get_posts', 'namespace_add_custom_types' );
0
Nikunj w3Nuts