WordPress

Usuń ślimak z niestandardowych adresów URL postów typu post

  • 28 września, 2015
  • 4 min read
Usuń ślimak z niestandardowych adresów URL postów typu post


Przeglądając odpowiedzi tutaj, myślę, że jest miejsce na lepsze rozwiązanie, które łączy w sobie pewne rzeczy, których nauczyłem się powyżej i dodaje automatyczne wykrywanie i zapobieganie duplikatom wiadomości.

UWAGA: Upewnij się, że w całym moim przykładzie zmieniłeś „custom_post_type” na własną nazwę CPT. Wystąpień jest wiele, a polecenie „znajdź/zamień” to łatwy sposób na wyłapanie ich wszystkich. Cały ten kod można umieścić w plikufunctions.php lub we wtyczce.

Krok 1: Wyłącz przepisywanie niestandardowego typu posta, ustawiając przepisywanie na „false” podczas rejestracji posta:

register_post_type( 'custom_post_type',
    array(
        'rewrite' => false
    )
);

Krok 2: Ręcznie dodaj nasze niestandardowe przeróbki do pliku spód przepisywania WordPressa dla naszego niestandardowego_post_type

function custom_post_type_rewrites() {
    add_rewrite_rule( '[^/]+/attachment/([^/]+)/?$', 'index.php?attachment=$matches[1]', 'bottom');
    add_rewrite_rule( '[^/]+/attachment/([^/]+)/trackback/?$', 'index.php?attachment=$matches[1]&tb=1', 'bottom');
    add_rewrite_rule( '[^/]+/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$', 'index.php?attachment=$matches[1]&feed=$matches[2]', 'bottom');
    add_rewrite_rule( '[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$', 'index.php?attachment=$matches[1]&feed=$matches[2]', 'bottom');
    add_rewrite_rule( '[^/]+/attachment/([^/]+)/comment-page-([0-9]{1,})/?$', 'index.php?attachment=$matches[1]&cpage=$matches[2]', 'bottom');
    add_rewrite_rule( '[^/]+/attachment/([^/]+)/embed/?$', 'index.php?attachment=$matches[1]&embed=true', 'bottom');
    add_rewrite_rule( '([^/]+)/embed/?$', 'index.php?custom_post_type=$matches[1]&embed=true', 'bottom');
    add_rewrite_rule( '([^/]+)/trackback/?$', 'index.php?custom_post_type=$matches[1]&tb=1', 'bottom');
    add_rewrite_rule( '([^/]+)/page/?([0-9]{1,})/?$', 'index.php?custom_post_type=$matches[1]&paged=$matches[2]', 'bottom');
    add_rewrite_rule( '([^/]+)/comment-page-([0-9]{1,})/?$', 'index.php?custom_post_type=$matches[1]&cpage=$matches[2]', 'bottom');
    add_rewrite_rule( '([^/]+)(?:/([0-9]+))?/?$', 'index.php?custom_post_type=$matches[1]', 'bottom');
    add_rewrite_rule( '[^/]+/([^/]+)/?$', 'index.php?attachment=$matches[1]', 'bottom');
    add_rewrite_rule( '[^/]+/([^/]+)/trackback/?$', 'index.php?attachment=$matches[1]&tb=1', 'bottom');
    add_rewrite_rule( '[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$', 'index.php?attachment=$matches[1]&feed=$matches[2]', 'bottom');
    add_rewrite_rule( '[^/]+/([^/]+)/(feed|rdf|rss|rss2|atom)/?$', 'index.php?attachment=$matches[1]&feed=$matches[2]', 'bottom');
    add_rewrite_rule( '[^/]+/([^/]+)/comment-page-([0-9]{1,})/?$', 'index.php?attachment=$matches[1]&cpage=$matches[2]', 'bottom');
    add_rewrite_rule( '[^/]+/([^/]+)/embed/?$', 'index.php?attachment=$matches[1]&embed=true', 'bottom');
}
add_action( 'init', 'custom_post_type_rewrites' );

UWAGA: W zależności od potrzeb możesz zmodyfikować powyższe przeróbki (wyłączyć trackbacki? kanały informacyjne? itp.). Reprezentują one „domyślne” typy przepisywania, które zostałyby wygenerowane, jeśli nie wyłączyłeś przepisywania w kroku 1

Krok 3: Utwórz ponownie linki bezpośrednie do niestandardowego wpisu, wpisz „ładny”.

function custom_post_type_permalinks( $post_link, $post, $leavename ) {
    if ( isset( $post->post_type ) && 'custom_post_type' == $post->post_type ) {
        $post_link = home_url( $post->post_name );
    }

    return $post_link;
}
add_filter( 'post_type_link', 'custom_post_type_permalinks', 10, 3 );

UWAGA: Możesz zatrzymać się w tym miejscu, jeśli nie martwisz się, że Twoi użytkownicy utworzą sprzeczny (zduplikowany) post w innym typie postu, co spowoduje sytuację, w której tylko jeden z nich będzie mógł załadować się, gdy strona zostanie zażądana.

Krok 4: Zapobiegaj duplikacjom wiadomości

function prevent_slug_duplicates( $slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug ) {
    $check_post_types = array(
        'post',
        'page',
        'custom_post_type'
    );
    
    if ( ! in_array( $post_type, $check_post_types ) ) {
        return $slug;
    }

    if ( 'custom_post_type' == $post_type ) {
        // Saving a custom_post_type post, check for duplicates in POST or PAGE post types
        $post_match = get_page_by_path( $slug, 'OBJECT', 'post' );
        $page_match = get_page_by_path( $slug, 'OBJECT', 'page' );

        if ( $post_match || $page_match ) {
            $slug .= '-duplicate';
        }
    } else {
        // Saving a POST or PAGE, check for duplicates in custom_post_type post type
        $custom_post_type_match = get_page_by_path( $slug, 'OBJECT', 'custom_post_type' );

        if ( $custom_post_type_match ) {
            $slug .= '-duplicate';
        }
    }

    return $slug;
}
add_filter( 'wp_unique_post_slug', 'prevent_slug_duplicates', 10, 6 );

UWAGA: Spowoduje to dodanie ciągu „-duplicate” na końcu wszelkich zduplikowanych ślimaków. Ten kod nie może zapobiec duplikacjom ślimaków, jeśli już istniały przed wdrożeniem tego rozwiązania. Najpierw sprawdź, czy nie ma duplikatów.

Chętnie wysłucham opinii innych osób, które wypróbowały tę metodę, aby sprawdzić, czy u nich również się sprawdziło.

Warto przeczytać!  paypal — Jak mogę skonfigurować LINE Pay jako metodę płatności w mojej witrynie WordPress połączonej z moim kontem bankowym?


Źródło