自定义全局变量在函数中不起作用

时间:2020-11-28 作者:tylorreimer

我已经被这个问题难住了一段时间,我一辈子都无法弄明白为什么我的函数不能引用我的全局变量。

$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>\';
}
Thereturn 底部有一个段落,用于返回变量,但显示为空。我能够使用基URL的唯一方法是将其用作函数参数并以这种方式传递。我错过了什么?

1 个回复
SO网友:tiago calado

我尝试使用此代码,对于if语句,我必须在代码之前放置一个全局$query\\u obj,我不知道是否是这样。

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;
}
这种方式似乎工作正常。在我的wordpress中,只返回null。但是,当在if的stations之前调用$global$query\\u obj时,全局变量$my\\u base\\u url工作正常。

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();
现在要测试这个函数,我至少需要$args、$items变量。。

如果在wp\\u config中将wp\\u debug设置为true。php应显示此错误

define( \'WP_DEBUG\', true );