2016-02-10 3 views
0

Переменная массива $selected_locations содержит значение TH, а строчная переменная $my_location установлена ​​в 'TH'.in_array Не работает внутри Функция

Я проверил это с помощью:

<?php 
$selected_locations = get_post_meta($item_id, 'locations', true); 
print_r($selected_locations); 
$user_location = geoip_detect2_get_info_from_current_ip(); 
$my_location = $user_location->country->isoCode; 
echo $my_location; 
?> 

Однако линия

if(in_array($user_country_code, $selected_locations, true)) 
     $visible = false; 

в функции ниже не работает.

function visibility_check($items, $menu, $args) { 
    $user_location = geoip_detect2_get_info_from_current_ip(); 
    $user_country_code = $user_location->country->isoCode; 
    $selected_locations = get_post_meta($item_id, 'locations', true); 
    $hidden_items = array(); 
    foreach($items as $key => $item) { 
     $item_parent = get_post_meta($item->ID, '_menu_item_menu_item_parent', true); 
     if(in_array($user_country_code, $selected_locations, true)) 
      $visible = false; 
     else 
      $visible = true; 
     if(! $visible || isset($hidden_items[$item_parent])) { // also hide the children of unvisible items 
      unset($items[$key]); 
      $hidden_items[$item->ID] = '1'; 
     } 
    } 

    return $items; 
} 

Если я назначу TH переменной массива $selected_locations вручную, она работает.

Любые предложения?

EDIT:

Я просто понял, что массив возвращает данные в функции ниже Array ([0] => 'TH'), но возвращается пустой в функции выше. Array ([0] =>)

function option($fields, $item_id) { 
ob_start(); ?> 
    <p class="field-visibility description description-wide"> 
     <label for="edit-menu-item-visibility-<?php echo $item_id; ?>"> 
      <?php _e('Enter country code(s) separated by commas') ?>: 
      <input 
      type="text" 
      class="widefat code" 
      id="edit-menu-item-visibility-<?php echo $item_id; ?>" 
      name="menu-item-visibility[<?php echo $item_id; ?>]" 
      value="<?php echo esc_html(get_post_meta($item_id, 'locations', true)); ?>" /></br> 
      <input 
      type="radio" 
      id="edit-menu-item-visibility-<?php echo $item_id;?>" 
      name="menu-item-show-hide[<?php echo $item_id; ?>]" 
      value="hide" <?php checked(get_post_meta($item_id, 'hide_show', true), 'hide', true); ?> 
      />Hide from these locations.</br> 
      <input 
      type="radio" 
      id="edit-menu-item-visibility-<?php echo $item_id; ?>" 
      name="menu-item-show-hide[<?php echo $item_id; ?>]" 
      value="show" <?php checked(get_post_meta($item_id, 'hide_show', true), 'show', true); ?> 
      />Only show to these locations.</br> 
      <?php 
      $locations_string = esc_html(get_post_meta($item_id, 'locations', true)); 
      $locations_array = explode(',', $locations_string); 
      $locations_array_trimmed = array_map('trim', $locations_array); 
      print_r($locations_array_trimmed); 
      $user_location = geoip_detect2_get_info_from_current_ip(); 
      $user_country_code = $user_location->country->isoCode; 
      echo $user_country_code; 
      ?> 
     </label> 
    </p> 
<?php 
$fields[] = ob_get_clean(); 
return $fields; 
} 
+1

Вы можете показать, как значения хранятся в $ selected_locations? – Qazi

+0

Добавить результат 'var_dump ($ selected_locations)' –

+0

var_dump выходы = строка (2) «TH» – j8d

ответ

0

я объявлял свои переменные из области видимости. Перестановка вещей немного исправила это.

function visibility_check($items, $menu, $args) { 
$hidden_items = array(); 
foreach($items as $key => $item) { 
    $user_location = geoip_detect2_get_info_from_current_ip(); 
    $user_country_code = $user_location->country->isoCode; 
    $selected_locations = get_post_meta($item_id, 'locations', true); 
    $item_parent = get_post_meta($item->ID, '_menu_item_menu_item_parent', true); 
    if(in_array($user_country_code, $selected_locations, true)) 
     $visible = false; 
    else 
     $visible = true; 
    if(! $visible || isset($hidden_items[$item_parent])) { // also hide the children of invisible items 
     unset($items[$key]); 
     $hidden_items[$item->ID] = '1'; 
    } 
} 

return $items; 
} 
Смежные вопросы