Cómo pasar variables adicionales en URL con Wordpress
Estoy teniendo problemas al intentar pasar una variable adicional en la url a mi instalación de wordpress.
Por ejemplo /news?c=123
Por alguna razón, solo funciona en la raíz del sitio web www.example.com?c=123
pero no funciona si la url contiene más información www.example.com/news?c=123
. Tengo el siguiente código en mis funciones.archivo php en el directorio del tema.
if (isset($_GET['c']))
{
setcookie("cCookie", $_GET['c']);
}
if (isset($_SERVER['HTTP_REFERER']))
{
setcookie("rCookie", $_SERVER['HTTP_REFERER']);
}
¿Alguna Idea?
8 answers
Hay muy pocas soluciones para abordar este problema. Primero puedes ir por un plugin si quieres:
O código manualmente, echa un vistazo a esta publicación:
También echa un vistazo:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-03 17:52:23
Para hacer el viaje de ida y vuelta "a la manera de WordPress" en el "front-end" (no funciona en el contexto de wp-admin
), debe usar 3 funciones de WordPress:
- add_query_arg () - para crear la URL con su nueva variable de consulta ('c' en su ejemplo)
- el filtro query_vars - para modificar la lista de variables de consulta pública que WordPress conoce (esto solo funciona en el front-end, porque la consulta WP no se usa en el back-end -
wp-admin
- so esto tampoco estará disponible enadmin-ajax
) - get_query_var() - para recuperar el valor de su variable de consulta personalizada pasada en su URL.
Nota: no hay necesidad de tocar los superglobales ($_GET
) si lo haces de esta manera.
Ejemplo
En la página donde necesita crear el enlace / establecer la variable de consulta:
si se trata de un enlace a esta página, simplemente agregue la consulta variable
<a href="<?php echo esc_url( add_query_arg( 'c', $my_value_for_c ) )?>">
si es un enlace a alguna otra página
<a href="<?php echo esc_url( add_query_arg( 'c', $my_value_for_c, site_url( '/some_other_page/' ) ) )?>">
En sus funciones.php, o algún archivo plugin o clase personalizada (solo front-end):
function add_custom_query_var( $vars ){
$vars[] = "c";
return $vars;
}
add_filter( 'query_vars', 'add_custom_query_var' );
En la página / función donde desea recuperar y trabajar con el var de consulta establecido en su URL:
$my_c = get_query_var( 'c' );
En el extremo posterior (wp-admin
)
En el back-end nunca ejecutamos wp()
, por lo que la consulta WP principal no se ejecuta. Como resultado, no hay query vars
y el gancho query_vars
no se ejecuta.
En este caso, tendrá que volver al enfoque más estándar de examinar su $_GET
superglobal. La mejor manera de hacer esto es probablemente:
$my_c = filter_input( INPUT_GET, "c", FILTER_SANITIZE_STRING );
Aunque en un apuro podrías hacer lo probado y verdadero
$my_c = isset( $_GET['c'] ? $_GET['c'] : "";
O alguna variante del mismo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-19 19:57:28
Agregue el siguiente código en la función.php
add_filter( 'query_vars', 'addnew_query_vars', 10, 1 );
function addnew_query_vars($vars)
{
$vars[] = 'var1'; // var1 is the name of variable you want to add
return $vars;
}
Entonces podrás usar $_GET['var1']
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-03 17:52:17
Dado que esta es una publicación frecuentemente visitada, pensé en publicar mi solución en caso de que ayude a alguien. En WordPress, junto con el uso de vars de consulta, también puede cambiar los enlaces permanentes de esta manera
www.example.com?c=123 to www.example.com/c/123
Para esto hay que añadir estas líneas de código en funciones.php o su archivo base de plugin.
De shankhan anwer
add_filter( 'query_vars', 'addnew_query_vars', 10, 1 );
function addnew_query_vars($vars)
{
$vars[] = 'c'; // c is the name of variable you want to add
return $vars;
}
Y además esto se recortó para agregar reglas de reescritura personalizadas.
function custom_rewrite_basic()
{
add_rewrite_rule('^c/([0-9]+)/?', '?c=$1', 'top');
}
add_action('init', 'custom_rewrite_basic');
Para el caso en el que necesita agregar reescritura reglas para una página específica puede usar ese slug de página para escribir una regla de reescritura para esa página específica. Como en la pregunta que OP ha hecho sobre
www.example.com/news?c=123 to www.example.com/news/123
Podemos cambiarlo al comportamiento deseado agregando una pequeña modificación a nuestra función anterior.
function custom_rewrite_basic()
{
add_rewrite_rule('^news/([0-9]+)/?', 'news?c=$1', 'top');
}
add_action('init', 'custom_rewrite_basic');
Esperando que sea útil para alguien.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-13 05:24:01
<?php
$edit_post = add_query_arg('c', '123', 'news' );
?>
<a href="<?php echo $edit_post; ?>">Go to New page</a>
Puede agregar cualquier página en lugar de "noticias".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-09 12:05:11
Un problema que podría encontrar es que is_home()
devuelve true cuando un query_var registrado está presente en la URL de inicio. Por ejemplo, si http://example.com
muestra una página estática en lugar del blog, http://example.com/?c=123
devolverá el blog.
Véase https://core.trac.wordpress.org/ticket/25143 y https://wordpress.org/support/topic/adding-query-var-makes-front-page-missing / para más información sobre esto.
Lo que puede hacer (si no está intentando afectar la consulta) es usar add_rewrite_endpoint()
. Debería se ejecutará durante la acción init
ya que afecta a las reglas de reescritura. Eg.
add_action( 'init', 'add_custom_setcookie_rewrite_endpoints' );
function add_custom_setcookie_rewrite_endpoints() {
//add ?c=123 endpoint with
//EP_ALL so endpoint is present across all places
//no effect on the query vars
add_rewrite_endpoint( 'c', EP_ALL, $query_vars = false );
}
Esto debería darte acceso a $_GET['c']
cuando la url contenga más información como www.example.com/news?c=123
.
Recuerde limpiar sus reglas de reescritura después de agregar/modificar esto.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-19 06:30:54
Esta era la única manera en que podía hacer que esto funcionara
add_action('init','add_query_args');
function add_query_args()
{
add_query_arg( 'var1', 'val1' );
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-26 17:52:38
Para agregar parámetro a la url de post (al enlace perma), utilizo esto:
add_filter( 'post_type_link', 'append_query_string', 10, 2 );
function append_query_string( $url, $post )
{
return $url.'?my_pid='.$post->ID;
}
Salida:
http://yoursite.com/pagename?my_pid=12345678
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-01 14:00:19