カスタム投稿タイプのアーカイブをサイトのフロントページとして使用したいのですが
http://the_site.com/
私のarchive-{post-type}.php
ファイルに従って表示されるカスタム投稿タイプのアーカイブです。
理想的には、私のfunctions.php
ファイルでis_front_page()
を使ってクエリを変更したいです。私のフロントページとして "Home"というページを使って、次のことを試しました。
add_filter('pre_get_posts', 'my_get_posts');
function my_get_posts($query){
global $wp_the_query;
if(is_front_page()&&$wp_the_query===$query){
$query->set('post_type','album');
$query->set('posts_per_page',-1);
}
return $query;
}
しかしフロントページは "Home"の内容を返しており、カスタムクエリを無視しているようです。
何がおかしいのですか?一般的に、これに取り組むより良い方法はありますか?
あなたのホームページとして静的なページを設定した後、あなたはあなたの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;
}
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をカスタム投稿タイプの名前に置き換えます。
答えljaasをありがとう - 私はこの正確な問題を解決しようとしていました。カスタム投稿タイプのアーカイブテンプレートを呼び出すには、次の条件を追加する必要があります。
$wp_query->is_post_type_archive = 1;
$wp_query->is_archive = 1;
これは、ブログの投稿と、設定>閲覧>フロントページの表示の静的ページの両方を上書きする場合に適しています。
<?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
を使うテンプレートオーバーライドと一緒にそれを使っています。
ホームページとしてインデックスまたは静的ページを選択するとページネーションリンクが表示されますが、ページ2をクリックすると次のようになります。
ページングされた引数をキャッチして正しく渡すには、いくつかの書き換え規則が必要だと思います。
とにかく、カスタムテンプレートページはいくつかの追加の書き換え規則を伴う解決策であるべきです。