WordPress

WP dodaje -2 na końcu mojego slug. Gdzie są przechowywane oryginały, abym mógł je usunąć?

  • 12 września, 2012
  • 3 min read
WP dodaje -2 na końcu mojego slug. Gdzie są przechowywane oryginały, abym mógł je usunąć?


Udało mi się to uruchomić. Używałem numerycznych ślimaków dla niestandardowych typów postów (CPT), ale automatycznie otrzymywały one sufiks -2. Na przykład example/test/2 był przekształcany w example/test/2-2. Po pewnych badaniach i testach udało mi się rozwiązać ten problem, zachowując jednocześnie względy SEO. Oto rozwiązanie, które wdrożyłem:

Rozwiązanie

Oto kod, którego użyłem do obsługi numerycznych ślimaków w niestandardowych typach wpisów bez dodawania sufiksu -2:

function create_example_cpt() {
    $labels = array(
        'name' => 'Example',
        'singular_name' => 'Example',
        'add_new' => 'Add New',
        'add_new_item' => 'Add New Item',
        'edit_item' => 'Edit Item',
        'new_item' => 'New Item',
        'all_items' => 'All Items',
        'view_item' => 'View Item',
        'search_items' => 'Search Items',
        'not_found' => 'No items found',
        'not_found_in_trash' => 'No items found in Trash',
        'parent_item_colon' => 'Parent Item:',
        'menu_name' => 'Example'
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'hierarchical' => true,
        'supports' => array('title', 'editor', 'page-attributes'),
        'rewrite' => array(
            'slug' => 'example',
            'with_front' => false,
            'hierarchical' => true
        ),
        'has_archive' => true,
        'menu_position' => 5,
        'show_in_rest' => true,
    );

    register_post_type('example', $args);
}
add_action('init', 'create_example_cpt');


function custom_unique_slug($slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug) {
    global $wpdb;

    // Check only 'example' CPT and numeric slugs
    if ( 'example' != $post_type || ! is_numeric( $original_slug ) || $slug === $original_slug ) {
        return $slug;
    }

    // Search for existing slugs to avoid conflicts
    $post_name_check = $wpdb->get_var( $wpdb->prepare(
        "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND ID != %d AND post_parent = %d LIMIT 1",
        $original_slug, $post_type, $post_ID, $post_parent
    ) );

    // If there are no conflicts, return the original slug
    if ( ! $post_name_check ) {
        return $original_slug;
    }

    // Otherwise, return the slug with the suffix
    return $slug;
}
add_filter( 'wp_unique_post_slug', 'custom_unique_slug', 10, 6 );

function custom_rewrite_rules($rules) {
    $new_rules = array(
        'example/([^/]+)/([^/]+)/?$' => 'index.php?post_type=example&name=$matches[2]',
        'example/([^/]+)/?$' => 'index.php?post_type=example&name=$matches[1]',
    );
    return $new_rules + $rules;
}
add_filter('rewrite_rules_array', 'custom_rewrite_rules');

Wyjaśnienie

  • create_example_cpt: Rejestruje niestandardowy typ wpisu ze wsparciem hierarchicznym. Dostosuj tę funkcję do swoich konkretnych potrzeb.
  • custom_unique_slug: Zapewnia, że ​​numeryczne ślimaki zostaną zapisane bez sufiksu, jeśli nie wykryto żadnych konfliktów.
  • custom_rewrite_rules: Dodaje niestandardowe reguły przepisywania w celu obsługi pożądanej struktury adresu URL.
Warto przeczytać!  Witamy Groove w funduszu wzrostu WPBeginner

Notatki

  • Pamiętaj o odświeżeniu linków trwałych po dodaniu tego kodu, aby mieć pewność, że nowe reguły przepisywania zostaną zastosowane.

Dzięki temu rozwiązaniu moje podrzędne CPT nie otrzymają sufiksu example/test/2-2, ale zostaną zapisane jako example/test/2/. Będą również działać poprawnie i będą wyświetlane zgodnie z oczekiwaniami w mapach witryn.


Źródło