根据当前查询分类术语自定义循环隔离POST元输出

时间:2015-06-19 作者:Chris Chaney

我已经开始构建一个页面来显示基于特定标准的一系列产品。每个产品都是两个独立分类法的一部分,一个用于品牌,一个用于产品尺寸(每个产品可以有多种尺寸)。我在post屏幕上设置了几个元图像上传框,允许为每个产品大小上传不同的缩略图(包装等不同)。我希望它显示在一个排序列表中,其结构与以下类似:

Product Size 1
  -Brand 1
     -Product 1
        -Product 1 thumbnail for Product size 1
     -Product 2
  -Brand 2
     -Product 1
     -Product 2
  -Brand 3

Product Size 2
  -Brand 1
     -Product 1
        -Product 1 thumbnail for Product size 2
     -Product 2
  -Brand 2
     -Product 1
     -Product 2
  -Brand 3
我已经设法使列表本身正确显示,但每篇文章都显示了可用的每个缩略图,而不是当前查询循环中的缩略图。

在每个帖子中,我都打印了当前产品的输出,每个帖子都正确显示了当前产品的输出。然而,当我运行if 语句检查缩略图是否存在,它将显示所有缩略图。我希望我只是忽视了一些事情,虽然我现在看不见树木,也看不见树木。

我仍然需要清理一下代码,但希望它足够容易理解。

$beertax_terms = get_terms( \'beer_tax\' );
foreach( $beertax_terms as $beertax_term ) {
    $currentproduct = $beertax_term; ?>
    <div class="beerproducts">
        <h3><?php echo ($beertax_term->name) ?></h3>
        <?php $beerbrewer_terms = get_terms( \'beer_brewery\' );
        foreach ( $beerbrewer_terms as $beerbrewer_term ) { ?>
            <div class="beerbrewery">
                <h4><?php echo ($beerbrewer_term->name) ?></h4>
                <?php $beerargs = array (
                    \'post_type\' => \'beer\',
                    \'orderby\'   => \'name\',
                    \'order\'     => \'ASC\',
                    \'tax_query\' => array(
                        \'relation\' => \'AND\',
                        array(
                            \'taxonomy\' => \'beer_tax\',
                            \'field\'    => \'slug\',
                            \'terms\'    => ($beertax_term->slug),
                        ),
                        array(
                            \'taxonomy\' => \'beer_brewery\',
                            \'field\'    => \'slug\',
                            \'terms\'    => ($beerbrewer_term->slug),
                        ),
                    ),
                );
                $the_query = new WP_Query( $beerargs );
                if ( $the_query->have_posts() ) {
                    while ( $the_query->have_posts() ) {
                        $the_query->the_post();
                        $cask = get_post_meta($post->ID, \'beer_caskthumb\', true);
                        $keg = get_post_meta($post->ID, \'beer_kegthumb\', true);
                        $bottle = get_post_meta($post->ID, \'beer_bottlethumb\', true); ?>
                        <a href="<?php the_permalink();?>" rel="bookmark">
                            <div class="beer">
                                <?php the_title();
                                print_r ($currentproduct);
                                if ( $currentproduct->name = \'bottle\' ) {
                                    ?><!--bottle--><?php 
                                    //if ( $bottle !=\'\' ) {
                                        //echo $bottlethumb;
                                    //}
                                } 
                                if ( $currentproduct->name = \'cask\' ) {
                                    ?><!--cask--><?php
                                    //if ($cask !=\'\') {
                                        //echo $caskthumb;
                                    //}
                                } 
                                if ( $currentproduct->name = \'keg\' ) {
                                    ?><!--keg--><?php
                                    //if ($keg !=\'\') {
                                        //echo $kegthumb;
                                    //}
                                } ?>  
                            </div>
                        </a>                                                           
                <?php }
                wp_reset_query(); wp_reset_postdata();
        }
        wp_reset_postdata(); ?>
        <!--close beerbrewer-->
    </div>
<?php }
wp_reset_query();

1 个回复
最合适的回答,由SO网友:Chris Chaney 整理而成

我设法用全新的眼光来解决这个问题,但我认为如果其他人将来发现自己也有类似的问题,这对他们会很有用。如果答案需要整理,请随时提出修改建议。

为了解决这个问题,我不得不编辑几行代码,但这里又是完整的代码块。

首先,我必须添加一个额外的变量,通过在post输出的下面内部添加,将当前产品分类术语存储在另一个变量中。

$currentslug = $currentproduct->slug
然后我开始换电话

if ( $currentproduct->name = \'bottle\' ) {
在此注释中添加双“=”(表示$currentslug\'bottle\' 表示变量$currentslug 将在每次运行循环时进行检查和重置,而不是检查$currentproduct->name 在飞行中。如果我误解了这一点,请有人纠正我,但我假设$currentproduct->name 不起作用,因为它没有存储在任何地方,以便稍后在循环中使用?

<?php if ($currentslug == \'bottle\') {
这使我能够识别要进入的隔离当前分类术语,并添加一个额外的调用,以从相关元字段中提取正确的附件缩略图。

我是通过

<?php 
 if (!empty($bottle)) {
        $attachment_id = $bottle[id];
    } else {
        $attachment_id = NULL;
    }
    $bottlethumb = wp_get_attachment_image( $attachment_id, \'medium\' ); 
    echo $bottlethumb 
 ?>
最后是工作代码(我还需要添加一些位,但最初的问题已经解决)。

    <?php $beertax_terms = get_terms( \'beer_tax\' ); ?>
<?php foreach($beertax_terms as $beertax_term) { ?>
<?php $currentproduct = $beertax_term ?>
<div class="beerproducts">
    <h3><?php echo ($beertax_term->name) ?></h3>
        <?php $beerbrewer_terms = get_terms( \'beer_brewery\' ); ?>
            <?php foreach($beerbrewer_terms as $beerbrewer_term) { ?>

                <div class="beerbrewery">
                <h4><?php echo ($beerbrewer_term->name) ?></h4>
                    <?php $beerargs = array (
                            \'post_type\' =>  \'beer\',
                            \'orderby\'   =>  \'name\',
                            \'order\'     =>  \'ASC\',
                            \'tax_query\' => array(
                                \'relation\' => \'AND\',
                                array(
                                    \'taxonomy\' => \'beer_tax\',
                                    \'field\'    => \'slug\',
                                    \'terms\'    => ($beertax_term->slug),
                                ),
                                array(
                                    \'taxonomy\' => \'beer_brewery\',
                                    \'field\'    => \'slug\',
                                    \'terms\'    => ($beerbrewer_term->slug),
                                ),
                            ),
                        ); ?>
                    <?php $the_query = new WP_Query( $beerargs ); ?>
                        <?php if ($the_query->have_posts()) { ?>
                            <?php while ($the_query->have_posts()) { ?>
                                <?php $the_query->the_post(); ?>

                                <?php $cask = get_post_meta($post->ID, \'beer_caskthumb\', true); ?>
                                <?php $keg = get_post_meta($post->ID, \'beer_kegthumb\', true); ?>
                                <?php $bottle = get_post_meta($post->ID, \'beer_bottlethumb\', true); ?>
                                <?php $currentslug = $currentproduct->slug ?>
                                    <a href="<?php the_permalink();?>" rel="bookmark">
                                        <div class="beer">

                                            <?php if ($currentslug == \'bottle\') { ?>
                                                <!--bottle-->
                                                <?php if (!empty($bottle)) {
                                                            $attachment_id = $bottle[id];
                                                        } else {
                                                            $attachment_id = NULL;
                                                            }
                                                        $bottlethumb = wp_get_attachment_image( $attachment_id, \'medium\' ); 
                                                        echo $bottlethumb ?>

                                            <?php } if ($currentslug == \'cask\') { ?>
                                                <!--cask-->
                                                <?php if (!empty($bottle)) {
                                                            $attachment_id = $cask[id];
                                                        } else {
                                                            $attachment_id = NULL;
                                                            }
                                                        $caskthumb = wp_get_attachment_image( $attachment_id, \'medium\' ); 
                                                        echo $caskthumb ?>

                                            <?php } if ($currentslug == \'keg\') { ?>
                                                <!--keg-->
                                                <?php if (!empty($keg)) {
                                                            $attachment_id = $keg[id];
                                                        } else {
                                                            $attachment_id = NULL;
                                                            }
                                                        $kegthumb = wp_get_attachment_image( $attachment_id, \'medium\' ); 
                                                        echo $kegthumb ?>
                                            <?php } ?>    

                                        </div>
                                    </a>

                            <?php } ?>
                            <?php wp_reset_query(); wp_reset_postdata();?>
                        <? } ?>
                        <?php wp_reset_postdata(); ?>
                <!--close beerbrewer-->
                </div>
            <?php } ?>
            <?php wp_reset_query(); ?>
<!--close beerproducts-->
</div>
<?php } ?>

结束

相关推荐

Help with if/else loop

你能帮我在这个循环中添加一个else语句吗?<?php $post_type = \'post\'; // <-- Post Type $tax = \'temporada\'; // <-- Taxonomía $termino = get_terms($tax); $category = get_the_category(); $cat_name = $category[0]->cat_ID; if ($termino) {

根据当前查询分类术语自定义循环隔离POST元输出 - 小码农CODE - 行之有效找到问题解决它

根据当前查询分类术语自定义循环隔离POST元输出

时间:2015-06-19 作者:Chris Chaney

我已经开始构建一个页面来显示基于特定标准的一系列产品。每个产品都是两个独立分类法的一部分,一个用于品牌,一个用于产品尺寸(每个产品可以有多种尺寸)。我在post屏幕上设置了几个元图像上传框,允许为每个产品大小上传不同的缩略图(包装等不同)。我希望它显示在一个排序列表中,其结构与以下类似:

Product Size 1
  -Brand 1
     -Product 1
        -Product 1 thumbnail for Product size 1
     -Product 2
  -Brand 2
     -Product 1
     -Product 2
  -Brand 3

Product Size 2
  -Brand 1
     -Product 1
        -Product 1 thumbnail for Product size 2
     -Product 2
  -Brand 2
     -Product 1
     -Product 2
  -Brand 3
我已经设法使列表本身正确显示,但每篇文章都显示了可用的每个缩略图,而不是当前查询循环中的缩略图。

在每个帖子中,我都打印了当前产品的输出,每个帖子都正确显示了当前产品的输出。然而,当我运行if 语句检查缩略图是否存在,它将显示所有缩略图。我希望我只是忽视了一些事情,虽然我现在看不见树木,也看不见树木。

我仍然需要清理一下代码,但希望它足够容易理解。

$beertax_terms = get_terms( \'beer_tax\' );
foreach( $beertax_terms as $beertax_term ) {
    $currentproduct = $beertax_term; ?>
    <div class="beerproducts">
        <h3><?php echo ($beertax_term->name) ?></h3>
        <?php $beerbrewer_terms = get_terms( \'beer_brewery\' );
        foreach ( $beerbrewer_terms as $beerbrewer_term ) { ?>
            <div class="beerbrewery">
                <h4><?php echo ($beerbrewer_term->name) ?></h4>
                <?php $beerargs = array (
                    \'post_type\' => \'beer\',
                    \'orderby\'   => \'name\',
                    \'order\'     => \'ASC\',
                    \'tax_query\' => array(
                        \'relation\' => \'AND\',
                        array(
                            \'taxonomy\' => \'beer_tax\',
                            \'field\'    => \'slug\',
                            \'terms\'    => ($beertax_term->slug),
                        ),
                        array(
                            \'taxonomy\' => \'beer_brewery\',
                            \'field\'    => \'slug\',
                            \'terms\'    => ($beerbrewer_term->slug),
                        ),
                    ),
                );
                $the_query = new WP_Query( $beerargs );
                if ( $the_query->have_posts() ) {
                    while ( $the_query->have_posts() ) {
                        $the_query->the_post();
                        $cask = get_post_meta($post->ID, \'beer_caskthumb\', true);
                        $keg = get_post_meta($post->ID, \'beer_kegthumb\', true);
                        $bottle = get_post_meta($post->ID, \'beer_bottlethumb\', true); ?>
                        <a href="<?php the_permalink();?>" rel="bookmark">
                            <div class="beer">
                                <?php the_title();
                                print_r ($currentproduct);
                                if ( $currentproduct->name = \'bottle\' ) {
                                    ?><!--bottle--><?php 
                                    //if ( $bottle !=\'\' ) {
                                        //echo $bottlethumb;
                                    //}
                                } 
                                if ( $currentproduct->name = \'cask\' ) {
                                    ?><!--cask--><?php
                                    //if ($cask !=\'\') {
                                        //echo $caskthumb;
                                    //}
                                } 
                                if ( $currentproduct->name = \'keg\' ) {
                                    ?><!--keg--><?php
                                    //if ($keg !=\'\') {
                                        //echo $kegthumb;
                                    //}
                                } ?>  
                            </div>
                        </a>                                                           
                <?php }
                wp_reset_query(); wp_reset_postdata();
        }
        wp_reset_postdata(); ?>
        <!--close beerbrewer-->
    </div>
<?php }
wp_reset_query();

1 个回复
最合适的回答,由SO网友:Chris Chaney 整理而成

我设法用全新的眼光来解决这个问题,但我认为如果其他人将来发现自己也有类似的问题,这对他们会很有用。如果答案需要整理,请随时提出修改建议。

为了解决这个问题,我不得不编辑几行代码,但这里又是完整的代码块。

首先,我必须添加一个额外的变量,通过在post输出的下面内部添加,将当前产品分类术语存储在另一个变量中。

$currentslug = $currentproduct->slug
然后我开始换电话

if ( $currentproduct->name = \'bottle\' ) {
在此注释中添加双“=”(表示$currentslug\'bottle\' 表示变量$currentslug 将在每次运行循环时进行检查和重置,而不是检查$currentproduct->name 在飞行中。如果我误解了这一点,请有人纠正我,但我假设$currentproduct->name 不起作用,因为它没有存储在任何地方,以便稍后在循环中使用?

<?php if ($currentslug == \'bottle\') {
这使我能够识别要进入的隔离当前分类术语,并添加一个额外的调用,以从相关元字段中提取正确的附件缩略图。

我是通过

<?php 
 if (!empty($bottle)) {
        $attachment_id = $bottle[id];
    } else {
        $attachment_id = NULL;
    }
    $bottlethumb = wp_get_attachment_image( $attachment_id, \'medium\' ); 
    echo $bottlethumb 
 ?>
最后是工作代码(我还需要添加一些位,但最初的问题已经解决)。

    <?php $beertax_terms = get_terms( \'beer_tax\' ); ?>
<?php foreach($beertax_terms as $beertax_term) { ?>
<?php $currentproduct = $beertax_term ?>
<div class="beerproducts">
    <h3><?php echo ($beertax_term->name) ?></h3>
        <?php $beerbrewer_terms = get_terms( \'beer_brewery\' ); ?>
            <?php foreach($beerbrewer_terms as $beerbrewer_term) { ?>

                <div class="beerbrewery">
                <h4><?php echo ($beerbrewer_term->name) ?></h4>
                    <?php $beerargs = array (
                            \'post_type\' =>  \'beer\',
                            \'orderby\'   =>  \'name\',
                            \'order\'     =>  \'ASC\',
                            \'tax_query\' => array(
                                \'relation\' => \'AND\',
                                array(
                                    \'taxonomy\' => \'beer_tax\',
                                    \'field\'    => \'slug\',
                                    \'terms\'    => ($beertax_term->slug),
                                ),
                                array(
                                    \'taxonomy\' => \'beer_brewery\',
                                    \'field\'    => \'slug\',
                                    \'terms\'    => ($beerbrewer_term->slug),
                                ),
                            ),
                        ); ?>
                    <?php $the_query = new WP_Query( $beerargs ); ?>
                        <?php if ($the_query->have_posts()) { ?>
                            <?php while ($the_query->have_posts()) { ?>
                                <?php $the_query->the_post(); ?>

                                <?php $cask = get_post_meta($post->ID, \'beer_caskthumb\', true); ?>
                                <?php $keg = get_post_meta($post->ID, \'beer_kegthumb\', true); ?>
                                <?php $bottle = get_post_meta($post->ID, \'beer_bottlethumb\', true); ?>
                                <?php $currentslug = $currentproduct->slug ?>
                                    <a href="<?php the_permalink();?>" rel="bookmark">
                                        <div class="beer">

                                            <?php if ($currentslug == \'bottle\') { ?>
                                                <!--bottle-->
                                                <?php if (!empty($bottle)) {
                                                            $attachment_id = $bottle[id];
                                                        } else {
                                                            $attachment_id = NULL;
                                                            }
                                                        $bottlethumb = wp_get_attachment_image( $attachment_id, \'medium\' ); 
                                                        echo $bottlethumb ?>

                                            <?php } if ($currentslug == \'cask\') { ?>
                                                <!--cask-->
                                                <?php if (!empty($bottle)) {
                                                            $attachment_id = $cask[id];
                                                        } else {
                                                            $attachment_id = NULL;
                                                            }
                                                        $caskthumb = wp_get_attachment_image( $attachment_id, \'medium\' ); 
                                                        echo $caskthumb ?>

                                            <?php } if ($currentslug == \'keg\') { ?>
                                                <!--keg-->
                                                <?php if (!empty($keg)) {
                                                            $attachment_id = $keg[id];
                                                        } else {
                                                            $attachment_id = NULL;
                                                            }
                                                        $kegthumb = wp_get_attachment_image( $attachment_id, \'medium\' ); 
                                                        echo $kegthumb ?>
                                            <?php } ?>    

                                        </div>
                                    </a>

                            <?php } ?>
                            <?php wp_reset_query(); wp_reset_postdata();?>
                        <? } ?>
                        <?php wp_reset_postdata(); ?>
                <!--close beerbrewer-->
                </div>
            <?php } ?>
            <?php wp_reset_query(); ?>
<!--close beerproducts-->
</div>
<?php } ?>

相关推荐

Increase offset while looping

我正在编写一个自定义帖子插件,它将自定义帖子分组显示为选项卡。每组4个岗位。是否可以编写一个偏移量随每次循环而增加的查询?因此,结果将是:-第一个查询显示从1到4的帖子-第二个查询显示从5到8的帖子-第三个查询显示从9到12的帖子等。 <div class=\"official-matters-tabs\"> <?php $args = array(\'post_type\' => \'official-matters\', \'showp