获取匹配术语段头两个字母的帖子(wp查询)

时间:2020-11-12 作者:Jamil Ahmad

我想获取所有的帖子,这些帖子的词条与搜索信的前两个字母匹配。例如,我有术语8027179、8027180、8247180。现在我想分配字母80,并获取附在8027179和8027180上的帖子。如果需要更多解释,请告诉我。

$args = array(
    \'post_type\' => \'tax-services\',
    \'order\' => \'DESC\',
    \'posts_per_page\' => -1,
    \'tax_query\' => array(
        array(
            \'taxonomy\' => \'store_number\',
            \'field\' => \'slug\',
            \'terms\' => \'80\', //first letters of slug
        )
    )
);

1 个回复
最合适的回答,由SO网友:Howdy_McGee 整理而成

不幸的是,似乎没有办法抓住术语;“如”;名字或鼻涕虫。请参见Taxonomy Parameters in WP_Query. 但我们可以将其分解为两个查询。

通过部分段塞匹配获取术语ID我们可以使用WPDB或get_terms(). 我更喜欢WPDB,因为get_terms() 没有slug__like 参数,但aname__like. 如果可以的话,那么调用将如下所示:

$terms_ids = get_terms( array(
    \'taxonomy\'      => \'store_number\',
    \'fields\'        => \'ids\',
    \'hide_empty\'    => false,
    \'name__like\'    => \'80\',
) );
如果我们想通过slug专门抓取,可以使用以下函数:

/**
 * Grab term IDs by partial slug match
 * 
 * @param String $partial
 * @param String $taxonomy
 * 
 * @return Array $term_ids
 */
function wpse378026_term_ids_by_partial( $partial, $taxonomy ) {
    
    global $wpdb;
    
    $slug_like = $wpdb->esc_like( $partial ) . \'%\';
    
    $term_ids = $wpdb->get_col( $wpdb->prepare( "
        SELECT t.term_id
        FROM {$wpdb->terms} AS t
        INNER JOIN {$wpdb->term_taxonomy} AS tt ON t.term_id = tt.term_id
        WHERE t.slug LIKE %s AND
            tt.taxonomy = %s
    ",
        $slug_like,
        $taxonomy
    ) );
    
    return $term_ids;
    
}

// Function call
$term_ids = wpse378026_term_ids_by_partial( \'80\', \'store_number\' );
然后,我们可以在WP\\U查询中使用术语ID,如下所示:

$stores = new WP_Query( array(
    \'post_type\' => \'tax-services\',
    \'order\'     => \'DESC\',
    \'posts_per_page\' => -1,
    \'tax_query\' => array( array(
        \'taxonomy\'  => \'store_number\',
        \'field\'     => \'term_id\',
        \'terms\'     => $term_ids,
        \'operator\'  => \'IN\',
    ) )
) );

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post