I've been stumped on this for a while and cannot for the life of me figure out why my function isn't able to reference my global variable.
$query_obj = get_queried_object();
if ( is_a($query_obj, 'WP_Term') ) {
$my_base_url = get_term_link($query_obj);
} elseif ( is_a($query_obj, 'WP_Post') ) {
$my_base_url = get_permalink();
} else {
$my_base_url = null;
}
function getDropdown($args, $items, $all=false) {
global $my_base_url;
if (isset($_GET[$args])) {
$check = $_GET[$args];
} else {
$check = null;
}
$output = '<ul class="dropdown ' . $args . '">';
if ($all == true) {
$output .= '<li class="' . ($check == null ? 'active' : null) . '"><a href="' . remove_query_arg( $args, add_query_arg( null, null ) ) . '">All</a></li>';
}
foreach ($items as $key => $value) {
$output .= '<li' . ($check == $value ? ' class="active"' : null) .'><a href="' . esc_url( add_query_arg( $args, $value ) ) . '">' . $key . '</a></li>';
}
$output .= '</ul>';
return $output . '<p>' . $my_base_url . '</p>';
}
The return
at the bottom just has a paragraph tacked out to return the variable but it shows up blank. The only way I've been able to use the base URL was by using it as a function argument and passing it that way. What am I missing?
I've been stumped on this for a while and cannot for the life of me figure out why my function isn't able to reference my global variable.
$query_obj = get_queried_object();
if ( is_a($query_obj, 'WP_Term') ) {
$my_base_url = get_term_link($query_obj);
} elseif ( is_a($query_obj, 'WP_Post') ) {
$my_base_url = get_permalink();
} else {
$my_base_url = null;
}
function getDropdown($args, $items, $all=false) {
global $my_base_url;
if (isset($_GET[$args])) {
$check = $_GET[$args];
} else {
$check = null;
}
$output = '<ul class="dropdown ' . $args . '">';
if ($all == true) {
$output .= '<li class="' . ($check == null ? 'active' : null) . '"><a href="' . remove_query_arg( $args, add_query_arg( null, null ) ) . '">All</a></li>';
}
foreach ($items as $key => $value) {
$output .= '<li' . ($check == $value ? ' class="active"' : null) .'><a href="' . esc_url( add_query_arg( $args, $value ) ) . '">' . $key . '</a></li>';
}
$output .= '</ul>';
return $output . '<p>' . $my_base_url . '</p>';
}
The return
at the bottom just has a paragraph tacked out to return the variable but it shows up blank. The only way I've been able to use the base URL was by using it as a function argument and passing it that way. What am I missing?
I try to use this code and for the if statments I had to put a global $query_obj before the code, I do not know if is the case.
global $query_obj;
if ( is_a($query_obj, 'WP_Term') ) {
$my_base_url = get_term_link($query_obj);
} elseif ( is_a($query_obj, 'WP_Post') ) {
$my_base_url = get_permalink();
} else {
$my_base_url = null;
}
this seems to be working properly this way. In my wordpress only returns null. but the global variable $my_base_url is working fine when whe call $global $query_obj before the if's statments.
global $query_obj;
if ( is_a($query_obj, 'WP_Term') ) {
$my_base_url = get_term_link($query_obj);
} elseif ( is_a($query_obj, 'WP_Post') ) {
$my_base_url = get_permalink();
} else {
$my_base_url = 'its null';
}
function ti(){
global $my_base_url;
echo '<pre>';
print_r($my_base_url);
echo '</pre>';
}
ti();
Now to test the function I will need the $args , $items variables at least..
If you have the wp_debug set to true in wp_config.php this error should appear
define( 'WP_DEBUG', true );
global
both when defining/setting the variable as well as when reading its value, e.g.global $var; $var = 'foo';
in a function andglobal $var; echo $var;
in another function. But your question is off-topic here and better suited at Stack Overflow.. – Sally CJ Commented Nov 28, 2020 at 18:03global
on the variable initially and in the function fixed it. Looking at other examples online it doesn't seem like you normally have to addglobal
initially so it seems odd but at least it's working so thank you. – tylorreimer Commented Nov 29, 2020 at 3:17global
if you're not already in the global scope when setting the variable just as the sample contexts, i.e. two different functions. Alternatively, you can use the array notation:$GLOBALS['var'] = 'foo'
and there'd be no need for theglobal
call. But as I pointed, these "global" stuff are generic PHP programming and not WP-specific - WP does not do anything that would prevent one from reading/setting a global variable. And perhaps, it's better if you just pass the variable to the function? – Sally CJ Commented Nov 29, 2020 at 3:42