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 movies
i próbujesz zmienić /movies/
ślimak na /films/
.
Aby zakończyć, oto podstawowa funkcja używana do definiowania movies
niestandardowego 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_rule
do init
akcji, 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ć.