WordPress

funkcje – Ponownie zadeklaruj/zmień Slug niestandardowego typu postu wtyczki

  • 11 lutego, 2012
  • 3 min read
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.

Warto przeczytać!  rozwój motywu - lokalizacja JavaScript nie ładuje się. Jak umiędzynarodowić javascript bez wtyczki?

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.

Warto przeczytać!  Automatycznie zwiększ bezpieczeństwo hostingu witryn WordPress dzięki nowemu narzędziu Block XML-RPC

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ć.


Źródło