web-dev-qa-db-ja.com

カスタム投稿タイプを問い合わせますか?

カスタム投稿タイプUIプラグイン をインストールしました。このプラグインを有効にした後、私はportfolioと呼ばれるカスタム投稿タイプを作成しました。今、私はフロントエンドのポートフォリオページでこれを使いたいです。 カスタム投稿タイプがportfolioの投稿をすべて取得する方法を教えてください。

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

通常の投稿とportfolio型の投稿の両方が表示されます。

または

query_posts('post_type=portfolio');

portfolioのみ。

通常どおりに使用WPクエリ - Codexを読む: 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;?>
21
Martin-Al

主な回答として遅い回答は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ファイルに詰め込むことができます(これは not 推奨ではありません)。

15
kaiser

このコードをあなたの 子テーマ関数ファイルに追加します - (推奨)あなたの単一の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

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

例: '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' );

    }

}
4
Brad Dalton