仅在其类别中显示帖子(不是父级)

时间:2014-12-11 作者:SamNabz

我正在使用自定义帖子类型在我的网站上添加/显示PDF文档(帖子)。

分类法-wpl_documents_category

岗位类型-post_documents

一切都很顺利。但是,我想只在其类别中显示帖子-无论是父类别还是子类别。

下面的示例

Hierarchy: 父类别->;儿童类别1->;儿童Cat 2

Post Name: 虚拟文档

Post Category: 儿童Cat 2

默认情况下,WordPress将以所有3x级别显示此帖子。然而,我想要的是在它所属的类别中显示它(子类别2)only.

以下查询

<?php if ( $wp_query->have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
我想不出这一点,并尝试了各种方法/解决方案,但都无济于事。

非常感谢您对以上内容的任何想法/信息!

EDIT

Complete Query

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php
$pid = $post->ID;
$document_file = get_post_meta( $pid, \'wpl_document_file\', true);
$document_file_size = get_post_meta( $pid, \'wpl_document_file_size\', true);
$document_authors = get_post_meta( $pid, \'wpl_document_authors\', true);
?>
HTML标记在此处与响应上述信息的调用一起出现

Display Categories

<?php $term = get_term_by( \'slug\', get_query_var( \'term\' ), get_query_var( \'taxonomy\' ) ); if ($term->parent == 0) { ?>
<?php wp_list_categories(\'taxonomy=wpl_documents_category&depth=1&title_li=&child_of=\' . $term->term_id); ?>
这是我的全部archive-post_documents.php

<?php
/**
 * The default template for displaying documents archive
 *
 * @package WordPress
 */
?>

<?php get_header(); ?>
<div id="main" class="site-main container_12">
    <div id="primary" class="content-area ms grid_12"> 
        <div id="content" class="site-content">    
            <?php if (category_description( $category ) == \'\') { ?>
            <?php } else { ?>
            <article class="single">
                <div id="subcats" class="entry-content">          
                    <h2>Description</h2>
                    <?php echo category_description( $category_id ); ?>
                </div> 
            </article> 
            <?php } ?>             
            <?php
                $term = get_queried_object();
                $children = get_terms( $term->taxonomy, array(
                \'parent\'    => $term->term_id,
                \'hide_empty\' => 0,
                \'show_count\' => 0
                ) );
            if($children) {
            ?>
            <article class="single">
                <div id="subcats" class="entry-content">             
                    <?php 
                    $term = get_term_by( \'slug\', get_query_var( \'term\' ), get_query_var( \'taxonomy\' ) ); 
                    if ($term->parent == 0) { ?>
                    <h2>Browse Sub-categories:</h2> 
                    <ul>
                        <?php wp_list_categories(\'taxonomy=wpl_documents_category&depth=1&title_li=&child_of=\' . $term->term_id); ?>
                    </ul>   
                        <?php } else { ?>
                    <h2>Browse Sub-categories:</h2> 
                    <ul>
                        <?php wp_list_categories(\'taxonomy=wpl_documents_category&&title_li=&child_of=\' . $term->term_id); } ?>
                    </ul>     
                </div> 
            </article> 
            <?php } ?>             
            <div>&nbsp;</div>
        </div>    
    
        <div id="content" class="site-content js-masonry">
            <?php if ( have_posts() ) : ?>
            <?php while ( have_posts() ) : the_post(); ?>
            <?php //if ( $wp_query->have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
                <?php
                    $pid = $post->ID;
                    $document_file = get_post_meta( $pid, \'wpl_document_file\', true);
                    $document_file_size = get_post_meta( $pid, \'wpl_document_file_size\', true);
                    $document_authors = get_post_meta( $pid, \'wpl_document_authors\', true);
                    $icon = wplook_get_icon_name($document_file);
                ?>

                    <article id="post-<?php the_ID(); ?>" <?php post_class(\'item\'); ?>>
                        <?php if ( has_post_thumbnail() ) {?> 
                            <figure>
                                <a title="<?php the_title();?>" href="<?php echo $document_file; ?>" download="<?php preg_replace("/[^a-zA-Z0-9_-]/", "", the_title);?>">
                                    <?php the_post_thumbnail(\'document-image\'); ?>
                                </a>
                            </figure>
                        <?php } else {?> 
                            <figure>
                                <a title="<?php the_title();?>" href="<?php echo $document_file; ?>" download="<?php preg_replace("/[^a-zA-Z0-9_-]/", "", the_title);?>">
                                    <img data-lazy-loaded="true" style="display: block;" src="http://www.absa.asn.au/absainc/wp-content/uploads/2014/09/pdficon-260x173.jpg" class="attachment-document-image wp-post-image" alt="pdficon" height="173" width="260">
                                </a>
                            </figure>
                        <?php } ?>
                        
                        <div class="box-conten-margins">
                            <h1 class="entry-header">
                                <a title="<?php the_title(); ?>" href="<?php echo $document_file; ?>" download="<?php preg_replace("/[^a-zA-Z0-9_-]/", "", the_title);?>"><?php the_title(); ?></a>
                            </h1>
                            
                            <div class="short-description">
                                <p><i class="<?php echo $icon; ?>"></i> <strong>Size:</strong> <span class="filesize"><?php echo $document_file_size; ?></span></p>
                                <?php if ($document_authors) { ?>
                                <p><strong>Author(s):</strong> <?php echo $document_authors; ?></p>
                                <?php } ?>
                            </div>
                            
                            <div class="clear"></div>
                            
                            <div class="entry-meta">
                                <a class="buttonsx" href="<?php echo $document_file; ?>" download="<?php preg_replace("/[^a-zA-Z0-9_-]/", "", the_title);?>"><i class="<?php echo $icon; ?>"></i> <?php _e(\'Download PDF\', \'wplook\'); ?></a>
                                <div class="clear"></div>
                            </div>
                            
                        </div>
                    </article>
            
            <?php endwhile; wp_reset_postdata(); ?>
            <?php else : ?>
                <p><?php _e(\'Sorry, there are no documents to list. This could either be because you are not an ABSA member or, there are simply no documents in this category.\', \'wplook\'); ?></p>
            <?php endif; ?>
                
        </div>
        <div class="pagination-grid">
            <?php wplook_content_navigation(\'postnav\' ) ?>
        </div>
    </div>
    
    <div class="clear"></div>

</div><!-- #main .site-main -->
<?php get_footer(); ?>

1 个回复
SO网友:Pieter Goosen

这里有一个有趣的方法

概念我们需要一个术语列表,其中职位列在特定术语下,但使用传统方法,职位列在父、子和孙术语下。我们想要的是only 列出上一个任期内的职位,如果是孙辈,则该职位应仅列在孙辈任期下

当前代码存在问题,因为这只是一个归档页面,没有用作分类页面,所以这里有几个严重错误。以下代码

<div id="content" class="site-content">    
    <?php if (category_description( $category ) == \'\') { ?>
    <?php } else { ?>
    <article class="single">
        <div id="subcats" class="entry-content">          
            <h2>Description</h2>
            <?php echo category_description( $category_id ); ?>
        </div> 
    </article> 
    <?php } ?>             
    <?php
        $term = get_queried_object();
        $children = get_terms( $term->taxonomy, array(
        \'parent\'    => $term->term_id,
        \'hide_empty\' => 0,
        \'show_count\' => 0
        ) );
    if($children) {
    ?>
    <article class="single">
        <div id="subcats" class="entry-content">             
            <?php 
            $term = get_term_by( \'slug\', get_query_var( \'term\' ), get_query_var( \'taxonomy\' ) ); 
            if ($term->parent == 0) { ?>
            <h2>Browse Sub-categories:</h2> 
            <ul>
                <?php wp_list_categories(\'taxonomy=wpl_documents_category&depth=1&title_li=&child_of=\' . $term->term_id); ?>
            </ul>   
                <?php } else { ?>
            <h2>Browse Sub-categories:</h2> 
            <ul>
                <?php wp_list_categories(\'taxonomy=wpl_documents_category&&title_li=&child_of=\' . $term->term_id); } ?>
            </ul>     
        </div> 
    </article> 
    <?php } ?>             
    <div>&nbsp;</div>
</div>  
应删除。这会导致一大堆错误。如果打开debug,您将看到我在说什么。此代码只能在分类法或类别模板中使用,只需进行一些调整,或者如果存档页面实际用作具有适当条件标记的分类法页面,则此代码也只能在分类法或类别模板中使用。

工作流这是一个非常基本的列表,按字母顺序列出术语,而不考虑父项、子项或孙项

我们需要做的是,获取归档中特定于分类法的特定帖子类型的所有帖子的列表。这将使用tax_query 具有WP_Query. get_terms() 将用于获取属于指定分类法的术语列表。这将用于tax_query 去拿帖子。

我决定编写一个可以全局显示术语列表的函数。

当所有帖子都返回后,我们需要获得每个帖子所属的条款。为此,我们正在利用get_the_terms()

为了为属于父项和/或子项和/或孙子项的帖子做好准备,我将返回的术语数组排序为usort 根据术语ID,使行中最后一个术语显示在第一位。这个学期将是孙子或孩子。

但是,一个职位不能属于同一级别上的两个术语,例如,有两个子术语。如果发生这种情况,仍将使用具有最高术语ID的术语

排序数组中的第一个术语将用于创建此列表并在其下添加帖子标题

创建的新数组将按ksort 因此,术语列表按字母顺序排序。根据发布日期对帖子进行排序

我还添加了transient 使功能更快,资源消耗更少。此列表将每24小时更新一次,您可以根据需要进行更改,使其更长。选择与您添加新帖子的频率相对应的时间长度。如果您每周添加新帖子,请将临时时间设置为每周过期一次

要确保在删除、发布或更新帖子时更新列表,请transition_post_status 操作用于在发布、删除或更新帖子时删除瞬态

让我们编写代码,这是代码,将所有这些粘贴到函数中。php

function get_term_post_list( $taxonomy = \'category\', $post_type = \'post\' ) {

    if ( false === ( $q = get_transient( \'term_list\' ) ) ) {

        $q = \'\';

        $term_ids = get_terms( $taxonomy, \'fields=ids\' );
        if ( ! empty( $term_ids ) && ! is_wp_error( $term_ids ) ){

            $args = array( 
                \'posts_per_page\' => -1,
                \'post_type\' => $post_type,
                \'fields\' => \'names\',
                \'tax_query\' => array(
                    array(
                        \'taxonomy\' => $taxonomy,
                        \'field\'    => \'term_id\',
                        \'terms\'    => $term_ids,
                    ),
                ),
            );

            $query = new WP_Query($args); 
            ?><   
            if( $query->have_posts() ) {

                while ( $query->have_posts() ) { 

                    $query->the_post(); 

                    $a = \'<a href="\'. get_permalink() .\'">\' . get_the_title() .\'</a>\';

                    $all_terms = get_the_terms( $query->post->ID, $taxonomy );
                    $terms = array_values( $all_terms );        

                    usort( $terms, function ( $a, $b ) {
                        return ($a->term_id < $b->term_id) ? 1 : -1;
                    });

                    $b = ucfirst( $terms[0]->name );    

                    $q[$b][] = $a; // Create an array with the category names and post titles
                }

                /* Restore original Post Data */
                wp_reset_postdata();

            }

            ksort( $q );
        }

        set_transient( \'term_list\', $q, 24 * HOUR_IN_SECONDS );
    }
    return $q;
}

add_action( \'transition_post_status\', function ( $new_status, $old_status, $post )
{

    delete_transient( \'term_list\' );

}, 10, 3 );
如何使用这是如何在模板文件中使用代码,archive-post_documents.php

$lists = get_term_post_list( $taxonomy = \'wpl_documents_category\', $post_type = \'post_documents\'  );
foreach ($lists as $key=>$values) {

    echo $key;

    echo \'<ul>\';
        foreach ($values as $value){
            echo \'<li>\' . $value . \'</li>\';
        }
    echo \'</ul>\';
}

结束

相关推荐