编辑WordPress循环、分类和筛选器

时间:2014-05-01 作者:Archie Butler

我已成功集成了一个自定义分类插件,该插件可以:

-根据所选类别筛选员工。

我想让它显示出来that department first, 然后是下面的其他部门,而不是那个部门(现在的情况)。

以下是链接:http://crippslawtest.co.uk/people/

我想我需要在我的循环中添加第二部分,即“然后显示所有其他类别的所有帖子”。

以下是我的Wordpress循环:

        <div class="staffwrapper">
    <?php
    $args = array( \'post_type\' => \'cripps_staff\', \'posts_per_page\' => 300 );
    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post();

    echo \'<div class="col-md-3 spacetop">\';
    echo \'<a href="\'.get_permalink().\'">\';
    echo \'<img src="\';
    echo get_post_meta($post->ID,\'image\',true);
    echo \'">\';
    echo \'</a>\';
    echo \'<h2 class="staffname">\';
    echo get_post_meta($post->ID,\'staff_name\',true);
    echo \'</h2>\';
    echo \'<h2 class="staffrole">\';
    echo get_post_meta($post->ID,\'staff_role\',true);
    echo \'</h2>\';
    echo \'<h2 class="staffnumber">\';
    echo get_post_meta($post->ID,\'staff_telephone_number\',true);
    echo \'</h2>\';
    echo \'<h2 class="staffemail">\';
    echo get_post_meta($post->ID,\'staff_email_address\',true);
    echo \'</h2>\';
    echo \'</div>\';
    endwhile;
    ?>
    </div><!--End of staff wrapper-->
我已尝试在本页的帮助下在循环中进行第二次查询:http://codex.wordpress.org/Class_Reference/WP_Query#Methods_and_Properties

我搞不懂的是,如何写出吸引“所有其他帖子”的论点,有什么想法吗?

以下是我的尝试:

<?php
    $args = array( \'post_type\' => \'cripps_staff\', \'posts_per_page\' => 300 );
    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post();

    echo \'<div class="col-md-3 spacetop">\';
    echo \'<a href="\'.get_permalink().\'">\';
    echo \'<img src="\';
    echo get_post_meta($post->ID,\'image\',true);
    echo \'">\';
    echo \'</a>\';
    echo \'<h2 class="staffname">\';
    echo get_post_meta($post->ID,\'staff_name\',true);
    echo \'</h2>\';
    echo \'<h2 class="staffrole">\';
    echo get_post_meta($post->ID,\'staff_role\',true);
    echo \'</h2>\';
    echo \'<h2 class="staffnumber">\';
    echo get_post_meta($post->ID,\'staff_telephone_number\',true);
    echo \'</h2>\';
    echo \'<h2 class="staffemail">\';
    echo get_post_meta($post->ID,\'staff_email_address\',true);
    echo \'</h2>\';
    echo \'</div>\';
    endwhile;

    // 2nd loop
    wp_reset_postdata();
    /* The 2nd Query (without global var) */
    $query2 = new WP_Query( $args2 );
    // The 2nd Loop
    while( $query2->have_posts() ) {
    $query2->next_post();
    echo \'<div class="col-md-3 spacetop">\';
    echo \'<a href="\'.get_permalink().\'">\';
    echo \'<img src="\';
    echo get_post_meta($post->ID,\'image\',true);
    echo \'">\';
    echo \'</a>\';
    echo \'<h2 class="staffname">\';
    echo get_post_meta($post->ID,\'staff_name\',true);
    echo \'</h2>\';
    echo \'<h2 class="staffrole">\';
    echo get_post_meta($post->ID,\'staff_role\',true);
    echo \'</h2>\';
    echo \'<h2 class="staffnumber">\';
    echo get_post_meta($post->ID,\'staff_telephone_number\',true);
    echo \'</h2>\';
    echo \'<h2 class="staffemail">\';
    echo get_post_meta($post->ID,\'staff_email_address\',true);
    echo \'</h2>\';
    echo \'</div>\';
    // Restore original Post Data
    wp_reset_postdata();
    }
    ?>
谢谢大家!

2 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

你的代码让任何人都很难帮助你。正确编辑问题中的代码非常重要。你真的不必使用echo\'您正在使用的。只是格式不好,标签使用不当。只要正确地打开和关闭php标记,就可以清理代码。下面是代码的外观。顺便说一句,你的链接对我们来说是无用的,因为你的网站只对注册用户可见。

First set of code

?>
  <div class="staffwrapper">
    <?php
        $args = array( \'post_type\' => \'cripps_staff\', \'posts_per_page\' => 300 );
        $loop = new WP_Query( $args );
        while ( $loop->have_posts() ) : $loop->the_post();
    ?>

    <div class="col-md-3 spacetop">
        <a href="<?php get_permalink(); ?>"><img src="<?php echo get_post_meta($post->ID,\'image\',true); ?>"></a>

        <h2 class="staffname">
            <?php echo get_post_meta($post->ID,\'staff_name\',true); ?>
        </h2>

        <h2 class="staffrole">
            <?php echo get_post_meta($post->ID,\'staff_role\',true); ?>
        </h2>

        <h2 class="staffnumber">
            <?php echo get_post_meta($post->ID,\'staff_telephone_number\',true); ?>
        </h2>

        <h2 class="staffemail">
            <?php echo get_post_meta($post->ID,\'staff_email_address\',true); ?>
        </h2>

    </div>
    <?php endwhile; ?>
    </div><!--End of staff wrapper-->
<?php

Second set of code

<?php
 $args = array( \'post_type\' => \'cripps_staff\', \'posts_per_page\' => 300 );
    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post();
?>  

    <div class="col-md-3 spacetop">
        <a href="<?php get_permalink(); ?>"><img src="<?php echo get_post_meta($post->ID,\'image\',true); ?>"></a>

        <h2 class="staffname">
            <?php echo get_post_meta($post->ID,\'staff_name\',true); ?>
        </h2>

        <h2 class="staffrole">
            <?php echo get_post_meta($post->ID,\'staff_role\',true); ?>
        </h2>

        <h2 class="staffnumber">
            <?php echo get_post_meta($post->ID,\'staff_telephone_number\',true); ?>
        </h2>

        <h2 class="staffemail">
            <?php echo get_post_meta($post->ID,\'staff_email_address\',true); ?>
        </h2>

    </div>
    <?php endwhile;

        // 2nd loop
        wp_reset_postdata();
        /* The 2nd Query (without global var) */
        $query2 = new WP_Query( $args2 );
        // The 2nd Loop
        while( $query2->have_posts() ) {
        $query2->next_post();

    ?>

    <div class="col-md-3 spacetop">

        <a href="<?php get_permalink();?>"><img src="<?php echo get_post_meta($post->ID,\'image\',true); ?>"></a>
        <h2 class="staffname">
            <?php echo get_post_meta($post->ID,\'staff_name\',true); ?>
        </h2>

        <h2 class="staffrole">
            <?php echo get_post_meta($post->ID,\'staff_role\',true); ?>
        </h2>

        <h2 class="staffnumber">
            <?php echo get_post_meta($post->ID,\'staff_telephone_number\',true); ?>
        </h2>

        <h2 class="staffemail">
            <?php echo get_post_meta($post->ID,\'staff_email_address\',true); ?>
        </h2>

    </div>
    <?php
    // Restore original Post Data
    wp_reset_postdata();
    }
    ?>
现在,让我们来谈谈你真正的问题,这里缺少/错误了几件事

首先,正如@cybnet所说,$args2 在任何地方都没有定义。如果“所有其他帖子”只是普通的帖子类型的帖子,我也不认为有必要在这里启动新的查询(这是我可以从您的代码中假设为$args2 是空的)。您只需启动一个普通循环即可。这个循环只会循环通过正常的帖子,而不是CPT。

其次,什么是$query2->next_post();. 你不可能从你提到的抄本页面上得到这个。这应该是$query2->the_post(); 一直如此。

第三,你说你需要显示“所有其他帖子”,但你在第二个循环中再次获得了与第一个循环相同的数据,因此我不理解这一点,出于这个原因,我不打算对此作进一步评论。

根据我所看到的和他们理解您的代码和问题的方式,下面是我将要做的

<?php
 $args = array( \'post_type\' => \'cripps_staff\', \'posts_per_page\' => 300 );
    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post();
?>  

    <div class="col-md-3 spacetop">
        <a href="<?php get_permalink(); ?>"><img src="<?php echo get_post_meta($post->ID,\'image\',true); ?>"></a>

        <h2 class="staffname">
            <?php echo get_post_meta($post->ID,\'staff_name\',true); ?>
        </h2>

        <h2 class="staffrole">
            <?php echo get_post_meta($post->ID,\'staff_role\',true); ?>
        </h2>

        <h2 class="staffnumber">
            <?php echo get_post_meta($post->ID,\'staff_telephone_number\',true); ?>
        </h2>

        <h2 class="staffemail">
            <?php echo get_post_meta($post->ID,\'staff_email_address\',true); ?>
        </h2>

    </div>
    <?php endwhile;

        // 2nd loop
        wp_reset_postdata();

        while ( have_posts() ) : the_post();

    ?>

    <--- Your contents of "All other posts" --->

    <?php
你应该看看this tutorial from catswhocode 关于多个循环。您也可以在codex about multiple loops. 请,请,此页面在使用时需要进行编辑query_posts, 绝对不能使用。WP_Query 应在所有示例中使用。

根据我给你的信息和这些链接,你应该能够解决你的问题

SO网友:Archie Butler

在经历了Wordpress集成循环php最黑暗的领域之后,我终于设法让WP查询完全按照客户的要求工作。

我的代码比上面简单的代码更加困难,因为我构建的自定义主题(基于214个主题,但与css引导集成)使用了“get\\u template\\u part”,所以循环都发生在不同的地方。

不管怎样,我在几个小时后就开始工作了:

<?php if ( have_posts() ) : ?>
            <?php
                // Start the Loop.
                while ( have_posts() ) : the_post();
                $do_not_duplicate[] = $post->ID;
                get_template_part( \'content\', \'peopleformat\' ); 
                                    // This is where my content display template is
                ?>
                                    <?php endwhile; ?>
                <?php
                // 2nd loop
                    $args = array( \'post_type\' => \'cripps_staff\',\'posts_per_page\' => 300 );
            $loop = new WP_Query( $args );
            while ( $loop->have_posts() ) : $loop->the_post();
            if (in_array($post->ID, $do_not_duplicate)) continue;

                ?>

                    <!--Second loop content here-->


                <?php endwhile; ?> 
然后,permalinks返回到搜索结果,而不是post permalink,我使用以下方法解决了这一问题:

<a href=\'<?php echo get_permalink($post->ID); ?>\'>
此外,正如您所看到的,我必须使用一个数组来停止复制,根据本文,该数组从第一个循环开始,到第二个循环结束:https://codex.wordpress.org/The_Loop#Multiple_Loops_in_Action

非常感谢彼得·古森为我指明了正确的方向,肯尼会说:“我今天学到了一些东西!”。

结束

相关推荐

从wp-Query获取数据,在循环之外&不更改url

我正在基于自定义分类法在wordpress上进行高级搜索。我已经被困72小时了,所以我希望能得到一些帮助或思考。。。步骤1——在js文件中,查询字符串如下所示:if (jQuery(\'#s\').val() == \'\'){ URL = \"/?genre=\" + genre + \'...other Stuff\' #content\'; }else{ URL = \"/?s=\"+searchQueryString+\"&genre=\" + genre +\'.