gpt4 book ai didi

php - 在分类页面上显示标签

转载 作者:可可西里 更新时间:2023-11-01 12:39:17 27 4
gpt4 key购买 nike

我目前在我的 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,
'terms' => $q->term_id,
'include_children' => false // Exclude child terms
),
array(
'taxonomy' => 'post_tag',
'field' => 'slug',
'terms' => 'sector1', //I believe this is the slug
),
),
);

编辑2

要排除 sector1 标签和任何其他 sectorX 标签中的帖子,您可以执行以下操作

您可以尝试这样的操作:(至少需要 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
'operator' => 'NOT_IN'
],
],
];

对于较旧的 PHP 版本,请使用以下内容

$q = get_queried_object();
$args = array(
'post_type' => 'sectors',
'tax_query' => array(
array(
'taxonomy' => $q->taxonomy,
'terms' => $q->term_id,
'include_children' => false // Exclude child terms
),
array(
'taxonomy' => 'post_tag',
'field' => 'slug',
'terms' => 'sector1', //I believe this is the slug
'operator' => 'NOT_IN'
),
),
);

请注意,您可以像这样将一组标签传递给 terms 参数

'terms' => array( 'sector1', 'sector2', 'etc' ),

或短数组语法

'terms' => ['sector1', 'sector2', '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, 'categoryimage', 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 或一组标签 ids

编辑 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', 'sector1', 'post_tag' );
$tagID = $tag_object->term_id;

$q->set( 'tag__not_in', array( $tagID ) );
}
}

如果你有一个标签 block 数组,你可以替换下面的

$tag_object = get_term_by( 'slug', 'sector1', '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 );

请记住相应地更改 slug

编辑 5

你在 functions.php 中带有 pre_get_posts 的最终代码应该是

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', 'sector2', 'sector3', 'sector4' );
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 );
}
}

关于php - 在分类页面上显示标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30256167/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com