WP_QUERY按类别和相似名称获取帖子(如)

时间:2014-03-04 作者:Mikel

我有个小问题WP_Query. 我想获得按类别筛选的帖子,并使用类似的项目名称(如query),因此我尝试以下代码:

$args=array(
\'post_type\' => \'post\',
\'post_status\' => \'publish\',
\'category_name\' => \'projects\',
\'name__like\' => \'Proj\');

$my_query = null;
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
while ($my_query->have_posts()) : $my_query->the_post();
    echo \'<div class="Entradas">\'.get_the_title().\'</div>\';
endwhile;
}
wp_reset_query();
实际上,它显示按类别筛选的项目,但name__like 不工作。

有什么建议可以解决这个问题吗?

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

我没有使用任何name__like 或过滤器。这就是我最终成功的原因:

$categoria = $_GET[\'categoria\'];
$filtro = $_GET[\'texto\'];

$args = array(
    \'post_type\' => \'post\',
    \'tax_query\' => array(
        \'relation\' => \'AND\',
        array(
            \'taxonomy\' => \'category\',
            \'field\' => \'slug\',
            \'terms\' => $categoria
        )
    )
);

$my_query = null;
$my_query = new WP_Query( $args );

if( $my_query->have_posts() ) {
while ($my_query->have_posts()) : $my_query->the_post();
$postid = $_GET[\'id\'];
$content_post = get_post($postid);
$contenido= $content_post->post_content;
$titulo= $content_post->post_title;

if($filtro!="") {
    $tit=strtoupper($titulo); 
    $fil=strtoupper($filtro); 
    $con=strtoupper($contenido);
    if ((strpos($tit,$fil) !== false) || (strpos($con,$fil) !== false) ) {
        echo \'<div class="Entradas">\'.$titulo.\'</div>\';
    }
} else {
    echo \'<div class="Entradas">\'.$titulo.\'</div>\';
}
endwhile;
echo \'[|Contador|]\'.$my_query->post_count;
    //this is for displaying the number of posts
 }
wp_reset_query();
所以我得到了这些帖子,并检查它们的标题或内容是否包含我想要的值,我确信一定有使用WP\\u查询选项的解决方案,但我更喜欢这种方式。

SO网友:birgire

重新访问并简化答案:

您可以尝试:

$args = [
    \'post_type\'     => \'post\',
    \'post_status\'   => \'publish\',
    \'category_name\' => \'projects\',
    \'_name__like\'   => \'proj*\'         // <-- our new input argument!
];
$my_query = new WP_Query( $args );
我们在这里创建了_name__like 输入参数。它支持通配符*, 例如:

    \'_name__like\'    => \'a*b*\'        
请注意,草稿帖子没有post_name 在发布前设置。

我们使用以下插件来支持此新参数:

/**
 * Plugin Name: Support for post name like in WP_Query
 * Description: Uses the _name__like argument and supports wildcard *.
 * Plugin URI:  http://wordpress.stackexchange.com/a/136758/26350
 * Author:      Birgir Erlendsson (birgire)
 * Version:     0.0.1
 */

add_filter( \'posts_where\', function( $where, $q )
{
    if( $name__like = $q->get( \'_name__like\' ) )
    {
        global $wpdb;
        $where .= $wpdb->prepare(
            " AND {$wpdb->posts}.post_name LIKE %s ",
            str_replace( 
                array( \'**\', \'*\' ), 
                array( \'*\',  \'%\' ),  
                mb_strtolower( $wpdb->esc_like( $name__like ) ) 
            )
        );
    }       
    return $where;
}, 10, 2 );

结束

相关推荐

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

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