Como obter URLs bonitas com add_query_arg nos permalinks

8

Com add_query_arg()isso, é bom adicionar parâmetros adicionais a uma URL e também é fácil criar uma regra de reescrita. Por enquanto, tudo bem. Mas o problema é a substituição da URL feita pelo wordpress.

Quando eu tenho um URL, como:

www.mysite.com/?page_id=1&myvar=test

e digito esse URL na linha de endereço do navegador com links permanentes ativados. Este link se tornará para:

www.example.com/pagename/?myvar=test

MAS : o que eu gostaria de obter é:

www.example.com/pagename/test

Finalmente, eu gostaria de usar código como:

<a href="<?php add_query_arg( 'myvar', 'test', get_permalink() ) ?>"> .... </a>

o que resultaria em:

www.example.com/pagename/test

Como isso pode ser alcançado? Passei horas lendo documentos e não consegui encontrar uma solução.

user3114592
fonte
1
Eu gostaria de saber como isso é feito. +1 na pergunta.
henrywright

Respostas:

5

Apenas enfrentou a mesma situação e tropeçou nessa pergunta enquanto pesquisava no Google.

Parece que isso não é possível. O próprio núcleo apenas anexa as strings ao URL se houver permalinks bastante ativados, consulte https://core.trac.wordpress.org/browser/tags/3.9.1/src/wp-includes/link-template.php#L571

Para qualquer pessoa interessada nisso: Você pode fazer algo assim no seu código:

if ( '' != get_option('permalink_structure') ) {
    // using pretty permalinks, append to url
    $read = user_trailingslashit( get_permalink() . 'test' ); // www.example.com/pagename/test
  } else {
    $read = add_query_arg( 'test', '', get_permalink() ); // www.example.com/pagename/?test
  }

Essa solução também foi recomendada por Jon Cave em um comentário no blog oficial do make: https://make.wordpress.org/plugins/2012/06/07/rewrite-endpoints-api/#comment-686

swissspidy
fonte
0

O WordPress não permitirá que você faça isso facilmente. Na verdade, as regras de reescrita são sua única opção para atingir esse tipo de coisa no WordPress, e as regras de reescrita do WordPress podem ficar muito complicadas quando o site cresce, porque plugins e temas (e você também) podem adicionar regras de reescrita personalizadas acima das regras existentes no seu (vários ) instalação do site.

A solução @swissspidy funcionará se você já tiver uma regra de reescrita para sua chave (myvar) e estiver usando permalinks na primeira condição e, em seguida, usar as seqüências de consulta tradicionais na ausência dessas condições. A solução @Johnathan Joosten mostra como as regras de reescrita podem se tornar muito muito complexas no WordPress (imagine fazer isso para todas as suas chaves e valores de string de consulta ...)

Eu encontrei esse problema algumas vezes antes, enquanto trabalhava em alguns projetos de tamanho médio para meus clientes, e consegui algo semelhante usando um plug-in chamado Obfusquer. Segundo o site, mascara todas as seqüências de consulta do WordPress com chaves secretas definidas pelo usuário e também fornece ganchos para requisitos personalizados avançados.

Engraçado, ele não está listado no repositório de plugins do WordPress, e acho que você precisará de uma assinatura (o que eu acho realmente acessível, pois uma única licença funcionará mesmo em instalações multisite), mas aqui está um link para isso, se você precisar mascarar / ocultar cadeias de consulta em instalações do WordPress. Eles também têm documentação aqui .

Agora eu uso o plugin em quase todos os meus projetos wordpress, espero que ajude suas necessidades. Felicidades.

Ramos Abdellaziz
fonte
-1

A solução do Wordpress seria adicionar regras de reescrita para criar algo assim:

    add_action( 'init', 'my_rewrite_add_rewrites' );
    function my_rewrite_add_rewrites()
    {
        add_rewrite_rule( 'calendar/([0-9]{4})/?$', 'index.php?post_type=events&year=$matches[1]', 'top' );
        add_rewrite_rule( 'calendar/([0-9]{4})/page/?([0-9]{1,})/?$', 'index.php?post_type=events&year=$matches[1]&paged=$matches[2]', 'top' );
    }

leia mais: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule

Jonathan Joosten
fonte
1
Você deveria ter feito mais complicado para downvote-lo ...
Vishal Kumar Sahu