Pasar parámetros por URL en WordPress con URLs amigables

28 feb 2017, 02:48:32
Vistas: 18.1K
Votos: 1

Creé un shortcode así:

function test_func( $atts ) {   
    // Retorna el parámetro GET
    return $_GET['myvar'];
}
add_shortcode( 'test', 'test_func' );

y una página con el nombre "myparameters"

Así queda la URL final:

http://website.com/myparameters

Si pruebo esto funciona perfectamente:

http://website.com/myparameters/?myvar=elparametro

Pero me gustaría tener una URL bonita o amigable así:

http://website.com/myparameters/elparametro/

Pero muestra página no encontrada (404).

Probé algunos tutoriales como este enlace pero no funcionó.

2
Comentarios

esta respuesta funcionará para ti.

Milo Milo
28 feb 2017 04:06:59

@Milo bueno, investigué un poco más, si uso global $wp; $view = $wp->query_vars['myvar']; para obtener el parámetro y ahora funciona bien con add_rewrite_rule y devuelvo $view en la función del shortcode, dejaré el ejemplo completo cuando esté listo.

metalbox metalbox
28 feb 2017 04:16:09
Todas las respuestas a la pregunta 3
2

Estás formando una solicitud GET, es decir, ?var=1&var2=2 pero la has enviado como una solicitud POST. Necesitas enviar la solicitud como GET para que las variables aparezcan en la barra de direcciones como esperas que se muestren.

28 feb 2017 04:15:52
Comentarios

el ejemplo de enlace @milo son solo las respuestas que necesitamos usar global $wp; para obtener el valor así $wp->query_vars['myvar'];

metalbox metalbox
28 feb 2017 04:19:42

Entendí mal tu pregunta, pensé que querías saber por qué obtenías un formato frente a otro en la barra de URL. Me alegra que hayas encontrado una solución a tu problema.

Matt G Matt G
28 feb 2017 04:24:21
3

Este es el ejemplo completo, funciona muy bien con un parámetro, solo cambia el id por el de tu página.

function bartag_func( $atts ) { 
    global $wp;
    $view = $wp->query_vars['jp_stn'];
    return $view;
}
add_shortcode( 'bartag', 'bartag_func' );


function cdl_rewrite_rule(){
    add_rewrite_rule(
        'pronosticador/([-a-z]+)/?$',
        'index.php?page_id=52&jp_stn=$matches[1]',
        'top'
    );
}
add_action( 'init', 'cdl_rewrite_rule' );

function cdl_query_vars( $query_vars ){
    $query_vars[] = 'jp_stn';
    return $query_vars;
}
add_filter( 'query_vars', 'cdl_query_vars' );
28 feb 2017 04:24:24
Comentarios

@Milo ¿Qué opinas sobre esto? Es la forma correcta de obtener el valor con URLs amigables

metalbox metalbox
28 feb 2017 04:26:45

@kromosome ¿Qué opinas sobre esto? Es la forma correcta de obtener el valor con URLs amigables

metalbox metalbox
28 feb 2017 04:26:55

Nota: Vaciar los Permalinks

metalbox metalbox
28 feb 2017 04:39:17
0

Para lograr URLs bonitas con parámetros en WordPress, puedes utilizar las reglas de reescritura proporcionadas por WordPress junto con un endpoint personalizado o una regla de reescritura.

necesitas registrar una regla de rewrite personalizada para manejar la URL bonita. Agrega el siguiente código al archivo functions.php de tu tema

function custom_rewrite_rule() {
    add_rewrite_rule('^misparametros/([^/]+)/?', 'index.php?pagename=misparametros&mivariable=$matches[1]', 'top');
}
add_action('init', 'custom_rewrite_rule', 10);

function custom_query_vars($query_vars) {
    $query_vars[] = 'mivariable';
    return $query_vars;
}
add_filter('query_vars', 'custom_query_vars', 10, 1);

Después de agregar la regla de reescritura, necesitas actualizar las reglas de reescritura para que WordPress reconozca la nueva regla. Puedes hacer esto visitando la página "Ajustes" > "Enlaces permanentes" en el área de administración de WordPress

Actualiza tu función de shortcode para obtener el valor de mivariable de las variables de consulta en lugar de $_GET

function test_func($atts) {
    $mivariable = get_query_var('mivariable');
    return $mivariable;
}
add_shortcode('test', 'test_func');
28 feb 2024 15:18:05