构建按自定义分类分组的帖子列表作为区段标题,仅当至少有一个帖子在该税种中时才显示

时间:2013-04-09 作者:reidelliott

我有CPT“经销商”和“州”的海关税,其中CPT中的每个职位都与一个州相关。希望是为该州创建标题,然后在其下列出该州分类法中的每个帖子;并且仅当至少有一个帖子与状态标题关联时才显示状态标题。

现在要做的就是将状态显示为

h3 class="state"
标记,不列出与税相关的帖子。

e、 g。

STATE 1
STATE 2

它应该为状态标题下的每个帖子创建一个具有“经销商”级别的div。e、 g:

STATE 1
张贴标题
地址
圣城
800.555.1234
www.example。com

邮编:800.555.1234 www.example。com

STATE 2
张贴标题
地址
圣城
800.555.1234
www.example。com

我正在使用高级自定义字段来调用$street\\u地址等。下面是我现在拥有的代码。

有什么想法?

<?php
$states = get_terms( \'states\' );
?>

<?php
foreach ( $states as $state ) {
    $state_query = new WP_Query( array( 
        \'post_type\' => \'dealers\',
        \'tax_query\' => array(
             array(
                \'taxonomy\' => \'states\',
                \'field\' => \'name\',
                \'terms\' => $_GET[\'state\'],
                \'operator\' => \'IN\'
            )
        ) 
    ) );
?>
    <h3 class="state"><?php echo $state->name; ?></h3>
    <?php
    if ( $state_query->have_posts() ) : while ( $state_query->have_posts() ) : the_post(); 
        $id = get_the_ID();
        $street_address = get_field (\'street_address\', $id);
        $dealer_city = get_field (\'dealer_city\');
        $dealer_state = get_field (\'dealer_state\');
        $phone_number = get_field (\'phone_number\');
        $toll_free = get_field (\'toll_free\');
        $dealer_website = get_field (\'dealer_website\');

    ?>
        <div class="dealer">
            <h4 class="dealer_name"><?php the_title(); ?></h4>
            <p><?php echo $street_address; ?></p>
            <p><?php echo $dealer_city; ?>, <?php echo $dealer_state; ?></p>
            <?php if ( get_field(\'phone_number\') ) { ?><p><?php echo $phone_number; ?></p><?php } ?>

        </div>

    <?php endwhile; endif; ?>

<?php 
wp_reset_postdata(); ?>

<?php } ?>

1 个回复
SO网友:vancoder

您正在遍历所有状态并在每次迭代中运行查询,但您所做的查询与循环无关。您正在检查$_GET[\'state\'], 这将是通过查询字符串传递的状态。

 <?php
    foreach ( $states as $state ) {
        $state_query = new WP_Query( array( 
            \'post_type\' => \'dealers\',
            \'tax_query\' => array(
                 array(
                    \'taxonomy\' => \'states\',
                    \'field\' => \'name\',
                    \'terms\' => $_GET[\'state\'],
                    \'operator\' => \'IN\'
                )
            ) 
        ) );
    ?>
所以,你可以把它换成$state - 但是你仍然有一个非常低效的方法,因为你要进行50次查询!

相反,我将执行单个查询,然后使用get_the_terms( $post->ID, \'states\' ) 获取每个帖子的状态。我将构建一个数组,而不是直接输出。以下内容非常粗略且未经测试:

    // start your loop here
  $states = get_the_terms( $post->ID, \'states\' );
    $dealers[$states[0]->name][] = array(
        \'dealer_name\' => $post->post_title,
        \'street_address\' => get_field (\'street_address\', $post->ID),
        \'dealer_city\' => get_field (\'dealer_city\', $post->ID),
        // and so forth for all fields
    )
    // end your loop here
只有当循环完成并构建了数组时,我才会遍历新数组以输出结果。类似于:

<?php
$old_state = \'\';
foreach ( $dealers as $state => $dealer ) {
    if ( $state != $old_state ) {
        ?>
        <h3 class="state"><?php echo $state; ?></h3>
        <?php
        $old_state = $state;
    }
    ?>
    <div class="dealer">
        <h4 class="dealer_name"><?php the_title(); ?></h4>
        <p><?php echo $dealer[\'street_address\']; ?></p>
        <p><?php echo $dealer[\'dealer_city\']; ?></p>
        <!-- all the other fields... -->
    </div>
    <?
}
?>

结束

相关推荐

子主题中的Comments.php更改不会显示在站点上

我正在尝试自定义评论中的评论模板。php和so对代码进行了一些更改,包括wp\\u list\\u comments()中的回调函数(我在functions.php中定义了该函数)所有这些更改在我的本地开发机器上都可以正常工作,但不知何故,当我上传评论时,我看不到任何更改。php和函数。php在我的主题文件夹的根目录中。我尝试过取消激活和重新激活所有插件,但仍然没有成功。现在我快发疯了。有人知道可能出了什么问题吗?