カスタム投稿タイプのアーカイブをフロントページとして使用するにはどうすればよいですか?
-
-
is_front_page()はpre_get_postsでは機能しませんis_front_page() will not work with pre_get_posts
- 0
- 2014-08-18
- Brad Dalton
-
5 回答
- 投票
-
- 2011-10-12
静的ページをホームページとして設定したら、これを
functions.php
に追加できます.これで準備完了です.これにより、archive-POSTTYPE.php
テンプレートも正しく呼び出されます.add_action("pre_get_posts", "custom_front_page"); function custom_front_page($wp_query){ //Ensure this filter isn't applied to the admin area if(is_admin()) { return; } if($wp_query->get('page_id') == get_option('page_on_front')): $wp_query->set('post_type', 'CUSTOM POST TYPE NAME HERE'); $wp_query->set('page_id', ''); //Empty //Set properties that describe the page to reflect that //we aren't really displaying a static page $wp_query->is_page = 0; $wp_query->is_singular = 0; $wp_query->is_post_type_archive = 1; $wp_query->is_archive = 1; endif; }
After you have set a static page as your home page you can add this to your
functions.php
and you are good to go. This will call thearchive-POSTTYPE.php
template correctly as well.add_action("pre_get_posts", "custom_front_page"); function custom_front_page($wp_query){ //Ensure this filter isn't applied to the admin area if(is_admin()) { return; } if($wp_query->get('page_id') == get_option('page_on_front')): $wp_query->set('post_type', 'CUSTOM POST TYPE NAME HERE'); $wp_query->set('page_id', ''); //Empty //Set properties that describe the page to reflect that //we aren't really displaying a static page $wp_query->is_page = 0; $wp_query->is_singular = 0; $wp_query->is_post_type_archive = 1; $wp_query->is_archive = 1; endif; }
-
この関数は、最初に `if(is_admin())return;`が必要です.そうしないと、管理領域が混乱します.This function needs `if(is_admin()) return;` at the very beginning, otherwise it messes with the admin area.
- 0
- 2013-09-11
- brasofilo
-
これは私にとってはうまくいきましたが、結果として私のプライマリメニューとセカンダリメニューが消えました.While this worked for me, my primary and secondary menus disappeared as result.
- 1
- 2015-04-19
- super9
-
それはほぼ正しいです.このコードはすべてのwp_queriesを変更しているため、if($ wp_query->get .....)ではなくif(is_home())にする必要があります.It's almost correctly. This code is changing all wp_queries, so it should be if ( is_home() ) instead of if ($wp_query->get.....)
- 0
- 2015-06-10
- Leo Caseiro
-
同じものを使用していますが、フロントページではなくカスタムページテンプレートを使用していますが、結果が表示されません(カスタム投稿が追加されていないかのように).何かご意見は?I'm using the same but on my custom page template instead of frontpage, and it shows no results (as if no custom posts were added). Any thoughts?
- 0
- 2018-07-22
- trainoasis
-
このソリューションはページングをサポートしていません./page/2 URLには、最初の10件の投稿が引き続き表示されます.This solution doesn't support paging. Any /page/2 URL still shows the first 10 posts.
- 0
- 2019-07-19
- rg89
-
ページネーションをサポートするには: if($ query->get( 'paged')){$paged=$ query->get( 'paged');} elseif($ query->get( 'page')){$paged=$ query->get( 'page');} else {$paged=1;} $ query-> set( 'paged'、$paged);To support pagination: if ( $query->get('paged') ) { $paged = $query->get('paged'); } elseif ( $query->get('page') ) { $paged = $query->get('page'); } else { $paged = 1; } $query->set('paged', $paged);
- 1
- 2019-09-26
- Jonathan Nicol
-
- 2014-08-18
CPTアーカイブの名前をhome.phpに変更します
次に、pre_get_postsを使用してホームページのクエリを変更し、CPTのみが表示されるようにします
function wpsites_home_page_cpt_filter($query) { if ( !is_admin() && $query->is_main_query() && is_home() ) { $query->set('post_type', array( 'your-cpt' ) ); } } add_action('pre_get_posts','wpsites_home_page_cpt_filter');
your-cptをカスタム投稿タイプの名前に置き換えます.
Re-name your CPT archive to home.php
Then use pre_get_posts to alter the home page query so only CPT's display
function wpsites_home_page_cpt_filter($query) { if ( !is_admin() && $query->is_main_query() && is_home() ) { $query->set('post_type', array( 'your-cpt' ) ); } } add_action('pre_get_posts','wpsites_home_page_cpt_filter');
Replace your-cpt with the name of your custom post type.
-
最後に、明確で実行可能な説明です!finally, a clear, workable explanation!
- 2
- 2015-06-13
- Jack
-
- 2013-07-18
答えてくれてありがとうljaas—私はこの正確な問題を解決しようとしていました.カスタム投稿タイプのアーカイブテンプレートを呼び出すには、次の条件を追加する必要がありました.
$wp_query->is_post_type_archive = 1; $wp_query->is_archive = 1;
Thanks for the answer ljaas—I was looking to solve this exact problem. In order to get the custom post type archive template to be called I had to add the following conditions:
$wp_query->is_post_type_archive = 1; $wp_query->is_archive = 1;
-
こんにちはエリ、WPSEへようこそ.「回答」は、最初の質問に答えることを目的としています(stackexchangeサイトは*スレッド化されたディスカッションフォーラムではありません*).これは、*コメント*にはるかに適しています.Hi Eli, welcome to WPSE. "Answers" are meant to answer the initial question (stackexchange sites are *not threaded discussion forums*). This would be a much better fit for a *comment*.
- 2
- 2013-07-18
- Johannes Pille
-
ヨハネスの説明に感謝します.「コメントを追加」機能がないので、答えにコメントする方法がわかりませんでしたが、それは私が思ったものです.これは時間に敏感な機能ですか、それとも私は盲目ですか?Thanks for the clarification Johannes. That is what I thought, though I could not figure out how to comment on the answer as there is no 'add comment' feature available. Is this a time-sensitive feature, or am I blind?
- 0
- 2013-07-20
- Eli
-
- 2015-03-26
これは、[設定]> [閲覧]> [フロントページの表示]でブログ投稿と静的ページの両方を上書きする場合に適しています:
<?php /** * Set custom post type archive as front page. * * @since 1.0.0 */ function ql_set_as_front_page( $query ) { if ( is_admin() || ! $query->is_main_query() ) { return; } if ( ql_is_front_page( $query ) ) { $query->set( 'page_id', '' ); $query->is_page = false; $query->is_singular = false; $query->set( 'post_type', 'MYCPT' ); $query->is_archive = true; $query->is_post_type_archive = true; } } add_action( 'pre_get_posts', 'ql_set_as_front_page' ); /** * Taken from WP_Query::is_front_page and adapted to compare page_on_front with current page ID. * * @since 1.0.0 * * @param object $query The main WP Query. */ function ql_is_front_page( $query ) { if ( 'posts' == get_option( 'show_on_front') && $query->is_home() ) return true; elseif ( 'page' == get_option( 'show_on_front') && get_option( 'page_on_front' ) && $query->get('page_id') == get_option( 'page_on_front' ) ) return true; else return false; }
カスタムテンプレートを返すために、フィルター
front_page_template
とhome_template
を使用してテンプレートオーバーライドと組み合わせて使用しています.This works better for me overriding both blog posts and static page in Settings > Reading > Front page displays:
<?php /** * Set custom post type archive as front page. * * @since 1.0.0 */ function ql_set_as_front_page( $query ) { if ( is_admin() || ! $query->is_main_query() ) { return; } if ( ql_is_front_page( $query ) ) { $query->set( 'page_id', '' ); $query->is_page = false; $query->is_singular = false; $query->set( 'post_type', 'MYCPT' ); $query->is_archive = true; $query->is_post_type_archive = true; } } add_action( 'pre_get_posts', 'ql_set_as_front_page' ); /** * Taken from WP_Query::is_front_page and adapted to compare page_on_front with current page ID. * * @since 1.0.0 * * @param object $query The main WP Query. */ function ql_is_front_page( $query ) { if ( 'posts' == get_option( 'show_on_front') && $query->is_home() ) return true; elseif ( 'page' == get_option( 'show_on_front') && get_option( 'page_on_front' ) && $query->get('page_id') == get_option( 'page_on_front' ) ) return true; else return false; }
I'm using it in conjunction with a template override using the filters
front_page_template
andhome_template
to return a custom template. -
- 2015-09-08
私にとってはページ付けが壊れます.ホームページとしてインデックスまたは静的ページを選択すると、ページ付けのリンクが表示されますが、2ページをクリックすると次のように表示されます:
- インデックスページの場合(デフォルト):404ページ
- 静的ページの場合:ページ1と同じ結果:「paged」引数は、投稿タイプリストのページ付けではなく、ページタイプのページ付けを示すように解釈されます.
ページングされた引数をキャッチして正しく渡すには、いくつかの書き換えルールが必要だと思います.
とにかく、カスタムテンプレートページは、いくつかの追加の書き換えルールを備えたソリューションである必要があります.
For me it breaks the pagination : either you select the index or a static page as the home page, the pagination links shows up but when clicking on page 2 I get :
- in case of index page (default) : the 404 page
- in case of static page : the same results as page 1 : the "paged" argument is then interpreted to show the page type pagination, not the post type list pagination.
I think it needs some rewrite rules to catch the paged argument and pass it correctly.
Anyway, a custom template page should be the solution with some additional rewrite rules.
カスタム投稿タイプのアーカイブをサイトのフロントページとして使用したいので、
は、私の
archive-{post-type}.php
ファイルに従って表示されるカスタム投稿タイプのアーカイブです.理想的には、
functions.php
ファイルのfunctions.php
を使用してクエリを変更したいと思います.「ホーム」というページをフロントページとして、次のことを試しました.しかし、フロントページは「ホーム」のコンテンツを返し、カスタムクエリを無視しているようです.
何が間違っているのですか?一般的に、これを行うためのより良い方法はありますか?