funkcje – Ponownie zadeklaruj/zmień Slug niestandardowego typu postu wtyczki
Tak, jest to możliwe, ale jeśli wtyczka tworzy niestandardowy typ postu przy użyciu metody rewrite => array('slug' => 'post_type')
parametru, jest mało prawdopodobne, że będziesz w stanie to zrobić zastępować ślimak.
Za każdym razem, gdy tworzone są niestandardowe typy postów, reguły przepisywania adresów URL są zapisywane w bazie danych. W zależności od tego, która akcja wyzwala tworzenie niestandardowego typu posta (takiego jak akcja init), WordPress opróżni reguły przepisywania i przywróci ślimaki niestandardowego typu postu, niezależnie od tego, jakie zmiany spróbujesz wprowadzić.
To powiedziawszy, możesz zapewnić niestandardowe ślimaki dla niestandardowych typów postów. W poniższym przykładzie przyjęto założenie, że masz niestandardowy typ wpisu movies
i że próbujesz zmienić /movies/
sluchac do /films/
.
Aby być kompletnym, oto podstawowa funkcja używana do zdefiniowania movies
niestandardowy typ postu. Wtyczka, do której się odwołujesz, powinna robić coś takiego:
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');
Możesz zmodyfikować tabelę opcji, podając własne niestandardowe reguły w oparciu o istniejący typ postu.
Zasadniczo zrobimy to:
- Weź istniejący zestaw reguł, a następnie napisz własny z naszymi własnymi niestandardowymi ślimakami
- Nadaj nowej regule wyższy priorytet niż ślimak niestandardowego typu postu
Oto jak możesz to zrobić:
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');
Teraz będziesz mieć dostęp do swoich filmów na dwa sposoby:
/movies/Back-To-The-Future
/films/Back-To-The-Future
Pamiętaj, że nie polecam podłączania add_custom_rewrite_rule
do init
działania, ponieważ będzie strzelać zbyt często. To tylko przykład. Lepszym miejscem do zastosowania tej funkcji byłaby aktywacja motywu, aktywacja wtyczki, być może akcja save_post itp. W zależności od tego, co musisz zrobić, może być konieczne uruchomienie go tylko raz lub kilka razy.
W tym momencie możesz rozważyć zaktualizowanie linków bezpośrednich dla niestandardowego typu postu, aby używać „/movies/
ślimak. Na przykład, jeśli nawigujesz do /films/
zobaczysz listę wszystkich swoich filmów, ale najechanie kursorem na tytuł pokaże, że /movies/
ślimak jest nadal używany.
Aby pójść o krok dalej, możesz technicznie wprowadzić przekierowanie 301, aby przechwycić wszystkie linki do /movies/
przekierować do nich /films/
odpowiednik, ale wszystko zależy od tego, co próbujesz zrobić.