Cea mai bună metodă de redirecționare a categoriei către pagină și ascunderea categoriei

9 sept. 2014, 04:45:28
Vizualizări: 33.6K
Voturi: 7

Am o pagină de arhivă pentru categorie la: http://mysite.com/news

Aceasta afișează o arhivă de articole din categoria 'news-article'

Aș dori să redirecționez orice cerere pentru http://mysite.com/category/news-article către http://mysite.com/news (astfel încât prima adresă să nu fie niciodată accesibilă direct).

Care este cea mai bună practică? Ar trebui să pun o redirecționare 301 în fișierul .htaccess (sau să folosesc un plugin pentru același lucru)?

Sau ar trebui să folosesc wp_safe_redirect? Dacă da, ce hook de acțiune ar trebui să folosesc? Ca în:

add_action( 'WHICH_ACTION_HOOK??', 'adam_redirect_news' );
function adam_redirect_news () {
    // Dacă este categoria news-article
    if ( is_category( 'news-article' ) ) {

        wp_safe_redirect( 'http://mysite.com/news' );
        exit;
    }
}
0
Toate răspunsurile la întrebare 4
0

Nu știu din ce motiv, funcția add_filter a generat o eroare. Am folosit următorul cod:

function my_page_template_redirect()
{
    if ( is_category( 'news-articles' ) ) {
        $url = site_url( '/news' );
        wp_safe_redirect( $url, 301 );
        exit();
    }
}
add_action( 'template_redirect', 'my_page_template_redirect' );
17 mai 2017 08:43:07
2

Mulțumesc lui @Layka mai sus, am ajustat ușor codul și acum face exact ce aveam nevoie.

Poate fi orice filtru apelat în același moment - nu sunt sigur.

/**
 * Redirecționează categoria 'category/news-articles' către 'Pagina de știri' (la http://www.example.com/news' )
 *
 */
add_filter('template_redirect', 'template_redirect_filter', 10, 3);
function template_redirect_filter( $url, $term, $taxonomy ) {

    if ( is_category( 'news-articles' ) ) {

        $url = site_url( '/news' );

        wp_safe_redirect( $url, 301 );

        exit;

    }

    return $url;

}
10 sept. 2014 03:23:11
Comentarii

Cred că template_redirect ar fi cel mai potrivit hook în acest caz. Văd situații în care soluția ta ar putea duce la un comportament ciudat al site-ului... Hook-ul term_link cu siguranță nu ar trebui folosit pentru a declanșa redirecționări de URL.

Marek Marek
18 aug. 2015 15:12:46

template_redirect este (după părerea mea) cel mai bun hook pentru gestionarea redirecționărilor. De obicei, este ultimul hook înainte ca orice să fie trimis către browser, după care nu ai putea redirecționa fără erori. Dacă folosești un hook mai devreme, s-ar putea să nu ai acces la toate informațiile necesare pentru logică (cum ar fi verificarea categoriilor). De asemenea, este mai bine să folosești acțiuni pentru redirecționare, nu filtre. Filtrele sunt destinate returnării unei valori către procesul curent. Acțiunile sunt pentru a face ceva (cum ar fi redirecționarea).

butlerblog butlerblog
18 mar. 2019 15:21:44
1
/**
 * Redirecționează utilizatorii de pe paginile de categorie către pagina principală
 * Funcția verifică dacă utilizatorul se află pe o pagină de categorie
 * și îl redirecționează către URL-ul de bază al site-ului
 */
function template_category_template_redirect()
{
    if( is_category())
    {
        wp_redirect( site_url() );
        die;
    }
}
// Adaugă acțiunea la hook-ul template_redirect
add_action( 'template_redirect','template_category_template_redirect' );
18 mar. 2019 13:55:55
Comentarii

Deși văd că acesta este un răspuns la întrebare, este util (și adesea de dorit) să includeți o explicație cu privire la motivul pentru care este răspunsul corect/cel mai bun.

butlerblog butlerblog
18 mar. 2019 15:15:10
0

O altă posibilă metodă este să ai un șablon personalizat în Child-Theme-ul tău. Conform ierarhiei de șabloane WordPress, fișierul trebuie să se numească category-news-article.php.

În acest fișier poți face o redirecționare cu wp_safe_redirect. de exemplu:

<?php
wp_safe_redirect('/news', 301, '');

Cu această abordare, doar categoria news-article va fi redirecționată. Toate celelalte categorii continuă să funcționeze ca înainte. Această metodă poate fi utilă dacă dorești să redirecționezi fiecare categorie către o adresă URL diferită. Funcționează și cu tipurile personalizate de postări, dacă denumești șablonul conform ierarhiei WordPress (vezi linkul de mai sus).

9 mai 2022 13:38:53