カスタム投稿タイプを照会しますか?
3 回答
- 投票
-
- 2011-01-06
query_posts( array( 'post_type' => array('post', 'portfolio') ) );
通常の投稿と
portfolio
タイプ内の投稿の両方を表示しますまたは
query_posts('post_type=portfolio');
portfolio
のみ.通常のWPクエリとして使用する-コーデックスを読む: 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;?>
query_posts( array( 'post_type' => array('post', 'portfolio') ) );
which shows both normal posts and posts inside
portfolio
typeor
query_posts('post_type=portfolio');
for only
portfolio
.Use as normal WP Query - read the Codex: http://codex.wordpress.org/Function_Reference/query_posts#Usage and 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;?>
-
これはかなり古い答えですが、明確にするために、これを行うべき方法はありません.それはほぼ必然的に404や他の多くの問題につながるでしょう.@kaiserの回答または[`query_posts()`を使用すべきでない理由に関するこの投稿](http://wordpress.stackexchange.com/questions/50761/when-to-use-wp-query-query-posts)を参照してください.-and-pre-get-posts/50762#50762)This is a fairly old answer - but to be clear, there is not the way you should being doing this. It will almost inevitably lead to 404s and a host of other problems. Please see @kaiser's answers or [this post on why you shouldn't use `query_posts()`](http://wordpress.stackexchange.com/questions/50761/when-to-use-wp-query-query-posts-and-pre-get-posts/50762#50762)
- 7
- 2013-05-28
- Stephen Harris
-
- 2013-05-27
メインの回答は
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
ファイルに簡単に詰め込むことができます(これは推奨されません).Late answer as the main answer uses
query_posts()
, which should never be done.Use a filter
Use the
pre_get_posts
filter and just set theportfolio
post type for the main query. Use Conditional Tags to determine where you want to have this filter.Quick Example
<?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; }
Disclaimer
The above code is a plugin, but can simply get stuffed in the
functions.php
file of your theme (which is not recommended).-
関数に追加することが推奨されないのはなぜですか?確かに、サイト管理者がテーマを変更した場合、とにかくこの新しいテーマでホームページにポートフォリオを表示する方法に対処する必要があります.したがって、プラグインではなく関数にこれを追加することも同様に有効だと思います.それとも私は何かが足りないのですか?why is it not recommended to add it to functions? Surely, if the site admin changes the theme they would need to address how to display the portfolio on the home page with this new theme anyway. So, I would say it is just as valid to add this in functions rather than a plugin. Or am I missing something?
- 0
- 2016-11-29
- Phill Healey
-
@PhillHealeyあなたが言ったように、データは見えないので、コードをコピーして貼り付ける必要があります.クエリへの重いロジックの変更はプラグインを介して提供するのが最適ですが、表示とスタイル設定はテーマに保持する必要があります.@PhillHealey As you said, the data would be invisible and you would have to copy and paste the code around. Heavy, logic modifications to queries are best served via plugins, while displaying and styling should be kept in themes.
- 0
- 2016-11-29
- kaiser
-
そのコードがテーマに固有である場合はそうではありません.Not if that code is specific to the theme.
- 0
- 2016-12-03
- Phill Healey
-
@PhillHealey投稿タイプはテーマに固有であってはなりません**.@PhillHealey A post type should **never** be specific to a theme.
- 0
- 2016-12-04
- kaiser
-
わかりました.絶対値よりもしっぺ返しをしたい場合は問題ありません.ただし、デザイン固有のコードをプラグインにプッシュするべきではないと言うのは正しくありません.それが適切でない場合がたくさんあります.Ok, if you want to get in some tit-for-tat over absolutes then fine. However, It's just not correct to say that none design specific code should be pushed out to a plugin. There are lots of times when that's not appropriate.
- 0
- 2016-12-05
- Phill Healey
-
- 2013-12-11
このコードを子テーマ関数ファイルに追加して(推奨)、単一の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' ); } }
Add this code to your child themes functions file (recommended) to add your single CPT pages to your main loop
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; }
Source http://codex.wordpress.org/Post_Types
Or create a custom archive-portfolio.php page template which will only display your CPT pages. This only needs to be done if you haven't added a archive page using the plugin settings.
Example: 'has_archive' => true,
You can also control how many pages are displayed and the order in which they're displayed on the archive page using this code:
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' ); } }
portfolio
というカスタム投稿タイプを作成しました.これをフロントエンドのポートフォリオページで使用したいと思います.カスタム投稿タイプportfolio
のすべての投稿をフェッチするにはどうすればよいですか?