Wie verwende ich ein benutzerdefiniertes Archiv vom Typ Post als Startseite?
-
-
is_front_page ()funktioniertnichtmit pre_get_postsis_front_page() will not work with pre_get_posts
- 0
- 2014-08-18
- Brad Dalton
-
5 Antworten
- Stimmen
-
- 2011-10-12
Nachdem Sieeine statische Seite als Startseitefestgelegt haben,können Sie diese zu Ihrer
functions.php
hinzufügen,und schon kannes losgehen.Dadurch wird auch die Vorlagearchive-POSTTYPE.php
korrekt aufgerufen.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; }
-
Diese Funktionbenötigt am Anfang "if (is_admin ()) return;",andernfalls wird der Admin-Bereich durcheinandergebracht.This function needs `if(is_admin()) return;` at the very beginning, otherwise it messes with the admin area.
- 0
- 2013-09-11
- brasofilo
-
Während diesfürmichfunktionierte,verschwandenmeine primären und sekundären Menüs als Ergebnis.While this worked for me, my primary and secondary menus disappeared as result.
- 1
- 2015-04-19
- super9
-
Esistfast richtig.Dieser Code ändert alle wp_queries,daher sollteesif (is_home ()) anstelle vonif ($ wp_query->get .....) sein.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
-
Ich verwende dasselbe,aber aufmeinerbenutzerdefinierten Seitenvorlage anstelle der Startseite,undes werden keine Ergebnisse angezeigt (als ob keinebenutzerdefinierten Beiträge hinzugefügt worden wären).Irgendwelche Gedanken?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
-
Diese Lösung unterstützt kein Paging.Jede/page/2-URL zeigt weiterhin dieersten 10 Beiträge an.This solution doesn't support paging. Any /page/2 URL still shows the first 10 posts.
- 0
- 2019-07-19
- rg89
-
Um die Paginierung zu unterstützen: if ($ query->get ('paged')) {$paged=$ query->get ('paged');}} elseif ($ query->get ('page')) {$paged=$ query->get ('page');}} sonst {$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
Benennen Sie Ihr CPT-Archivin home.php
umVerwenden Sie dannpre_get_posts,um die Homepage-Abfrage so zu ändern,dassnur die CPT-Anzeige
angezeigt wirdfunction 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');
Ersetzen Sie Ihre-cpt durch den Namen Ihresbenutzerdefinierten Beitragstyps.
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.
-
Endlicheine klare,praktikable Erklärung!finally, a clear, workable explanation!
- 2
- 2015-06-13
- Jack
-
- 2013-07-18
Dankefür die Antwort ljaas -ich wolltegenau dieses Problem lösen.Um diebenutzerdefinierte Archivvorlage vom Typ Post zuerhalten,mussteich diefolgenden Bedingungen hinzufügen:
$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;
-
Hallo Eli,willkommenbei WPSE."Antworten" sollen die ursprüngliche Fragebeantworten (Stackexchange-Sites sind * keine Diskussionsforenmit Threads *).Dies wäre vielbesserfüreinen * Kommentar *geeignet.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
-
Dankefür die Klarstellung Johannes.Das habeichmirgedacht,obwohlichnicht herausfinden konnte,wieich die Antwort kommentieren soll,da keine Funktion zum Hinzufügen von Kommentaren verfügbarist.Ist daseine zeitkritische Funktion oderbin ichblind?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
Diesfunktioniertbesser,wennich sowohl Blog-Beiträge als auch statische Seiten unter Einstellungen> Lesen> überschreibe. Die Startseite wird angezeigt:
<?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; }
Ich verwendeesin Verbindungmit einer Vorlagenüberschreibungmit den Filtern
front_page_template
undhome_template
,umeine benutzerdefinierte Vorlage zurückzugeben.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
Fürmichbrichtes die Paginierung: Entweder Sie wählen den Index odereine statische Seite als Startseite aus,die Paginierungslinks werden angezeigt,aber wennich auf Seite 2 klicke,erhalteich:
- bei Indexseite (Standard): die 404-Seite
- bei statischer Seite: Diegleichen Ergebnisse wiebei Seite 1: Das Argument "paged" wird dann sointerpretiert,dass die Seitentyp-Paginierung undnicht die Post-Typ-Listen-Paginierung angezeigt wird.
Ich denke,es sindeinige Umschreiberegelnerforderlich,um das ausgelagerte Argument abzufangen und korrekt zu übergeben.
Aufjeden Fall sollteeine benutzerdefinierte Vorlagenseite die Lösungmit einigen zusätzlichen Umschreiberegeln sein.
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.
Ichmöchteein benutzerdefiniertes Archiv vom Typ Post als Startseiteeiner Site verwenden,damit
istein benutzerdefiniertes Archiv vom Typ Post,dasgemäßmeiner
archive-{post-type}.php
angezeigt wird.Idealerweisemöchteich die Abfragemit
is_front_page()
in meiner Dateifunctions.php
ändern.Ich habe Folgendes versucht,mit einer Seitenamens "Home" als Startseite:aber die Startseitegibt den Inhalt von "Home" zurück und scheint diebenutzerdefinierte Abfrage zuignorieren.
Wasmacheichfalsch?Gibtesim Allgemeineneinen besseren Weg,dies zutun?