Ja, das ist möglich, aber wenn das Plugin einen benutzerdefinierten Beitragstyp mithilfe des rewrite => array('slug' => 'post_type')
Parameters erstellt, ist es unwahrscheinlich, dass Sie den Slug ersetzen können .
Bei jeder Erstellung benutzerdefinierter Beitragstypen werden URL-Umschreiberegeln in die Datenbank geschrieben. Abhängig davon, welche Aktion die Erstellung des benutzerdefinierten Post-Typs auslöst (z. B. die Init- Aktion), werden in WordPress die Umschreiberegeln gelöscht und die Slugs des benutzerdefinierten Post-Typs wiederhergestellt, unabhängig davon, welche Änderungen Sie vornehmen möchten.
Sie können jedoch benutzerdefinierte Slugs für die benutzerdefinierten Post-Typen bereitstellen. Im folgenden Beispiel wird davon ausgegangen, dass Sie einen benutzerdefinierten Beitragstyp von haben movies
und versuchen, den /movies/
Slug in zu ändern /films/
.
Um vollständig zu sein, hier ist die Grundfunktion, die zum Definieren des movies
benutzerdefinierten Beitragstyps verwendet wird. Das Plugin, auf das Sie verweisen, sollte ungefähr so aussehen:
function movies_register_post_type() {
register_post_type(
'movies',
array(
'labels' => array(
'name' => __('Movies'),
'singular_name' => __('Movie')
),
'public' => true,
'has_archive' => true,
'rewrite' => array(
'slug' => 'movies'
)
)
);
} // end example_register_post_type
add_action('init', 'movies_register_post_type');
Sie können die Optionstabelle ändern, indem Sie Ihre eigenen benutzerdefinierten Regeln basierend auf dem vorhandenen Beitragstyp bereitstellen.
Grundsätzlich machen wir das:
- Nehmen Sie die vorhandenen Regeln und schreiben Sie dann unsere eigenen mit unseren eigenen benutzerdefinierten Schnecken
- Weisen Sie der neuen Regel eine höhere Priorität zu als dem Slug des benutzerdefinierten Beitragstyps
So können Sie das machen:
function add_custom_rewrite_rule() {
// First, try to load up the rewrite rules. We do this just in case
// the default permalink structure is being used.
if( ($current_rules = get_option('rewrite_rules')) ) {
// Next, iterate through each custom rule adding a new rule
// that replaces 'movies' with 'films' and give it a higher
// priority than the existing rule.
foreach($current_rules as $key => $val) {
if(strpos($key, 'movies') !== false) {
add_rewrite_rule(str_ireplace('movies', 'films', $key), $val, 'top');
} // end if
} // end foreach
} // end if/else
// ...and we flush the rules
flush_rewrite_rules();
} // end add_custom_rewrite_rule
add_action('init', 'add_custom_rewrite_rule');
Jetzt haben Sie zwei Möglichkeiten, auf Ihre Filme zuzugreifen:
/movies/Back-To-The-Future
/films/Back-To-The-Future
Beachten Sie, dass ich nicht empfehle, die add_custom_rewrite_rule
in die init
Aktion einzuhängen, da sie zu häufig ausgelöst wird. Dies ist nur ein Beispiel. Ein besserer Ort, um die Funktion anzuwenden, ist die Themenaktivierung, die Plugin-Aktivierung, möglicherweise die Aktion save_post usw. Je nachdem, was Sie tun müssen, müssen Sie sie möglicherweise nur einmal oder nur ein paar Mal auslösen.
Möglicherweise möchten Sie an dieser Stelle die Permalinks für den benutzerdefinierten Beitragstyp für die Verwendung des /movies/
Slugs aktualisieren . Wenn Sie beispielsweise zu navigieren /films/
, werden alle Ihre Filme aufgelistet. Wenn Sie jedoch den Mauszeiger über den Titel bewegen, wird festgestellt, dass der /movies/
Slug noch verwendet wird.
Um noch einen Schritt weiter zu gehen, können Sie technisch eine 301-Umleitung einleiten, um alle Links zu erfassen und /movies/
zu ihrem /films/
Gegenüber umzuleiten. Dies hängt jedoch davon ab, was Sie tun möchten.