Mejor manera de redirigir categoría a página y ocultar categoría

9 sept 2014, 04:45:28
Vistas: 33.6K
Votos: 7

Tengo una página de archivo de categoría en: http://mysite.com/news

Muestra un archivo de elementos de la categoría 'news-article'

Me gustaría redirigir cualquier solicitud de http://mysite.com/category/news-article a http://mysite.com/news (para que la primera nunca sea directamente accesible).

¿Existe una mejor práctica? ¿Debería poner una redirección 301 en mi archivo .htaccess (o usar un plugin para hacer lo mismo)?

¿O debería usar wp_safe_redirect? Si es así, ¿qué gancho de acción debería usar? Como en:

add_action( 'WHICH_ACTION_HOOK??', 'adam_redirect_news' );
function adam_redirect_news () {
    // Si es la categoría 'news-article'
    if ( is_category( 'news-article' ) ) {

        wp_safe_redirect( 'http://mysite.com/news' );
        exit;
    }
}
0
Todas las respuestas a la pregunta 4
0

No sé por qué razón, el add_filter causó un error. Usé el siguiente código:

function my_page_template_redirect()
{
    if ( is_category( 'news-articles' ) ) { // Comprueba si es la categoría 'news-articles'
        $url = site_url( '/news' ); // Obtiene la URL del sitio con /news
        wp_safe_redirect( $url, 301 ); // Redirección 301 segura
        exit(); // Termina la ejecución
    }
}
add_action( 'template_redirect', 'my_page_template_redirect' ); // Añade la acción al hook template_redirect
17 may 2017 08:43:07
2

Gracias a @Layka mencionado anteriormente, ajusté ligeramente el código y esto hace lo que necesitaba.

Podría ser cualquier filtro llamado alrededor del mismo tiempo - no estoy seguro.

/**
 * Redirige la categoría 'category/news-articles' a la 'Página de noticias' (en 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
Comentarios

Creo que template_redirect sería el mejor hook en este caso. Veo situaciones donde tu solución podría llevar a comportamientos extraños del sitio web... El hook term_link definitivamente no debería usarse para activar redirecciones de URL.

Marek Marek
18 ago 2015 15:12:46

template_redirect es (en mi opinión) el mejor hook para manejar redirecciones. Generalmente es el último hook antes de que cualquier cosa se envíe al navegador, después del cual no podrías redirigir sin errores. Si usas un hook más temprano, podrías no tener acceso a toda la información necesaria para la lógica (como verificar categorías). Además, es mejor usar acciones para redirecciones, no filtros. Los filtros están diseñados para devolver un valor al proceso actual. Las acciones son para hacer algo (como una redirección).

butlerblog butlerblog
18 mar 2019 15:21:44
1
function template_category_template_redirect()
{
    // Redirige las páginas de categoría a la página de inicio
    if( is_category())
    {
        wp_redirect( site_url() );
        die; // Termina la ejecución
    }
}
// Añade la función al hook 'template_redirect'
add_action( 'template_redirect','template_category_template_redirect' );
18 mar 2019 13:55:55
Comentarios

Aunque puedo ver que esta es una respuesta a la pregunta, sería útil (y a menudo deseable) incluir alguna explicación sobre por qué es la respuesta correcta/mejor.

butlerblog butlerblog
18 mar 2019 15:15:10
0

Otra forma posible es tener una plantilla personalizada en tu Child-Theme. De acuerdo con la jerarquía de plantillas de WordPress, el archivo debe llamarse category-news-article.php.

En este archivo podrías hacer una redirección con wp_safe_redirect. Por ejemplo:

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

Con este enfoque solo se redirigirá la categoría news-article. Todas las demás categorías seguirán funcionando como antes. Esto puede ser útil si deseas apuntar cada categoría a una URL diferente. También funciona con tipos de contenido personalizados si nombras la plantilla según la jerarquía de WordPress (ver enlace anterior).

9 may 2022 13:38:53