カスタム投稿タイプのクエリ?[閉まっている]


16

カスタム投稿タイプUIプラグインをインストールしました。このプラグインをアクティブにした後、というカスタム投稿タイプを作成しましたportfolio。これをフロントエンドのポートフォリオページで使用したいと思います。カスタム投稿タイプのすべての投稿portfolioを取得するにはどうすればよいですか?

回答:


22
query_posts( array( 'post_type' => array('post', 'portfolio') ) );

通常の投稿とportfolioタイプ内の投稿の両方を表示します

または

query_posts('post_type=portfolio');

のみportfolio

通常のWPクエリとして使用-Co​​dexを読む:http : //codex.wordpress.org/Function_Reference/query_posts#Usageおよびhttp://codex.wordpress.org/Function_Reference/query_posts#Post_.26_Page_Parameters

<?php 
    query_posts(array( 
        'post_type' => 'portfolio',
        'showposts' => 10 
    ) );  
?>
<?php while (have_posts()) : the_post(); ?>
        <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
        <p><?php echo get_the_excerpt(); ?></p>
<?php endwhile;?>

6
これはかなり古い答えです-しかし、明確にするために、これを行うべき方法はありません。ほとんど必然的に404やその他の多くの問題につながります。カイザーの答えや、@参照してくださいあなたが使用してはならない理由でこのポストquery_posts()
スティーブン・ハリス

16

主な回答が使用する遅延回答はquery_posts()決して実行されるべきでありませ

フィルターを使用する

pre_get_postsフィルターを使用してportfolio、メインクエリの投稿タイプを設定するだけです。コンディショナルタグを使用して、このフィルターを配置する場所を決定します。

簡単な例

<?php
defined( 'ABSPATH' ) OR exit;
/* Plugin Name: (#6417) "Portfolio" post type in query */

add_filter( 'pre_get_posts', 'wpse_6417_portfolio_posts' );
function wpse_6417_portfolio_posts( $query )
{
    if (
        ! $query->is_main_query()
        // Here we can check for all Conditional Tags
        OR ! $query->is_archive() // For e.g.: Every archive will feature both post types
    )
        return $query;

    $query->set( 'post_type', array( 'post', 'portfolio' ) );

    return $query;
}

免責事項

上記のコードはプラグインですが、単純にfunctions.phpテーマのファイルに詰め込むことができます(推奨されません)。


関数に追加することが推奨されないのはなぜですか?確かに、サイト管理者がテーマを変更した場合、とにかくこの新しいテーマでホームページにポートフォリオを表示する方法に対処する必要があります。そのため、プラグインではなく関数にこれを追加することも同様に有効です。それとも何か不足していますか?
フィルヒーリー

@PhillHealeyあなたが言ったように、データは見えないので、コードをコピーして貼り付ける必要があります。クエリに対するロジックの大幅な変更はプラグインを介して提供するのが最適ですが、表示とスタイル設定はテーマで保持する必要があります。
カイザー

そのコードがテーマに固有の場合ではありません。
フィルヒーリー

@PhillHealey投稿タイプは、テーマに固有のものであってなりませ
カイザー

OK、絶対値よりも少しお得になりたいなら、それでいい。ただし、デザイン固有のコードをプラグインにプッシュしないと言うのは正しくありません。それが適切でない場合が多くあります。
フィルヒーリー

4

このコードを子テーマ関数ファイルに追加して(推奨)、単一のCPTページをメインループに追加します

add_action( 'pre_get_posts', 'add_custom_post_types_to_loop' );

function add_custom_post_types_to_loop( $query ) {

if ( is_home() && $query->is_main_query() )

$query->set( 'post_type', array( 'post', 'portfolio' ) );

return $query;

}

ソースhttp://codex.wordpress.org/Post_Types

または、CPTページのみを表示するカスタムarchive-portfolio.phpページテンプレート作成します。これは、プラグイン設定を使用してアーカイブページを追加していない場合にのみ行う必要があります。

例: 'has_archive' => true、

また、次のコードを使用して、表示するページ数とアーカイブページに表示される順序を制御できます。

add_action( 'pre_get_posts', 'cpt_items' );

function cpt_items( $query ) {

if( $query->is_main_query() && !is_admin() && is_post_type_archive( 'portfolio' ) ) {

$query->set( 'posts_per_page', '8' );

$query->set( 'order', 'ASC' );

    }

}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.