Manually build WP_Query

时间:2015-10-19 作者:Phill Healey

我正在尝试在循环中手动构建查询。php”,它在WordPress中进行搜索时,从自定义帖子类型中输出一个包含3篇帖子的列表,该列表位于自动给出的结果上方。

因此,我得到了以下代码,可以按照我的意图显示这些结果:

<?php   
// The Query
$query1 = new WP_Query( array( \'post_type\' => \'sdm_downloads\', \'posts_per_page\' => 3) );

if ( $query1->have_posts() ) :
    echo \'<div style="background-color:#fffced; padding:10px;margin-bottom:20px;">\';
    echo \'<h3>Selected relevant items from our Briefings library:</h3>\';
    // The Loop
    while ( $query1->have_posts() ) {
        $query1->the_post();
    <article class="article-archive" id="post-<?php the_ID(); ?>">

        <header>
            <hgroup>
                <p><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( \'Permalink to %s\' ), the_title_attribute( \'echo=0\' ) ); ?>" rel="bookmark"><?php the_title(); ?></a>
                <p>
                <!--<p class="entry-meta">Posted <strong><?php echo human_time_diff(get_the_time(\'U\'), current_time(\'timestamp\')) . \' ago\'; ?></strong></p>-->
            </hgroup>
        </header>
    </article>
<?php
}
echo \'</div>\';
endif
?>
这很好,只是它从这个帖子类型中提取了三篇最新的帖子。因此,我想我需要手动添加搜索词,如下所示:

$query1 = new WP_Query( array( \'post_type\' => \'sdm_downloads\', \'posts_per_page\' => 3, \'s\' => $s) );
然而,这一点也没有显示出来。同样,如果用字符串替换s变量,仍然不会返回任何帖子。我甚至删除了除字符串以外的所有参数,但仍然没有得到任何结果,例如:

$query1 = new WP_Query( array( \'s\' => \'awards\') );
有什么想法,关于为什么会发生这种情况&/或者如何修复?

谢谢

如果我在没有指定\'s\'参数的情况下转储查询,我会得到以下结果

string(226) "SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type = \'sdm_downloads\' AND (wp_posts.post_status = \'publish\' OR wp_posts.post_status = \'private\') ORDER BY wp_posts.post_date DESC LIMIT 0, 3"
然而,如果我在WP\\u查询中添加一个“s”参数,则会得到以下转储:

string(32) "SELECT * FROM wp_posts WHERE 1=2" 
似乎只有当我启用Relevanssi搜索插件时,才会出现这种行为。我想我会去makers网站问问,看看他们是否能解释为什么会发生这种情况。

同时,如果有人对如何处理这个问题有任何建议,我很乐意听取他们的意见。

1 个回复
SO网友:Hernan

如果您使用的是relevansi,那么它会干扰本机搜索(不知道具体在哪一点),因此,标准查询不起作用。

根据我在plugin\'s page, 这似乎起到了作用。只需运行relevansi函数将结果附加到查询中,方法如下:

relevanssi_do_query($query1);
请注意,该参数是您之前创建的查询对象:

$query1 = new WP_Query( array( \'post_type\' => \'sdm_downloads\', \'posts_per_page\' => 3) );

相关推荐

如何将变量传递给Get_Search_Form()?

是否可以将变量传递给get_search_form()? 我在两个地方使用它:一个在标题中,另一个在内容的搜索页面上。后者必须具有附加类,例如。search--full. 我试着用is_search() 但尽管它在其他页面上运行良好,但在搜索页面上,两种表单都有search--full 班