php – 在分类页面上显示标签
我目前在我的CMS中有选项,可以将标签添加到我的自定义帖子类型单页面.
现在,我想将此标记显示为“特色”项目. <?php $args = array( 'tag_slug__and' => array('sector1'),'post_type' => array( 'sectors' ) ); $loop = new WP_Query( $args ); while ($loop->have_posts() ) : $loop->the_post(); ?> <a href="<?php echo get_permalink(); ?>"> <?php echo "<div class='col-md-6' style='margin-bottom:20px;'>"; ?> <div class="row mobilemargin"> <div class="categorytiletextsector1"> <div class="col-md-6 col-sm-6 col-xs-12 nopr"><?php echo get_the_post_thumbnail( $page->ID,'categoryimage',array('class' => 'sector1img hovereffect')); ?> </div> <div class="col-md-6 col-sm-6 col-xs-12"> <div class="testdiv"> <h5><?php the_title(); ?></h5> <p><?php the_excerpt(); ?></p> </div> </div> </div> </div> <?php echo "</div>"; ?> </a> <?php endwhile; ?> <?php wp_reset_query(); ?> 现在,我的问题是,这将在每个类别页面上显示所选标签,因为它在分类页面上设置. 如何才能在当前类别中设置此项. 因此,如果我的项目位于“类别A”中,则只有“A”的类别页面会使用项目类别显示此项? 任何帮助都会很棒 编辑. $args = array( 'tag_slug__and' => array( 'sector1' ),'post_type' => array( 'sectors' ),'tax_query' => array( array( 'taxonomy' => 'sectors','terms' => get_queried_object_id(),),);
您的问题是您的自定义查询.这里一个非常重要的注意事项是,永远不要更改主查询在任何类型的存档页面或主页上用自定义查询替换.我最近在
this post详细解释了一切.请务必阅读它和所有链接的帖子,因为这将使您受益匪浅
您的解决方案是删除自定义查询,并将其替换为我们都知道的默认循环 if ( have_posts() ) { while ( have_posts() ) { the_post(); // Your template tags and html mark up } } 如果您需要更改主查询中的任何内容,请使用pre_get_posts执行此操作 编辑 您最好的想法是使用完整的tax_query来显示所选分类术语和标记中的帖子 您可以尝试这样的事情:(至少需要PHP 5.4.此外,这个未经测试) $q = get_queried_object(); $args = [ 'post_type' => 'sectors','tax_query' => [ [ 'taxonomy' => $q->taxonomy,'terms' => $q->term_id,'include_children' => false // Exclude child terms ],[ 'taxonomy' => 'post_tag','field' => 'slug','terms' => 'sector1',//I believe this is the slug ],],]; 对于较旧的PHP版本,请使用以下内容 $q = get_queried_object(); $args = array( 'post_type' => 'sectors','tax_query' => array( array( 'taxonomy' => $q->taxonomy,'include_children' => false // Exclude child terms ),array( 'taxonomy' => 'post_tag',//I believe this is the slug ),); 编辑2 要排除sector1标记和任何其他sectorX标记中的帖子,您可以执行以下操作 您可以尝试这样的事情:(至少需要PHP 5.4.此外,//I believe this is the slug 'operator' => 'NOT_IN' ],//I believe this is the slug 'operator' => 'NOT_IN' ),); 请注意,您可以像这样将一系列标签传递给terms参数 'terms' => array( 'sector1','sector2','etc' ), 或短数组语法 'terms' => ['sector1','etc'], 编辑3 由于这是您的主要查询,因此您需要进行一些更改.正如我所说,删除自定义查询.你的主循环看起来应该是这样的 <?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?> <a href="<?php echo get_permalink(); ?>"> <?php echo "<div class='col-md-6 col-sm-6 col-xs-12' style='margin-bottom:30px;'>"; ?> <div class="row mobilemargin"> <div class="categorytiletext2"> <div class="col-md-6 col-sm-12 col-xs-12 nopr"><?php echo get_the_post_thumbnail( $page->ID,array('class' => 'hovereffect newimgheight')); ?> </div> <div class="col-md-6 col-sm-12 col-xs-12 mobilewhite"> <div class="testdiv"> <h5 class="captext"><?php the_title(); ?></h5> <?php $trimexcerpt = get_the_excerpt(); $shortexcerpt = wp_trim_words( $trimexcerpt,$num_words = 10,$more = '… ' ); echo '<a href="' . get_permalink() . '"><p>' . $shortexcerpt . '</p></a>'; ?> </div> </div> </div> </div> <?php echo "</div>"; ?> </a> <!-- If there is no posts,display an error message --> <?php endwhile; else: ?> <p><?php _e('Sorry,no posts matched your criteria.'); ?></p> <?php endif; ?> <!-- If there is no posts,display an error message --> 您现在可以使用pre_get_posts从分类页面中删除所需的标记.在functions.php中,执行以下操作:(需要PHP 5.3,并且未经测试) add_action( 'pre_get_posts',function ( $q ) { if ( !is_admin() && $q->is_main_query() && $q->is_tax() ) { $q->set( 'tag__not_in',array( 145 ) ); } }); 对于旧版本使用 add_action( 'pre_get_posts','so30256167_remove_tags' ); function so30256167_remove_tags( $q ) { if ( !is_admin() && $q->is_main_query() && $q->is_tax() ) { $q->set( 'tag__not_in',array( 145 ) ); } } 只需记住将145更改为您的确切标记ID或标记数组 编辑4 如果您没有标记ID,则可以使用get_term_by()从标记slug中获取标记ID.这样的事情会做:(需要PHP 5.3,并且还未经测试) add_action( 'pre_get_posts',function ( $q ) { if ( !is_admin() && $q->is_main_query() && $q->is_tax() ) { $tag_object = get_term_by( 'slug','sector1','post_tag' ); $tagID = $tag_object->term_id; $q->set( 'tag__not_in',array( $tagID ) ); } }); 对于旧版本使用 add_action( 'pre_get_posts','so30256167_remove_tags' ); function so30256167_remove_tags( $q ) { if ( !is_admin() && $q->is_main_query() && $q->is_tax() ) { $tag_object = get_term_by( 'slug',array( $tagID ) ); } } 如果您有一系列标签段,则可以替换以下内容 $tag_object = get_term_by( 'slug','post_tag' ); $tagID = $tag_object->term_id; $q->set( 'tag__not_in',array( $tagID ) );/* 同 $tag_array = array( 'slug1','slug2','slug3' ); foreach ( $tag_array as $tag ) { $tag_object = get_term_by( 'slug',$tag,'post_tag' ); $tagids[] = $tag_object->term_id; } $q->set( 'tag__not_in',$tagids ); 只记得相应地改变slu .. 编辑5 你在带有pre_get_posts的functions.php中的最终代码应该是 add_action( 'pre_get_posts','so30256167_remove_tags' ); function so30256167_remove_tags( $q ) { if ( !is_admin() && $q->is_main_query() && $q->is_tax() ) { $tag_array = array( 'sector1','sector3','sector4' ); foreach ( $tag_array as $tag ) { $tag_object = get_term_by( 'slug','post_tag' ); $tagids[] = $tag_object->term_id; } $q->set( 'tag__not_in',$tagids ); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |