Tak, jest to możliwe, ale jeśli wtyczka tworzy niestandardowy typ postu za pomocą rewrite => array('slug' => 'post_type')parametru, prawdopodobnie nie będziesz w stanie wymienić ślimaka.
Za każdym razem, gdy tworzone są niestandardowe typy postów, do bazy danych zapisywane są reguły przepisywania adresów URL. W zależności od tego, która akcja wyzwala utworzenie niestandardowego typu postu (np. Akcja init ), WordPress opróżni reguły przepisywania i przywróci informacje o niestandardowym typie postu bez względu na to, jakie zmiany zamierzasz wprowadzić.
To powiedziawszy, możesz dostarczyć niestandardowe ślimaki dla niestandardowych typów postów. Poniższy przykład zakłada, że masz niestandardowy typ postu moviesi próbujesz zmienić /movies/ślimak na /films/.
Aby zakończyć, oto podstawowa funkcja używana do definiowania moviesniestandardowego typu 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 reguły niestandardowe w oparciu o istniejący typ postu.
Zasadniczo zrobimy to:
- Weź istniejący zestaw reguł, a następnie napisz własne z naszymi 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ć dwa sposoby na dostęp do swoich filmów:
/movies/Back-To-The-Future
/films/Back-To-The-Future
Zauważ, że nie polecam podpinania się add_custom_rewrite_ruledo initakcji, ponieważ będzie ona zbyt często strzelać. To tylko przykład. Lepszym miejscem do zastosowania tej funkcji jest 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ć aktualizację permalinków dla niestandardowego typu postu, aby użyć „ /movies/ślimaka ” . Na przykład, jeśli /films/przejdziesz do , zobaczysz listę wszystkich swoich filmów, ale najechanie kursorem na tytuł ujawni, że /movies/ślimak jest nadal używany.
Aby pójść o krok dalej, możesz technicznie zainicjować przekierowanie 301, aby złapać wszystkie linki /movies/do przekierowania do ich /films/odpowiednika, ale wszystko to zależy od tego, co próbujesz zrobić.