Greifen Sie von mehreren URLs auf die gleiche Seite zu (Platzhalter)

Ich möchte eine bestimmte WordPress-Seite für mehrere URLs bereitstellen. Grundsätzlich möchte ich alle URLs in einem bestimmten Format auf eine bekannte Seite zeigen:

/some-prefix-* => /target-page 

Und auf /some-prefix-and-here-something sollte es /target-page laden.

Wie macht man das?

Hinweis Ich möchte den Benutzer nicht redirect, sondern eine vorhandene Seite mehreren URLs bereitstellen.

Der .htaccess sieht so aus:

 # BEGIN s2Member GZIP exclusions RewriteEngine On RewriteRule ^prefix-*$ some/path/to/directory-$1 [NC,L]  RewriteEngine On RewriteBase / RewriteCond %{QUERY_STRING} (^|\?|&)s2member_file_download\=.+ [OR] RewriteCond %{QUERY_STRING} (^|\?|&)no-gzip\=1 RewriteRule .* - [E=no-gzip:1]  # END s2Member GZIP exclusions # BEGIN WordPress  RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]  # END WordPress DirectoryIndex index.php index.html 

Ich dachte durch das Hinzufügen von RewriteEngine On RewriteRule ^prefix-*$ some/path/to/directory-$1 [NC,L] wird /prefix-* von some/path/to/directory-$1 . Beispiel: Wenn Sie auf example.com/prefix-foo zugreifen, sollte dies mit example.com/some/path/to/directory-foo identisch sein (was zu example.com/some/path/to/directory-foo/index.html ).

Wenn es bereits eine WordPress-Seite mit der prefix-bar , sollte /prefix-bar nicht example.com/some/path/to/directory-bar/index.html laden.

Solutions Collecting From Web of "Greifen Sie von mehreren URLs auf die gleiche Seite zu (Platzhalter)"

Sie können template_include , aber bevor Sie diesen Filter aktivieren, müssen Sie folgende Schritte ausführen:

  1. Erstellen Sie eine Seitenvorlage. zB: page-target.php

     < ?php /** * Template Name: Page Target */ ... 
  2. Fragen Sie den Inhalt der page-target.php Vorlage page-target.php , da der globale $post auf Ihre Seite mit dem some-prefix-* .

  3. (Optional): Bearbeiten und wenden Sie Seitenvorlagen- Page Target auf Ihre /target-page über die Seitenattribute an

Dann füge folgendes zu deiner functions.php

 add_filter('template_include', function($template) { global $post; $prefix = 'some-prefix-'; // Your prefix $prefixExist = strpos($post->post_name, $prefix) !== false; if ($prefixExist) { return locate_template('page-target.php'); //Your template } return $template; }); 

Der page-target.php Filter überschreibt die Vorlage mit page-target.php wenn die Bedingung erfüllt ist, andernfalls die Standardeinstellung

Bearbeiten:

Ich denke, ich habe einen besseren Weg gefunden, dies mit add_rewrite_rule zu lösen

 function custom_rewrite_basic() { $page_id = 123; //Your serve page id add_rewrite_rule('^some-prefix-.*', 'index.php?page_id=' . $page_id, 'top'); } add_action('init', 'custom_rewrite_basic'); 

WICHTIG: Vergessen Sie nicht, die rewrite-Regeldatenbank zu bereinigen und neu zu generieren, nachdem Sie die Regeln geändert haben. Wählen Sie in WordPress Administration Screens Einstellungen -> Permalinks und klicken Sie einfach auf Änderungen speichern, ohne Änderungen vorzunehmen.

Beachten Sie, dass Suchmaschinen möglicherweise mehrere Pfade zum selben Inhalt nicht mögen!

Hier gehe ich davon aus, dass du zB:

 example.tld/some/path/to/painting-orange example.tld/painting-blue example.tld/painting-red example.tld/painting-yellow 

sich wie diese Seite verhalten:

 example.tld/paintings 

aber nicht so für Pfade wie:

 example.tld/painting-white/painting-brown/large example.tld/painting-brown/small 

Die Regel hier ist, das Präfix auf der linken Seite des basename( $path ) .

Hier ist ein kleiner Hack mit dem request , um zu überprüfen, ob der aktuelle Seitenname korrekt vorangestellt ist:

 < ?php /** * Plugin Name: Wildcard Pages */ add_filter( 'request', function( $qv ) { // Edit to your needs $prefix = 'painting-'; $target = 'paintings'; // Check if the current page name is prefixed if( isset( $qv['pagename'] ) && $prefix === substr( basename( $qv['pagename'] ), 0, strlen( $prefix ) ) ) $qv['pagename'] = $target; return $qv; } ); 

Ändern Sie dies nach Ihren Bedürfnissen. Erstellen Sie dann die Plugin-Datei /wp-content/plugins/wpse-wildcard-pages/wpse-wildcard-pages.php und aktivieren Sie das Plugin vom Backend.

Wir könnten auch eine Überprüfung mit get_page_by_path() auf der Zielseite hinzufügen, um sicherzustellen, dass sie existiert. Möglicherweise möchten wir dies auch auf bestimmte Post-Typen beschränken.

Erstellen Sie einen Hook für init und wp_redirect, wenn der Slug des aktuellen Posts mit Ihrem Präfix beginnt.

 function wp_init() { global $post; $slug = $post->post_name; $prefix = 'foobar'; if (substr($slug, 0 strlen($prefix))==$prefix) { wp_redirect(123); // your page id } } add_action('init', 'wp_init');