PHP Использовать переменную, определенную в заголовке. php в другом файле - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь использовать геоплагин (этот код работает), но я могу воспользоваться sh, чтобы использовать вывод в нескольких местах. Из-за этого я взял код и добавил его в файл header. php и вызвал переменную в моей теме / inc / partials / header-contact. php. Но значение не отображается:

контакт заголовка. php

<div class="head-contact">
    <?php $details = get_field('options_company_details', 'options');
    global $telephoneNumber; global $telephoneLink;?>
    <span class="phone"><a href="tel:<?php echo $telephoneLink;?>" title="Call Us" onclick="myAjax();" class="gtagc2c"><span class="phone-mob"><i class="fa fa-phone"></i></span><span class="tnumber"></span><?php echo $telephoneNumber;?></a></span>
    <p class="tagline"><?php echo $details['options_tagline'];?></p>
</div>

заголовок. php

<?php include_once(get_stylesheet_directory_uri().'/inc/geolocation.php');?>

var_dump в заголовке контакта. php

NULL

var_dump в заголовке. php

NULL

геолокация. php

function getUserIP() {
    $client  = @$_SERVER['HTTP_CLIENT_IP'];
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
    $remote  = $_SERVER['REMOTE_ADDR'];

    if(filter_var($client, FILTER_VALIDATE_IP)){$ip = $client;}
    elseif(filter_var($forward, FILTER_VALIDATE_IP)){$ip = $forward; }
    else { $ip = $remote; } return $ip;
} $user_ip = getUserIP();

$details = get_field('options_company_details', 'options');
$telephoneNumber = $details['options_telephone'];

$getGeoArray = unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip='.$user_ip.''));

if(in_array($getGeoArray['geoplugin_city'], $lincolnshire)){$telephoneNumber = 'NUMBER';}
elseif(in_array($getGeoArray['geoplugin_city'], $rutland)){$telephoneNumber = 'NUMBER';}
elseif(in_array($getGeoArray['geoplugin_city'], $northamptonshire)){$telephoneNumber = 'NUMBER';}
elseif(in_array($getGeoArray['geoplugin_city'], $norfolk)){$telephoneNumber = 'NUMBER';}
elseif(in_array($getGeoArray['geoplugin_city'], $cambridgeshire)){$telephoneNumber = 'NUMBER';}
elseif(in_array($getGeoArray['geoplugin_city'], $buckinghamshire)){$telephoneNumber = 'NUMBER';}
elseif(in_array($getGeoArray['geoplugin_city'], $bedfordshire)){$telephoneNumber = 'NUMBER';}
elseif(in_array($getGeoArray['geoplugin_city'], $hertfordshire)){$telephoneNumber = 'NUMBER';}
elseif(in_array($getGeoArray['geoplugin_city'], $essex)){$telephoneNumber = 'NUMBER';}
elseif(in_array($getGeoArray['geoplugin_city'], $leicestershire)){$telephoneNumber = $details['options_telephone'];}
$telephoneLink = str_replace(' ', '', $telephoneNumber);

Я удалил переменные, используемые в in_array() только для сохранения длины вопроса.

var_dump в геолокации. php

NUMBER

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Это не проверено, но это может работать, если вызывается с wp_head или init. Это может привести к тому, что ключевое слово global будет работать в частях шаблона.

// functions.php

// load at wp_head
add_action('wp_head', function() {
    include_once(get_stylesheet_directory_uri().'/inc/geolocation.php');
});

// or

add_action('init', function() {
    include_once(get_stylesheet_directory_uri().'/inc/geolocation.php');
});

Тогда вам не нужно включать его в заголовочный файл или использовать сеансы.

0 голосов
/ 26 марта 2020

В итоге я использовал $_SESSION[], не совсем уверенный, что это лучший способ сделать это, но он работает, поэтому я счастлив:

$_SESSION['phonenumber'] = $telephoneNumber;
$_SESSION['phonenumberLink'] = $telephoneLink;

echo $_SESSION['phonenumber'];
echo $_SESSION['phonenumberLink'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...