在标签中包含具有特定文本字符串的所有文章的循环

时间:2017-07-20 作者:Holger Koenemann

我想要实现的是:一个循环,显示标签中包含特定文本字符串的所有文章。

For example:

如果我有一篇标有“咖啡杯”和一篇“咖啡豆”的文章。现在,由于文本字符串“coffee”(咖啡),我想同时显示它们。

默认查询如下:

query_posts( \'tag=coffee\' );
将不显示任何内容。它只适用于标记有“咖啡”的文章

是的,我知道,我可以对这两个标记使用数组。但就我而言,我不知道将来可能使用的所有标签。我只知道其中一些会以“咖啡”开始。可以有数百个标签。。。或者只是上面两个。。。但我想抓住他们。

1 个回复
SO网友:Johansson

基于@birgire总是有用的评论,我确实为您编写了一个变通方法。我要做的是首先找到与搜索字符串匹配的术语。然后,根据找到的术语,我将在这些术语中进行查询。

function wpse_posts_by_tagname( $string ) {

    // Let\'s find every tag that has \'coffee\' in it\'s name
    $term_args = array(
        \'taxonomy\'             => \'post_tag\',
        \'fields\'               => \'ids\',
        \'name__like\'           => $string,
        // \'description__like\' => $string, // You can also search in description. 
        // \'search\'            => $string, // We can even search in the term\'s name! 
    );
    $terms = get_terms( $term_args );

    // Let\'s make an array of term IDs
    if ( empty( $terms ) || is_wp_error( $terms ) )
        esc_html_e( \'No matches found\', \'text-domain\' );

    // Alright we got\'em, now query based on these
    $query_args = array(
        \'post_type\'      => \'post\',
        \'tag__in\'        => (array) $terms,
        \'posts_per_page\' => 10 // Optional limitation of posts per page
    );
    $tag_query = new WP_Query( $query_args );

    if( $tag_query->have_posts() ){
        while( $tag_query->have_posts() ){
            $tag_query->the_post();
            the_title( 
                sprintf( \'<h2><a href="%s">\', esc_url( get_permalink() ) ),
                \'</a></h2>\' 
            );
        }
        wp_reset_postdata();
    } else {
        esc_html_e( \'No matches found\', \'text-domain\' );
    }
}
另外,值得注意的是,您应该使用WP_Query 而不是query_posts. 互联网上关于这方面的文章层出不穷,所以我跳过这部分。

结束