¿Eliminar la categoría padre del enlace permanente? ¿Básicamente solo tener la categoría hija?

30 dic 2010, 00:03:12
Vistas: 18.4K
Votos: 10

Creo que antes existía un plugin obsoleto para hacer esto. ¿Hay alguna manera de hacerlo fácilmente con solo un poco de código? Preferimos no depender de un plugin ya que eso nos hace dependientes del desarrollador para mantenerlo actualizado.

Solo tenemos dos categorías padre que nos gustaría eliminar de todos los enlaces permanentes de sus categorías hijas: "items" y "genres" (así que podría adaptarse para eliminar solo dos IDs de categoría).

Vi que había una solución para los posts individuales aquí, pero no creo que esto funcione también con los enlaces permanentes de categorías, ¿verdad?

0
Todas las respuestas a la pregunta 1
3

Este código básicamente hace el trabajo para esta pregunta y otra sobre eliminar la base /category/ de los permalinks. Lo obtuve de un plugin que hace esto y decidí usar el código directamente.

Así que los permalinks solo muestran la categoría hija más baja.

Primero, teníamos:

example.com/category/items/books/

y ahora...

example.com/books

Sin embargo, los feeds RSS no parecen funcionar con esta URL más corta y aún requieren la URL larga. (No estoy seguro si hay una solución para eso). Además, no cambia el permalink de las entradas. Solo cambia el permalink de la categoría. Pega el código a continuación en tu archivo functions.php. Estoy usando WordPress 3.0+.

// Eliminar la base de categoría
add_filter('category_link', 'no_category_parents',1000,2);
function no_category_parents($catlink, $category_id) {
    $category = &get_category( $category_id );
    if ( is_wp_error( $category ) )
        return $category;
    $category_nicename = $category->slug;

    $catlink = trailingslashit(get_option( 'home' )) . user_trailingslashit( $category_nicename, 'category' );
    return $catlink;
}

// Añadir nuestras reglas de reescritura de categorías personalizadas
add_filter('category_rewrite_rules', 'no_category_parents_rewrite_rules');
function no_category_parents_rewrite_rules($category_rewrite) {
    //print_r($category_rewrite); // Para depuración

    $category_rewrite=array();
    $categories=get_categories(array('hide_empty'=>false));
    foreach($categories as $category) {
        $category_nicename = $category->slug;
        $category_rewrite['('.$category_nicename.')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?category_name=$matches[1]&feed=$matches[2]';
        $category_rewrite['('.$category_nicename.')/page/?([0-9]{1,})/?$'] = 'index.php?category_name=$matches[1]&paged=$matches[2]';
        $category_rewrite['('.$category_nicename.')/?$'] = 'index.php?category_name=$matches[1]';
    }
    // Soporte de redirección desde la antigua base de categoría
    global $wp_rewrite;
    $old_base = $wp_rewrite->get_category_permastruct();
    $old_base = str_replace( '%category%', '(.+)', $old_base );
    $old_base = trim($old_base, '/');
    $category_rewrite[$old_base.'$'] = 'index.php?category_redirect=$matches[1]';

    //print_r($category_rewrite); // Para depuración
    return $category_rewrite;
}

// Añadir la variable de consulta 'category_redirect'
add_filter('query_vars', 'no_category_parents_query_vars');
function no_category_parents_query_vars($public_query_vars) {
    $public_query_vars[] = 'category_redirect';
    return $public_query_vars;
}
// Redirigir si 'category_redirect' está establecido
add_filter('request', 'no_category_parents_request');
function no_category_parents_request($query_vars) {
    //print_r($query_vars); // Para depuración
    if(isset($query_vars['category_redirect'])) {
        $catlink = trailingslashit(get_option( 'home' )) . user_trailingslashit( $query_vars['category_redirect'], 'category' );
        status_header(301);
        header("Location: $catlink");
        exit();
    }
    return $query_vars;
}
30 dic 2010 00:53:59
Comentarios

¡Realmente aprecio esta respuesta ya que estuve buscando por más de 2 horas! Compartí esto con los chicos de wordpress.org ya que espero que pueda ayudar a otros. http://wordpress.org/support/topic/perfect-permalink-possible?replies=4#post-2214102

User User
11 jul 2011 03:02:21

Esto cambió la URL pero dio un error de página no encontrada. :(

Debsmita Paul Debsmita Paul
1 sept 2020 13:39:45