У меня на сайте есть карта с точками, на которой я локализую количество офисов в каждой стране на карте.
Как это работает, в основном у меня CPT как office
, и я создаю посты как городнапример, Нью-Йорк, Лондон и т. д.
Например, если у меня есть офис в Нью-Йорке, США, я создам пост в Нью-Йорке, а пользовательской категорией будет название страны в качестве США.Кроме того, в office
CPT у меня есть настраиваемые поля для координации точек на карте как Home_x и Home_Y.
Таким образом, результат с приведенным ниже кодом выглядит так:
- США / Нью-Йорк
- США / Чикаго
- Великобритания / Лондон
- Великобритания / Бристоль
- Испания / Барселона
- Испания / Гранада
Мой код для цикла:
<div class="map-wrapper">
<div class="map">
<?php
$terms = get_terms(array(
'taxonomy' => 'office-country',
'hide_empty' => false,
));
?>
<?php foreach ($terms as $term) : ?>
<?php
$re = explode('-', $term->name);
$args = array (
'post_type' => 'office', //
'posts_per_page' => -1,
'order' => 'ASC',
'tax_query' => array(
array(
'taxonomy' => 'office-country',
'field' => 'id',
'terms' => $term->term_id,
),
),
);
$query = new WP_Query( $args );
if( $query->have_posts() ){
while( $query->have_posts() ){
$query->the_post();
$title = get_the_title();
$info = get_post_meta(get_the_ID(), '_post_info', true);
$link = get_term_meta($term->term_id, 'link', true);
?>
<a href="<?php echo $link ?>"
class="point <?php if ($term->slug === $_GET['country']) echo 'active' ?>"
style="left: <?php echo $info['home_x']; ?>px; top: <?php echo $info['home_y']; ?>px;"
data-target=".country-popup-<?php echo $term->term_id ?>">
<div class="inner"></div>
<div class="text">
<span class="name"><?php echo $re[0] ?> </span>
<span class="number"><?php echo " / ".$title; ?>
</span>
</div>
</a>
<?php
}
}
endforeach; ?>
</div>
</div>
и мое настраиваемое поле для CPT:
<tr>
<th>
<label><?php _e('Home X'); ?></label>
</th>
<td>
<input type="text" name="_post_info[home_x]" value="<?php echo $info['home_x'] ?>">
</td>
</tr>
<tr>
<th>
<label><?php _e('Home Y'); ?></label>
</th>
<td>
<input type="text" name="_post_info[home_y]" value="<?php echo $info['home_y'] ?>">
</td>
</tr>
Приведенный выше код отлично подходит для этой цели.
Но я хочу изменить пользовательскую таксономию как офисную и разместить как название страны.Вместо создания нескольких постов для города гораздо проще создать пост страны и добавить города в качестве пользовательской таксономии.Поэтому я пытаюсь изменить приведенный ниже код по-новому.
Я изменил код цикла, как показано ниже, и создал настраиваемое поле для пользовательской таксономии, я также указываю его ниже.
Новый цикл;
<div class="map-wrapper">
<div class="map">
<?php
$terms = get_terms(array(
'taxonomy' => 'office-city',
'hide_empty' => false,
));
?>
<?php foreach ($terms as $term) : ?>
<?php
$re = explode('-', $term->name);
$args = array (
'post_type' => 'office-country', //
'posts_per_page' => -1,
'order' => 'ASC',
'tax_query' => array(
array(
'taxonomy' => 'office-city',
'field' => 'id',
'terms' => $term->term_id,
),
),
);
$query = new WP_Query( $args );
if( $query->have_posts() ){
while( $query->have_posts() ){
$query->the_post();
$title = get_the_title();
// $info = get_post_meta(get_the_ID(), '_post_info', true);
$link = get_term_meta($term->term_id, 'link', true);
$MapY = get_term_meta($term->term_id, 'home_y', true);
$MapX = get_term_meta($term->term_id, 'home_x', true);
?>
<a href="<?php echo $link ?>"
class="point <?php if ($term->slug === $_GET['country']) echo 'active' ?>"
style="left: <?php echo $MapY ?>px; top: <?php echo $MapX ?>px;"
data-target=".country-popup-<?php echo $term->term_id ?>">
<div class="inner"></div>
<div class="text">
<span class="name"><?php echo $title; ?> </span>
<span class="number"><?php echo " / ".$re[0] ?>
</span>
</div>
</a>
<?php
}
}
endforeach; ?>
</div>
</div>
Пользовательское поле для таксономии;
add_action( 'office-country_edit_form_fields', 'office_country_taxonomy_custom_fields', 10, 2 );
function office_country_taxonomy_custom_fields($tag) {
?>
<tr>
<th>
<label><?php _e('Home X'); ?></label>
</th>
<td>
<input type="text" name="_term_meta[home_x]" value="<?php echo get_term_meta($tag->term_id, 'home_x', true) ?>">
</td>
</tr>
<tr>
<th>
<label><?php _e('Home Y'); ?></label>
</th>
<td>
<input type="text" name="_term_meta[home_y]" value="<?php echo get_term_meta($tag->term_id, 'home_y', true) ?>">
</td>
</tr>
<?php
}
Но когда я применил этот код, он частично работает, и я понятия не имею, чтобы изменить запрос.
Результат;
- США / Нью-Йорк
- Великобритания / Лондон
- Испания / Барселона
Таким образом, он показывает только сообщения по таксономии, но я хочу показать все города в каждой стране, как показано ниже:
- США / Нью-Йорк
- США / Чикаго
- Великобритания / Лондон
- Великобритания / Бристоль
- Испания / Барселона
- Испания / Гранада
Извините, это длинный вопрос.Я надеюсь, что вы, ребята, можете помочь в этом, и я надеюсь, что вы, ребята, поняли мой ломаный английский.