如何使用其CPT获取术语列表



我的网站上有一张地图,该地图带有我在地图图片上每个国家的办公室数量的位置。

基本上是我的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
}

但是,当我应用此代码时,它会部分起作用,我不知道更改查询。

结果;

  • 美国/纽约
  • 英国/伦敦
  • 西班牙/巴塞罗那

因此,它确实只显示每个分类法的帖子,但我想显示下面的每个国家/地区的所有城市;

  • 美国/纽约
  • 美国/芝加哥
  • 英国/伦敦
  • 英国/布里斯托尔
  • 西班牙/巴塞罗那
  • 西班牙/格拉纳达

对不起,这是一个漫长的问题。我希望你们能为此提供帮助,希望你们了解我破碎的英语。

当我得到您想要的结果时,您的循环正常工作。

<?php
$terms = get_terms(array(
    'taxonomy' => 'office-city',
    'hide_empty' => false,
));
foreach ($terms as $term) : 
    $args = array (
        'post_type' => 'office-country', //
        'posts_per_page' => -1,
        'order' => 'ASC',
        'orderby' => 'title',
        '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();
            echo '<p>'. $title . '/' . $term->name . '</p>';
        }
    }
endforeach; ?>

最新更新