【问题标题】:counting content with tag in foreach loop wordpress在foreach循环wordpress中使用标签计算内容
【发布时间】:2018-04-06 00:28:50
【问题描述】:

我试图仅显示帖子数量超过特定数量的标签。为了实现这一点,我修改了我的 tag-links.php 代码,如下所示。但是有了这段代码,我得到了一些奇怪的行为。我的页面在内容数量下方不显示任何标签,没关系,但有时它也会隐藏其他标签。当我刷新页面时,它将显示不同的标签或不显示任何标签。我是 php 语法的新手,所以我不确定,但代码似乎正确。你能告诉我代码问题,或者解决我问题的任何实用方法吗?

PS:代码中也包含这个功能,每个标签都会将用户重定向到带有这个特定标签的随机帖子,效果很好。

<?php
    $tags      = get_the_tags( $post->ID );
    $separator = ' ';
    $output    = '';
    if ( $tags ) {
        $link = "";
        $xnumber = 0;  //number for contents with specific tag
        echo '<div class="entry-tags">';
        echo "<p><span>" . __(  ) . "</span>";
        foreach ( $tags as $tag ) {
            $posts = get_posts("post_type=post&orderby=rand");
            foreach($posts as $post) {
                if(has_tag($tag->term_id)) {
                    $xnumber++;
                    if($xnumber >= 1) {
                        $link = get_permalink($post);
                        break 1;
                    } else {  }
              } else {  }
            }
            if($xnumber >= 1) {
                $output .= '<a href="' . esc_url( $link ) . '" title="' 
                        . esc_attr( sprintf( __( "View all posts tagged %s",
                        'tracks' ), $tag->name ) ) . '">' . esc_html( $tag->name ) 
                        . '</a>' . $separator;
                unset($link);
                unset($xnumber);
            } else { 
                unset($link);
                unset($xnumber);
            }               
        } 
        echo trim( $output, $separator );
        echo "</p>";
        echo "</div>";
    }

【问题讨论】:

  • 替换未设置($xnumber);到 $xnumber = 0;
  • 很抱歉,但它没有帮助。同样的行为仍在继续。

标签: php wordpress random foreach tags


【解决方案1】:

好的,有几件事:

1) 您没有按照记录的方式使用 get_posts 函数。您应该传入一组设置。这是文档的链接:https://developer.wordpress.org/reference/functions/get_posts/

2) get_posts() 函数的默认限制为 5 条记录。而且您以随机顺序带回列表。因此,有时您获得的 5 条记录会带有您要查找的标签,而有时则不会。如果您希望它检查更多记录,则需要更改编号。

以下示例显示使用“tax_query”在“流派”自定义分类下标记为“爵士”的帖子:

$args = array(
    'tax_query' => array(
    array(
        'taxonomy' => 'genre',
        'field' => 'slug',
        'terms' => 'jazz'
        )
    )
);
$postslist = get_posts( $args );

这可能是您正在寻找的更多...

使用帖子标签的更好示例:

$args = array(
    'tax_query' => array(
        array(
        'taxonomy' => 'post_tag',
        'field' => 'slug',
        'terms' => $tag
        )
    )
};

【讨论】:

  • 谢谢,我会试试这个解决方案。但我想清楚地了解这个功能。我之前已经获得了该解决方案的一些文档,但它似乎很复杂,我不明白分类、字段或术语代表什么。
  • 添加了第二个示例,该示例为您提供了您正在尝试做的直接示例。
  • 我仍然遗漏了一些东西,不知何故这个数组没有填充这个查询,如果我将计数限制设置为零,标签变为可见,但如果我使用任何大于零的数字,如果语句从未执行并且我看不到任何标签。我的代码实现就像..
  • echo '
  • 好的,我无法找出示例数组的问题,但我找到了另一个解决方案,现在它正在工作。它正在使用 tax_query,我的代码是: $posts = get_posts( array( 'tax_query' => array( array( 'taxonomy' => 'post_tag', 'field' => 'slug', 'terms' => $tag ) ) ) );
猜你喜欢
相关资源
最近更新 更多
热门标签