Suporte » Ajustando o WordPress » Link permanente condicional pra categoria específica

  • Olá,

    Procurei e testei vários plugins, sem resultado positivo, para o seguinte caso: Manter os links permanentes como definido em Configurações para todos os posts exceto para aqueles que estiverem numa categoria específica.

    Encontrei esta receita de bolo no Stack Exchange: https://wordpress.stackexchange.com/a/168854

    Com base nela, editei para o permalink que eu quero, somente o nome da categoria e o nome do post (sem o ano como está na receita acima):

    `/* BEGIN CONDITIONAL PERMALINK FOR CATEGORY ENGLISH (49)

    remove_filter(‘template_redirect’, ‘redirect_canonical’);

    function custom_permalink( $permalink, $post ) {
    // Get the categories for the post
    $post = get_post( $post_id );
    $category = get_the_category( $post_id );
    $post_year = mysql2date(“Y”, $post->post_date);
    $target_cat = 49; // Category we’d like to change permalink for

    if ( empty( $post_year ) ) return $permalink;

    if ( $category[0]->cat_ID == $target_cat ) {
    $permalink = trailingslashit( home_url( $category[0]->slug . ‘/’ .$post->post_name . ‘/’ ) );
    }

    return $permalink;
    }

    add_filter( ‘post_link’, ‘custom_permalink’, 10, 2 );

    // END OF CONDITIONAL PERMALINK */`

    Deu certo enquanto permalink:

    https://example.com/categoria-especifica/nome-do-post/

    Porém a página continua sendo gerada com o slug padrão:

    https://example.com/nome-do-post/

    o que resulta em 404 quando eu clico em qualquer desses permalinks condicionais.

    O que eu poderia adicionar na receita acima para corrigir isso?

    Aceito também sugestão de algum plugin que faça a mágica (até prefiro). Já tentei sem sucesso:

    Custom Permalinks
    Permalinks Customizer
    Advanced Permalinks

    Agradeço toda ajuda!

Visualizando 2 respostas - 1 até 2 (de um total de 2)
  • Everaldo Matias

    (@everaldomatias)

    @cbrandt você poderia nos dar um exemplo prático do que precisa solucionar?

    Olá Everaldo, obrigado pelo interesse em ajudar!

    O que eu quero é que o site tenha como link permanente padrão o /nome-do-post/, mas um link permanente /slug-da-categoria/nome-do-post/ somente para os posts de duas categorias específicas.

    Depois de consultar este outro post no WP.org, eu adaptei e alterei o código como segue:

    // evita redirecionamento automático do WP
    remove_filter('template_redirect', 'redirect_canonical');
    
    add_filter( 'post_link', 'custom_permalink', 10, 2 );
    
    function custom_permalink( $link, $post ) {
    
    if ( in_category( '49' ) ) {
            $link = trailingslashit( home_url( '/en/' .$post->post_name . '/'  ) );
        }
    	else if ( in_category( '52' ) ) {
    		$link = trailingslashit( home_url( '/es/' .$post->post_name . '/'  ) );
    	}
        return $link;
    }
    
    add_action( 'init', 'conditional_permalink_rewrite_rule', 5);
    
    function conditional_permalink_rewrite_rule() {
    		if ( in_category( '49' )) {
    		add_rewrite_rule( '^en/([^/]+)/?', 'index.php?page_id=$matches[1]&name=matches[1]', 'top' ); }
    		elseif ( in_category( '52' )) {
    		add_rewrite_rule( '^es/([^/]+)/?', 'index.php?page_id=$matches[1]&name=matches[1]', 'top' ); }
    }

    O código funciona e gera os links na página com o prefixo da categoria /en/ ou /es/, mas resulta em 404. Se eu removo esse slug de categoria e tento somente o /nome-do-post/, o post aparece.

    • Esta resposta foi modificada 22 hours, 55 minutes atrás por  CB.
Visualizando 2 respostas - 1 até 2 (de um total de 2)
  • Você deve estar conectado para responder a este tópico.