在foreach循环wordpress中使用标记计数内容

时间:2018-04-06 00:28:50

标签: php wordpress random foreach tags

我正在尝试仅显示具有超过特定数量的帖子的标签。为此,我修改了我的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>";
    }

1 个答案:

答案 0 :(得分:0)

好的,所以有几点:

1)你没有按照记录的方式使用get_posts函数。你应该传递一系列设置。以下是文档链接:https://developer.wordpress.org/reference/functions/get_posts/

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

以下示例显示标记为'jazz'的帖子,在'genre'自定义分类法下,使用'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
        )
    )
};