Rimuovere la categoria genitore dal permalink? Mantenere solo la categoria figlia?

30 dic 2010, 00:03:12
Visualizzazioni: 18.4K
Voti: 10

Penso che esistesse un plugin obsoleto per fare questo. C'è un modo per farlo facilmente con un po' di codice? Preferiamo non affidarci a un plugin perché ci renderebbe dipendenti dallo sviluppatore per mantenerlo aggiornato.

Abbiamo solo due categorie genitore che vorremmo rimuovere da tutti i permalink delle loro sottocategorie: "items" e "genres" (quindi potrebbe essere personalizzato per rimuovere solo due ID di categoria)

Ho visto che esisteva una soluzione per i singoli post qui, ma non credo che funzioni anche con i permalink delle categorie, vero?

0
Tutte le risposte alla domanda 1
3

Questo codice fa praticamente il lavoro per questa domanda e un'altra riguardante la rimozione della base /category/ dai permalink. L'ho preso da un plugin che fa questo, e ho deciso di usare direttamente il codice.

Quindi i permalink mostrano solo la categoria figlia più bassa nell'albero.

Prima avevamo:

example.com/category/items/books/

e ora...

example.com/books

Tuttavia, i feed RSS non sembrano funzionare con questo URL abbreviato, e richiedono ancora l'URL completo. (Non sono sicuro se ci sia una soluzione per questo.) Inoltre, non cambia il permalink degli articoli. Cambia solo il permalink delle categorie. Incolla il codice qui sotto nel tuo file functions.php. Sto usando WordPress 3.0+.

// Rimuove la base delle categorie
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;
}

// Aggiunge le nostre regole personalizzate di riscrittura per le categorie
add_filter('category_rewrite_rules', 'no_category_parents_rewrite_rules');
function no_category_parents_rewrite_rules($category_rewrite) {
    //print_r($category_rewrite); // Per debug

    $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]';
    }
    // Supporto per il reindirizzamento dalla vecchia base delle categorie
    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); // Per debug
    return $category_rewrite;
}

// Aggiunge la variabile di query '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;
}
// Reindirizza se 'category_redirect' è impostato
add_filter('request', 'no_category_parents_request');
function no_category_parents_request($query_vars) {
    //print_r($query_vars); // Per debug
    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
Commenti

Apprezzo davvero questa risposta, stavo cercando per più di 2 ore! L'ho condivisa con i ragazzi di wordpress.org perché spero possa aiutare altri! http://wordpress.org/support/topic/perfect-permalink-possible?replies=4#post-2214102

User User
11 lug 2011 03:02:21

qualcosa di simile funzionerebbe anche per le pagine? http://wordpress.stackexchange.com/questions/173048/does-a-parent-pages-post-title-have-to-appear-in-a-child-page-permalink

codecowboy codecowboy
23 dic 2014 10:17:15

Questo ha cambiato l'URL ma ha dato un errore di pagina non trovata. :(

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