Erstellen Sie eine Seite, ohne eine Seite in der database hinzuzufügen

Ich versuche, eine spezielle Archivseite mit meinem Thema zu integrieren, jetzt habe ich eine PHP-Datei mit

Template Name: Archives Template oben und ich der Benutzer muss ein leeres Archiv POST PAGE erstellen und dann diese als Vorlage auswählen.

Der Inhalt zum Erstellen der Seite ist leer, sodass der databaseinhalt für den Seiteninhalt nichts hinzugefügt wird. Gibt es da überhaupt etwas, wo sie das nicht machen müssen?

Solutions Collecting From Web of "Erstellen Sie eine Seite, ohne eine Seite in der database hinzuzufügen"

Dies ist technisch gesehen keine “Seite”, aber es ist eine Möglichkeit, Inhalte mithilfe von mod_rewrite darzustellen. Das Ziel besteht darin, ein URI-Segment von foobar hinzuzufügen, das eine benutzerdefinierte Abfrage austriggers und dann die angegebene Vorlagendatei einfügt.

Fügen Sie eine Rewrite-Regel hinzu:

 add_action('init', 'foo_add_rewrite_rule'); function foo_add_rewrite_rule(){ add_rewrite_rule('^foobar?','index.php?is_foobar_page=1&post_type=custom_post_type','top'); //Customize this query string - keep is_foobar_page=1 intact } 

Weitere Informationen zum Anpassen der Abfragezeichenfolge finden Sie in der Dokumentation zu WP_Query .

Registrieren Sie eine neue Abfrage var:

 add_action('query_vars','foo_set_query_var'); function foo_set_query_var($vars) { array_push($vars, 'is_foobar_page'); return $vars; } 

Erzwinge WP, um deine Seitenvorlage auszuwählen:

 add_filter('template_include', 'foo_include_template', 1000, 1); function foo_include_template($template){ if(get_query_var('is_foobar_page')){ $new_template = WP_CONTENT_DIR.'/themes/your-theme/template-name.php'; if(file_exists($new_template)) $template = $new_template; } return $template; } 

Wiederholen Sie die Änderungen, indem Sie Einstellungen-> Permalinks aufrufen und dann http://yourdomain.com/foobar besuchen

Eine zusätzliche Bemerkung zu Brian Fegters Antwort. Wenn Sie die Rewrites-Regeln programmatisch flush_rewrite_rules() möchten, statt Einstellungen-> Permalinks flush_rewrite_rules() , können Sie flush_rewrite_rules() .

init Sie es jedoch nicht auf init Hook, wie der WordPress-Codex dringend empfiehlt. Sie können sowohl die Methode flush_rewrite_rules() als auch foo_add_rewrite_rule() auf register_activation_hook .

 register_activation_hook( __FILE__, 'myplugin_flush_rewrites' ); function myplugin_flush_rewrites() { add_rewrite_rule('^foobar?','index.php?is_foobar_page=1&post_type=custom_post_type','top'); flush_rewrite_rules(); } 

Ich konnte die is_front_page() und is_home() functionen von der Auswertung auf “true” für meine “gefälschte” Seite pre_get_posts indem ich eine pre_get_posts Methode hinzufügte

 add_action( 'pre_get_posts', 'foo_pre_get_posts', 1 ); function foo_pre_get_posts( $query ) { // check if the user is requesting an admin page // or current query is not the main query if ( is_admin() || ! $query->is_main_query() ){ return; } // edit the query only when we are dealing with our "fake" pages // if it isn't, return if ( get_query_var('is_foobar_page') ) { $query->set('post_type', 'page'); $query->is_home = false; } }