试图在关税中实现具有多个循环的类别下的行过帐

时间:2013-10-11 作者:JCJ

希望这里有人能帮上忙。

理想情况下,我希望从“特色俱乐部”类别中获得一篇特色帖子,以显示来自同一自定义帖子类型的以上三篇帖子。我已经完成了以下工作,但对于其中一个,我使用了两个循环,我确信其中一个可以工作,还有两个,全幅特色帖子下的结果,显示在一列中,我需要它们排成一行。

此外,我还有另一个自定义帖子类型,我想在同一页面上的这个块下显示,还有另一个“特色类别”,按照我的方式,我将以四个循环结束。

期待得到一些帮助。

代码如下:

<h2 class="home-title">Jazz Clubs</h2>
            <?php
                $args = array (
                    \'post_type\'  => \'jazz clubs\',
                    \'meta_query\'             => array(
                    array(
                    \'key\'       => \'_jazz_club_feature_club\',
                        ),
                    ),
                );
                // The Query
                $jazzclubs = new WP_Query( $args );
                // The Loop
                if ( $jazzclubs->have_posts() ) {
                    while ( $jazzclubs->have_posts() ) {
                        $jazzclubs->the_post();
            ?>
            <h3><?php the_title() ?></h3>
                <?php the_post_thumbnail() ?>
                    <div class=\'post-content\'><?php the_excerpt() ?></div> 
            <?php
                    }
                } else {
                    // no posts found
                }       
                wp_reset_postdata();
            ?>
        </div>
    </div>
    <div class="row">
        <div class="small-12 large-4 columns" id="home-club">
        <?php           
        // WP_Query arguments
            $args = array (
                \'post_type\'  => \'jazz clubs\',
                \'orderby\'    => \'date\',
            );
            // The Query
                $jazzclubs = new WP_Query( $args );
                // The Loop
                if ( $jazzclubs->have_posts() ) {
                    while ( $jazzclubs->have_posts() ) {
                        $jazzclubs->the_post();
        ?>
                <div id="homeclub">
                    <div class="homethumb">
                <?php the_post_thumbnail() ?>
                    <h5 id="city"class="h5"><span><?php $terms = get_the_terms( $post->ID , \'city\' );
                                                        if ( $terms != null ){
                                                        foreach( $terms as $term ) {
                                                        print $term->name ;
                                                        unset($term);
                                                        } } 
                                                    ?></span></h5>
                    </div>
                    <h4 id="home"class="h4"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
                    <h6 id="home"class="h6"><?php the_date(\'F j Y\'); ?></h6>
                        <div class=\'post-content\'><?php the_excerpt() ?></div> 
                </div>

            <?php
                    }
                } else {
                    // no posts found
                }
                // Restore original Post Data
                wp_reset_postdata();
            ?>
    </div>

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

。。。首先,我使用两个循环,我相信其中一个可以工作。。。

我认为在这里一个查询都不容易。如果所有操作都在一个数据库查询中完成,那么维护代码也可能很困难。五个查询(您运行的四个查询加上WordPress运行的主查询)非常多,但缓存可以帮助减少每个页面视图运行的平均查询数。

。。。第二,结果显示在一列,我需要它们排成一行。

这可以使用CSS修复。在Google上搜索horizontal lists 有关使用列表执行此操作的CSS示例(<ul><ol>). 很容易将类似的样式应用于div。

代码中还有一些其他问题需要解决。

首先,看起来城市分类法中只有一个城市,并测试get_the_terms() 对于null 这还不够好。get_the_terms() 可以返回WP_Error object.

$terms = get_the_terms( $post->ID , \'city\' );
if ( $terms != null ) {
    foreach( $terms as $term ) {
        print $term->name ;
        unset($term);
    }
}
这是一个用户定义的函数,用于将城市(或空字符串)回显到当前帖子的浏览器。将此函数定义放在文件的底部。

function wpse_117541_the_post_city() {
    global $post;

    $terms = get_the_terms( $post->ID , \'city\' );

    if ( $terms && ! is_wp_error( $terms ) )
        echo $terms[0]->name;

    echo \'\';
}
注意:我没有完全测试这个函数。

在代码中,您可以这样使用它:

 <h5 id="city" class="h5"><span><?php wpse_117541_the_post_city(); ?></span></h5>
秒,每个HTMLid 属性必须唯一。它不能在网页上出现多次。

在代码中,此HTML代码显示在行循环中:

<div id="homeclub">
    <div class="homethumb">
        <?php the_post_thumbnail() ?>
        <h5 id="city" class="h5"><span><?php wpse_117541_the_post_city(); ?></span></h5>
    </div>
    <h4 id="home" class="h4"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
    <h6 id="home" class="h6"><?php the_date( \'F j Y\' ); ?></h6>
    <div class=\'post-content\'><?php the_excerpt() ?></div>
</div>
如果有1行4列,则将有4列homeclub 和8home id 属性。使用与元素名称相同的类名不会给您带来太多好处。在CSS中,h4 可以使用h4 选择器。添加HTMLclass 仅允许您使用.h4 作为选择器。

您可以使用此选项:

<div class="home-club">
    <div class="thumb">
        <?php the_post_thumbnail() ?>
        <h5 class="city"><span><?php wpse_117541_the_post_city(); ?></span></h5>
    </div>
    <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
    <h6><?php the_date( \'F j Y\' ); ?></h6>
    <div class=\'post-content\'><?php the_excerpt() ?></div>
</div>
在样式表中,使用这些CSS selectors 要设置每个零件的样式,请执行以下操作:

.home-club {}
.home-club thumb {}
.home-club h5 {} or .home-club .city {}
.home-club h4 {}
.home-club h6 {}
.home-club post-content {}
{} 将包含HTML的该部分的样式(如果有)。我用过home-club 因为我喜欢用破折号分隔类名中的单词。

第三,你只需要使用wp_reset_postdata() 在完成所有自定义循环之后。这样做的目的是重置post数据(每次调用the_post() 方法),用于WordPress用于访问此页面的查询。

您可以重置数据,以便其他代码(例如小部件代码)将看到预期的主查询数据,而不是预期的自定义查询数据。打几次电话可能没什么坏处,但这是不必要的。

结束

相关推荐

Temp URL Redirect Loop

我试图通过hostgator使用临时URL(IP/~用户名/域)建立我的网站,但我遇到了一些问题。我已进入数据库,并用新的临时URL替换了旧域的所有实例。问题是我遇到了重定向循环。我在某个地方读到了试图重置永久链接的内容,但我没有访问管理面板的权限。我不知道还有什么可以修复重定向循环。我甚至换了我的。使用新的htaccess,仍然可以获得重定向循环。这是我当前的wp配置文件:define(\"WP_SITEURL\",\"http://IP/~username/example.com\"); de