Я пишу функцию PHP для поиска по массиву массив почтовых индексов в файле шаблона Wordpress. Почему моя функция не возвращает значение?
Цель функции прямо сейчас состоит в том, чтобы перебрать несколько разделенных запятыми списков почтовых индексов (расширенное настраиваемое поле zip_codes_serviced) и сопоставить его с определенным почтовым индексом (33606 для целей тестирования). При совпадении функция должна напечатать поле города и штата, связанное с этим почтовым индексом. В этом случае Тампа, штат Флорида. Смотрите функцию ниже:
function zip_search($userZip){
$posts = get_posts(array(
'posts_per_page' => -1,
'post_type' => 'Location'
));
if( $posts ):
foreach( $posts as $post ):
$zipField=get_field('zip_codes_serviced');
//echo $zipField;
$zipString = $zipField . ', ';
//echo $zipArray;
$array = explode(', ' , $zipString); //split string into array seperated by ', '
foreach($array as $value) //loop over values
{
$cityField=get_field('city');
$stateField=get_field('state');
if($value==$userZip){
return ($cityField . '<br>' . $stateField);
}
}
endforeach;
wp_reset_postdata();
endif;
}
Затем я вызываю функцию следующим образом:
zip_search(33606);
Я тоже попробовал вот так:
function zip_search(){
$posts = get_posts(array(
'posts_per_page' => -1,
'post_type' => 'Location'
));
//Set user zip to 33606 for testing purposes
$userZip=33606;
if( $posts ):
foreach( $posts as $post ):
$zipField=get_field('zip_codes_serviced');
//echo $zipField;
$zipString = $zipField . ', ';
//echo $zipArray;
$array = explode(', ' , $zipString); //split string into array seperated by ', '
foreach($array as $value) //loop over values
{
$cityField=get_field('city');
$stateField=get_field('state');
//echo $value. '<br>';
if($value==$userZip){
echo ($cityField . '<br>' . $stateField); //print
}
}
endforeach;
wp_reset_postdata();
endif;
}
Затем называется так:
zip_search();
Разве это не должно распечатывать поле города и штата на странице? Когда я помещаю логику вне функции, она работает, но я не могу заставить ее работать внутри функции. У кого-нибудь есть совет?
Единственный способ заставить его работать полностью вне функции - создание файла zip-search.php
а затем вставив <?php include("phone-display.php"); ?>
на странице, где я хочу, чтобы это отображалось, я уверен, что это хак; zip-search.php
видно ниже:
$posts = get_posts(array(
'posts_per_page' => -1,
'post_type' => 'Location'
));
//Set user zip to 33606 for testing purposes
$userZip=33606;
if( $posts ):
foreach( $posts as $post ):
$zipField=get_field('zip_codes_serviced');
//echo $zipField;
$zipString = $zipField . ', ';
//echo $zipArray;
$array = explode(', ' , $zipString); //split string into array seperated by ', '
foreach($array as $value) //loop over values
{
$cityField=get_field('city');
$stateField=get_field('state');
//echo $value. '<br>';
if($value==$userZip){
echo ($cityField . '<br>' . $stateField); //print
}
}
endforeach;
wp_reset_postdata();
endif;
Весь файл шаблона, в котором я пытаюсь заставить работать функцию почтового индекса, показан ниже:
<?php
/*
Template Name: Location
*
*/
get_header();
nectar_page_header($post->ID);
//full page
$fp_options = nectar_get_full_page_options();
extract($fp_options);
?>
<?php
function zip_search($userZip){
$posts = get_posts(array(
'posts_per_page' => -1,
'post_type' => 'Location'
));
//Set user zip to 33606 for testing purposes
//$userZip=33606;
if( $posts ):
foreach( $posts as $post ):
$zipField=get_field('zip_codes_serviced');
//echo $zipField;
$zipString = $zipField . ', ';
//echo $zipArray;
$array = explode(', ' , $zipString); //split string into array seperated by ', '
foreach($array as $value) //loop over values
{
$cityField=get_field('city');
$stateField=get_field('state');
//echo $value. '<br>';
if($value==$userZip){
echo ($cityField . '<br>' . $stateField); //print
}
}
endforeach;
wp_reset_postdata();
endif;
}
?>
<div class="container-wrap">
<div class="<?php if($page_full_screen_rows != 'on') echo 'container'; ?> main-content">
<div class="row">
<?php
//breadcrumbs
if ( function_exists( 'yoast_breadcrumb' ) && !is_home() && !is_front_page() ){ yoast_breadcrumb('<p id="breadcrumbs">','</p>'); }
//buddypress
global $bp;
if($bp && !bp_is_blog_page()) echo '<h1>' . get_the_title() . '</h1>';
//fullscreen rows
if($page_full_screen_rows == 'on') echo '<div id="nectar_fullscreen_rows" data-animation="'.$page_full_screen_rows_animation.'" data-row-bg-animation="'.$page_full_screen_rows_bg_img_animation.'" data-animation-speed="'.$page_full_screen_rows_animation_speed.'" data-content-overflow="'.$page_full_screen_rows_content_overflow.'" data-mobile-disable="'.$page_full_screen_rows_mobile_disable.'" data-dot-navigation="'.$page_full_screen_rows_dot_navigation.'" data-footer="'.$page_full_screen_rows_footer.'" data-anchors="'.$page_full_screen_rows_anchors.'">';
if(have_posts()) : while(have_posts()) : the_post();
the_content();
endwhile; endif;
if($page_full_screen_rows == 'on') echo '</div>'; ?>
</div><!--/row-->
</div><!--/container-->
<span><?php zip_search(33606);?></span>
<span>Locations Landing Page--where zip code function can go </span>
</div><!--/container-wrap-->
<?php get_footer(); ?>
Посмотреть результаты var_dump($post);
в функции ниже я включил только небольшую часть из-за ограничений символов:
array (37) {[0] => object (WP_Post) # 1683 (24) {["ID"] => int (1490) ["post_author"] => string (1) "1" ["post_date"] => string (19) "2018-09-21 15:39:29" ["post_date_gmt"] => string (19) "2018-09-21 15:39:29" ["post_content"] => string (0) "" ["post_title"] => string (14) "Scottsdale, AZ" ["post_excerpt"] => string (0) "" ["post_status"] => string (7) "publish" ["comment_status "] => string (6)" closed "[" ping_status "] => string (6)" closed "[" post_password "] => string (0)" "[" post_name "] => string (13)" scottsdale-az "[" to_ping "] => string (0)" "[" pinged "] => string (0)" "[" post_modified "] => string (19)" 2018-09-21 20:54: 47 "[" post_modified_gmt "] => string (19)" 2018-09-21 20:54:47 "[" post_content_filtered "] => string (0)" "[" post_parent "] => int (0) ["guid"] => string (72) " http://dev-site-name.hostingsite.my/?post_type=location&p=1490" ["menu_order"] => int (0) ["post_type"] = > string (8) "location" ["post_mime_type"] => string (0) "" ["comment_count"] => string (1) "0" ["filter"] => string (3) "raw"} [1] => объект (WP_Post)#1684 (24) { ["ID"]=> int(1488) ["post_author"]=> string(1) "1" ["post_date"]=> string(19) "2018-09-21 15:37:36" ["post_date_gmt"]=> string(19) "2018-09-21 15:37:36" ["post_content"]=> string(0) "" ["post_title"]=> string(17) "Город Миссури, Техас" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(6) "closed" ["ping_status"]=> string(6) "closed" ["post_password"]=> string(0) "" ["post_name"]=> string(16) "missouri-city-tx" ["to_ping"]=> строка (0) "" ["pinged"] => string (0) "" ["post_modified"] => string (19) "2018-09-21 15:37:36" ["post_modified_gmt"] => string (19) "2018-09-21 15:37:36" ["post_content_filtered"] => string (0) "" ["post_parent"] => int (0) ["guid"] => string (72) " http://dev-site-name.hostingsite.my/?post_type=location&p=1488"[" menu_order "] => int (0) [" post_type "] => string (8)" location "[" post_mime_type " ] => string (0) "" ["comment_count"] => string (1) "0" ["filter"] => string (3) "raw"} [2] => object (WP_Post) # 1685 (24) {["ID"] => int (1486) ["post_author"] => string (1) "1" ["post_date"] => string (19) "2018-09-21 15:35:35" ["post_date_gmt"] => string (19) "2018 -09-21 15:35:35 "[" post_content "] => string (0)" "[" post_title "] => string (11)" Хьюстон, Техас "[" post_excerpt "] => string (0) "" ["post_status"] => string (7) "publish" ["comment_status"] => string (6) "closed" ["ping_status"] => string (6) "closed" ["post_password"] = > string (0) "" ["post_name"] => string (10) "houston-tx" ["to_ping"] => string (0) "" ["pinged"] => string (0) "" [ "post_modified"] => string (19) "2018-09-21 15:35:35" ["post_modified_gmt"] => string (19) "2018-09-21 15:35:35" ["post_content_filtered"] => string (0) "" ["post_parent"] => int (0) ["guid"] => string (72) " http://dev-site-name.hostingsite.my/?post_type=location&p=1486"[" menu_order "] => int (0) [" post_type "] => string (8)" location "[" post_mime_type "] => string (0)" "[" comment_count "] => string (1) "0" ["filter"] => string (3) "raw"} [3] => object (WP_Post) # 1686 (24) {["ID"] => int (1484) ["post_author"] => string (1) "1" ["post_d ate "] => string (19)" 2018-09-21 15:29:24 "[" post_date_gmt "] => string (19)" 2018-09-21 15:29:24 "[" post_content "] = > string (0) "" ["post_title"] => string (9) "Sugarland" ["post_excerpt"] => string (0) "" ["post_status"] => string (7) "publish" [" comment_status "] => string (6)" closed "[" ping_status "] => string (6)" closed "[" post_password "] => string (0)" "[" post_name "] => string (9) "sugarland" ["to_ping"] => string (0) "" ["pinged"] => string (0) "" ["post_modified"] => string (19) "2018-10-10 19:29: 31 "[" post_modified_gmt "] => string (19)" 2018-10-10 19:29:31 "[" post_content_filtered "] => string (0)" "[" post_parent "] => int (0) [ "guid"] => string (72) " http://dev-site-name.hostingsite.my/?post_type=location&p=1484" ["menu_order"] => int (0) ["post_type"] => string (8) "location" ["post_mime_type"] => string (0) "" ["comment_count"] => string (1) "0" ["filter"] => string (3) "raw"} [ 4] => object (WP_Post) # 1687 (24) {["ID"] => int (1482) ["post_author"] => string (1) "1" ["post_date"] => string (19) "2018-09-21 15:27:46" ["поз t_date_gmt"]=> string(19) "2018-09-21 15:27:46" ["post_content"]=> string(0) "" ["post_title"]=> string(13) " Виноградная лоза, Техас " ["post_excerpt"] => string (0) "" ["post_status"] => string (7) "publish" ["comment_status"] => string (6) "closed" ["ping_status"] => string (6) "closed" ["post_password"] => string (0) "" ["post_name"] => string (12) "grapevine-tx" ["to_ping"] => string (0) "" ["pinged "] => string (0)" "[" post_modified "] => string (19)" 2018-09-21 15:27:46 "[" post_modified_gmt "] => string (19)" 2018-09-21 15:27:46 "[" post_content_filtered "] => string (0)" "[" post_parent "] => int (0) [" guid "] => string (72)" http://dev-site-name.hostingsite.my/?post_type=location&p=1482"[" menu_order "] => int (0) [" post_type "] => string (8)" location "[" post_mime_type "] => string (0)" "[" comment_count "] => string (1)" 0 "[" filter "] => string (3)" raw "} [5] => object (WP_Post) # 1688 (24) {[" ID "] => int (1480) ["post_author"] => string (1) "1" ["post_date"] => string (19) "2018-09-21 15:25:31" ["post_date_gmt"] => строка (19) "2018-09-21 15:25:31 "[" post_content "] => string (0)" "[" post_title "] => string (13)" Southlake, TX "[" post_excerpt "] => string (0)" "[" post_status "] => string (7)" publish "[" comment_status "] => string (6)" closed "[" ping_status "] => string (6)" closed "[" post_password "] => string (0) "" ["post_name"] => string (12) "southlake-tx" ["to_ping"] => string (0) "" ["pinged"] => string (0) "" ["post_modified"] => string (19) "2018-09-21 15:25:31" ["post_modified_gmt"] => string (19) "2018-09-21 15:25:31" ["post_content_filtered"] => string (0) "" ["post_parent"] => int (0) ["guid"] => string (72) " http://dev-site-name.hostingsite.my/?post_type=location&p=1480"
1 ответ
Я закончил тем, что делал это, и в конце концов решил, что будет лучше вернуть постоянную ссылку на должность, а не город и штат:
function zip_search($userZip){
$args = array(
'posts_per_page' => -1,
'post_type' => 'Locations'
);
$wp_query = new WP_Query($args);
if( $wp_query->have_posts() ): while( $wp_query->have_posts() ) : $wp_query->the_post();
$zipField=get_field('zip_codes_services');
$zipString = $zipField . ', ';
$array = explode(', ' , $zipString); //split string into array seperated by ', '
foreach($array as $value) //loop over values
{
if($value==$userZip){
$post_id = get_the_ID();
$permalink=get_permalink($post_id);
return ($permalink); //print
}
}
endwhile;
wp_reset_postdata();
endif;
}