Wie verwende ich ein benutzerdefiniertes Post-Archiv als Startseite?

Ich möchte ein benutzerdefiniertes Post-Archiv als Startseite der Site verwenden, so dass

http://the_site.com/ 

ist ein benutzerdefiniertes Post-Archiv, das entsprechend meiner archive-{post-type}.php Datei archive-{post-type}.php wird.

Idealerweise möchte ich die Abfrage mit is_front_page() in meiner functions.php Datei ändern. Ich habe Folgendes versucht, mit einer Seite namens “Home” als meine Titelseite:

  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; } 

aber die Titelseite gibt den Inhalt von “Home” zurück und scheint die benutzerdefinierte Abfrage zu ignorieren.

Was mache ich falsch? Gibt es im Allgemeinen einen besseren Weg?

Solutions Collecting From Web of "Wie verwende ich ein benutzerdefiniertes Post-Archiv als Startseite?"

Nachdem Sie eine statische Seite als Startseite festgelegt haben, können Sie diese zu Ihrer functions.php hinzufügen und schon kann es losgehen. Dies wird auch die Vorlage archive-POSTTYPE.php korrekt 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; } 

Benenne dein CPT-Archiv in home.php um

Verwenden Sie dann pre_get_posts, um die Homepage-Abfrage so zu ändern, dass nur CPT angezeigt wird

 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'); 

Ersetzen Sie your-cpt durch den Namen Ihres benutzerdefinierten Post-Typs.

Danke für die Antwort ljaas – ich wollte genau dieses Problem lösen. Um die Archivierungsvorlage des benutzerdefinierten Post-Typs aufrufen zu können, musste ich folgende Bedingungen hinzufügen:

 $wp_query->is_post_type_archive = 1; $wp_query->is_archive = 1; 

Das funktioniert besser, wenn ich sowohl die Blog-Posts als auch die statische Seite überschreibe, und zwar unter Einstellungen> Lesen> 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 verwende es in Verbindung mit einer Template-Überschreibung mit den Filtern front_page_template und home_template , um eine benutzerdefinierte Vorlage zurückzugeben.

Für mich bricht es die Paginierung: Entweder Sie wählen den Index oder eine statische Seite als Homepage aus, die Paginierungslinks erscheinen, aber wenn ich auf Seite 2 klicke, bekomme ich:

  • im Falle einer Indexseite (Standard): die 404-Seite
  • Im Falle einer statischen Seite: Die gleichen Ergebnisse wie auf Seite 1: Das Argument “seitenweise” wird dann so interpretiert, dass die Seitentyp-Paginierung und nicht die Seitentyp-Listenpaginierung angezeigt wird.

Ich denke, dass es einige Umschreibungsregeln braucht, um das ausgelagerte Argument zu erfassen und es korrekt zu übergeben.

Wie auch immer, eine benutzerdefinierte Template-Seite sollte die Lösung mit einigen zusätzlichen Rewrite-Regeln sein.