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?
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..global
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.global
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?