I am having trouble trying to pass an extra variable in the url to my wordpress installation.
For example /news?c=123
For some reason, it works only on the website root www.example.com?c=123
but it does not work if the url contains any more information www.example.com/news?c=123
. I have the following code in my functions.php file in the theme directory.
if (isset($_GET['c']))
{
setcookie("cCookie", $_GET['c']);
}
if (isset($_SERVER['HTTP_REFERER']))
{
setcookie("rCookie", $_SERVER['HTTP_REFERER']);
}
Any Ideas?
to add parameter to post url (to perma link), i use this:
output:
http://yoursite.com/pagename?my_pid=12345678
To make the round trip "The WordPress Way" on the "front-end" (doesn't work in the context of
wp-admin
), you need to use 3 WordPress functions:wp-admin
- so this will also not be available inadmin-ajax
)Note: there's no need to even touch the superglobals (
$_GET
) if you do it this way.Example
On the page where you need to create the link / set the query variable:
if it's a link back to this page, just adding the query variable
<a href="<?php echo esc_url( add_query_arg( 'c', $my_value_for_c ) )?>">
if it's a link to some other page
<a href="<?php echo esc_url( add_query_arg( 'c', $my_value_for_c, site_url( '/some_other_page/' ) ) )?>">
In your functions.php, or some plugin file or custom class (front-end only):
On the page / function where you wish to retrieve and work with the query var set in your URL:
$my_c = get_query_var( 'c' );
On the Back End (
wp-admin
)On the back end we don't ever run
wp()
, so the main WP Query does not get run. As a result, there are noquery vars
and thequery_vars
hook is not run.In this case, you'll need to revert to the more standard approach of examining your
$_GET
superglobal. The best way to do this is probably:$my_c = filter_input( INPUT_GET, "c", FILTER_SANITIZE_STRING );
though in a pinch you could do the tried and true
$my_c = isset( $_GET['c'] ? $_GET['c'] : "";
or some variant thereof.