사용자 정의 포스트 유형 아카이브를 첫 페이지로 사용하는 방법은 무엇입니까?
-
-
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
-
Johannes를 명확히 해주셔서 감사합니다.'댓글 추가'기능을 사용할 수 없기 때문에 답변에 대한 댓글을 작성하는 방법을 알 수는 없지만 그렇게 생각했습니다.이것은 시간에 민감한 기능입니까,아니면 시각 장애인입니까?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
파일에 따라 표시되는 사용자 지정 게시물 유형 아카이브입니다.이상적으로는
is_front_page()
파일에서functions.php
를 사용하여 쿼리를 변경하고 싶습니다."홈"이라는 페이지를 첫 페이지로 사용하여 다음을 시도했습니다.그러나 첫 페이지는 "홈"의 콘텐츠를 반환하고 맞춤 검색어를 무시하는 것 같습니다.
내가 뭘 잘못하고 있니?일반적으로이 문제를 해결하는 더 좋은 방법이 있습니까?