Cómo obtener URLs bonitas con add_query_arg en enlaces permanentes

8

Con add_query_arg()esto es bueno agregar parámetros adicionales a una URL y también es fácil crear una regla de reescritura. Hasta aquí todo bien. Pero el problema es el reemplazo de URL realizado por WordPress.

Cuando tengo una URL, como:

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

y escribo esta URL en la línea de dirección del navegador con enlaces permanentes activados. Este enlace se convertirá en:

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

PERO : lo que me gustaría obtener es:

www.example.com/pagename/test

Finalmente, me gustaría usar código como:

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

lo que resultaría en:

www.example.com/pagename/test

¿Cómo se puede lograr esto? He pasado horas leyendo documentos y no pude encontrar una solución.

usuario3114592
fuente
1
Me gustaría saber cómo se hace esto. +1 a la pregunta.
henrywright

Respuestas:

5

Simplemente enfrenté la misma situación y tropecé con esta pregunta mientras buscaba en Google.

Parece que esto no es posible. Core mismo solo agrega cadenas a la URL si los enlaces permanentes están habilitados, consulte https://core.trac.wordpress.org/browser/tags/3.9.1/src/wp-includes/link-template.php#L571

Para cualquier persona interesada en esto: puede hacer algo como esto en su 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
  }

Jon Cave también recomendó esta solución en un comentario en el blog oficial de creación: https://make.wordpress.org/plugins/2012/06/07/rewrite-endpoints-api/#comment-686

swissspidy
fuente
0

WordPress no te permitirá hacer esto fácilmente. De hecho, las reglas de reescritura son su única opción para lograr este tipo de cosas en WordPress y las reglas de reescritura de WordPress pueden volverse realmente desordenadas cuando su sitio crece porque los complementos y temas (y usted también) pueden agregar reglas de reescritura personalizadas por encima de las reglas existentes en su (multi )sitio de instalación.

La solución @swissspidy funcionará si ya tiene una regla de reescritura para su clave (myvar) y está utilizando enlaces permanentes en la primera condición y luego recurre a las cadenas de consulta tradicionales en ausencia de esas condiciones. La solución @Johnathan Joosten muestra cómo las reglas de reescritura pueden volverse muy muy complejas en WordPress (imagínelo haciendo eso para todas sus claves y valores de cadena de consulta ...)

Encontré este problema varias veces antes mientras trabajaba en algunos proyectos medianos para mis clientes y pude lograr algo similar usando un complemento llamado Obfusquer. Según el sitio web, enmascara todas las cadenas de consulta de WordPress con claves secretas definidas por el usuario y también proporciona ganchos para requisitos personalizados avanzados.

Es curioso, no figura en el repositorio de complementos de WordPress, y creo que necesitará una suscripción (que creo que es realmente asequible ya que 1 licencia única funcionará incluso en la instalación multisitio), pero aquí hay un enlace si necesita enmascarar / ocultar cadenas de consulta en instalaciones de WordPress. También tienen documentación aquí .

Ahora uso el complemento en casi todos mis proyectos de WordPress, espero que ayude a sus necesidades. Salud.

Ramos Abdellaziz
fuente
-1

La solución de Wordpress sería agregar reglas de reescritura para hacer algo como esto:

    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' );
    }

Leer más: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule

Jonathan Joosten
fuente
1
Deberías haber hecho más complicado votarlo ...
Vishal Kumar Sahu