基于教程的搜索表单不起作用

时间:2013-04-18 作者:Kirsty Marks

Ive基于这一主题,复制了一个教程,并构建了以下搜索框:-

<header>
    <h1 class="page-title"><?php 
    printf( 
        __( \'Search Results for: %s\', \'PCDConsulting\' ), 
        \'<span>\' . get_search_query() . \'</span>\' 
    ); 
    ?></h1>
</header>


<?php /* Start the Loop */ 
if ( have_posts() )
{
    while ( have_posts() )
    {
        the_post(); 
        get_template_part( \'content\', get_post_format() ); 
    }
}
else
{
?>
    <article id="post-0" class="post no-results not-found">
        <header class="entry-header">
            <h1 class="entry-title"><?php _e( \'Nothing Found\', \'PCDConsulting\' ); ?></h1>
        </header>
        <div class="entry-content">
            <p><?php 
            _e( \'Sorry, but nothing matched your search criteria. Please try again with some different keywords.\', 
                \'PCDConsulting\' 
            ); 
            ?></p>
        </div>
    </article>
<?php
}
这也是我的搜索表单:

<form method="get" id="searchform" action="<?php echo esc_url( home_url( \'/\' ) ); ?>">

<form id="searchform" method="get" action="<?php bloginfo(\'template_url\'); ?>/MilkNHny/search.php">



     <input type="text" name="s" value="Search PCD" onblur="if(this.value == \'\'){ this.value = \'Search PCD\'; this.style.color = \'#BBB\';}" onfocus="if(this.value == \'Search PCD\'){ this.value = \'\'; 

     this.style.color = \'#000\';}" style="color:#BBB;" placeholder="" /><input type="submit" value="Search" />



 </form>
它实际上没有归还任何东西,如果我遗漏了什么,请有人告诉我好吗?

www.milknhny。co.uk/SofiaWork公司

提前谢谢Kirsty

EDIT

我复制了twentyeleven主题的搜索和结果,我不明白为什么它仍然不起作用:S

<?php get_header(); ?>
<?php get_sidebar(\'slider\'); ?>

<div class="maincontent">


<div class="mctitle"><div class="questiontriangle"></div><?php echo get_the_title(); ?>    </div>   
    <?php if ( have_posts() ) : ?>
<div class="maincontentwrap" id="post-<?php the_ID(); ?>">
        <header class="page-header">
            <h1 class="page-title"><?php printf( __( \'Search Results for: %s\', \'PCDConsulting\' ), \'<span>\' . get_search_query() . \'</span>\' ); ?></h1>
        </header>



        <?php /* Start the Loop */ ?>
        <?php while ( have_posts() ) : the_post(); ?>
            <?php get_template_part( \'content\', get_post_format() ); ?>
        <?php endwhile; ?>



    <?php else : ?>

        <article id="post-0" class="post no-results not-found">
            <header class="entry-header">
                <h1 class="entry-title"><?php _e( \'Nothing Found\', \'PCDConsulting\' ); ?></h1>
            </header>

            <div class="entry-content">
                <p><?php _e( \'Sorry, but nothing matched your search criteria. Please try again with some different keywords.\', \'PCDConsulting\' ); ?></p>
                <?php get_search_form(); ?>
            </div><!-- .entry-content -->
        </article><!-- #post-0 -->

    <?php endif; ?>

    </div>
这里有什么我严重缺失的吗????

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

Crystal Ball编程以及搜索框失败的原因您的表单因此而失败:

action="<?php bloginfo(\'template_url\'); ?>/MilkNHny/search.php"
你应该never 通过URL直接调用模板。

您的模板假设WordPress环境已经加载,这是一个公平的假设。然而,因为您直接调用了它,所以它没有。

搜索php是WordPress搜索时寻找的模板。它不进行实际搜索。如果我们应用一些逻辑,浏览器就会进行搜索。php和Immediately尝试在不显示以下内容的情况下显示结果:

费心实际执行搜索,加载插件和主题,检查重写规则,清理数据,因为PHP没有crystal ball功能,所以出错了。抱歉,如果这看起来很残酷,但这一点需要有效地证明。

请记住,计算机是按指示执行的,而不是按预期执行的。如果你不能回答“为什么会这样?”或者“它怎么知道?”

搜索请求的工作原理当您转到URL时,WordPress会查找一个大的正则表达式列表,并查看哪个是第一个匹配的正则表达式。这些“regex”告诉WordPress如何映射/category/example-category/hello-world 它可以传递到WP\\u查询中,例如。name=hello-world. 这些参数与WP\\U查询中使用的参数相同,后者是post循环的来源。

其中一个参数是s. 搜索表单通过URL传入搜索查询,例如:

example.com/?s=helloworld
WordPress然后传递此s 参数转换为其主循环查询,并在心里记下:

“嘿s 事情是这样的,这一定是一个搜索查询!主题是否有搜索。php?加载搜索。PHP模板!!!!!!(ps:如果我们没有加载index.php)

现在WordPress启动了WP_Query( array ( \'s\' => \'helloworld\' ) ), 所有内容都已包装好,因此您可以使用have\\u posts等将其打印出来

那么基本的搜索表单是

现在我们了解了搜索查询的工作原理,让我们看看基本标记:

<form method="GET" action="<?php echo home_url(); ?>">
    <input type="text" name="s">
</form>
由于GET变量是在URL中传递的,所以POST变量是在地址栏中看不到的标题中传递的home_url() 因为这是网站的主要索引。我们可以通过以下方式在日期档案的类别中搜索:?s=在其他页面的末尾,但假设我们要搜索整个网站name="s" 因为这是WordPress用来指定搜索字符串的查询var,所以我们可以使用其他函数进一步扩展它,例如get_search_query() 等等,但这些都不是必需的。

另外,您也不需要从前端提交搜索字符串。假设您想添加一个框,其中列出包含“Moomins”一词的帖子(因为每个人都喜欢Moomins)。

我可以通过使用s 参数,例如:

$q = new WP_Query( \'s=Moomins\' );
$while ( $q->have_posts() ) {
    $q->the_post();
    the_title();
}
wp_reset_postdata(); // clean up after ourselves
嘿,presto,搜索“Moomins”的帖子标题列表

结束

相关推荐

Search result by range?

我必须搜索标签或自定义字段中有数字(价格)的帖子:示例152。每个帖子都有价格标签。我如何搜索所有高于价格的帖子,例如,我需要搜索所有标价至少为100的帖子。类似/?s=关键字(&M);价格>=300Thx公司