木材:搜索结果不起作用

时间:2018-01-17 21:39:14

标签: wordpress timber

我正在使用Timber来主题一个当前处于本地开发环境中的WordPress网站。这是我第一个使用Timber的网站。它使用起来很有趣,但我仍然需要学习一些东西 - 特别是因为我更像是一个前端开发人员而且PHP不是我的专长。

我无法让搜索结果页面生效。似乎WordPress忽略了search.php文件并使用了index.php文件。我得到的搜索结果只显示了每个帖子'在与搜索查询无关的网站上。除了标准的WordPress' Post'和' Page'内容,我还有一个需要在搜索结果中显示的CPT和ACF扩展类别内容。

我有一个search.php和search.twig文件,我已经确定正在使用正确的TWIG模板。

我的search.php:

$templates = array( 'search.twig', 'archive.twig', 'index.twig' );
$context = Timber::get_context();

$context['title'] = 'Search results for '. get_search_query();
$context['posts'] = new Timber\PostQuery();

Timber::render( $templates, $context );

我的index.php:

$context = Timber::get_context();
$context['posts'] = new Timber\PostQuery(); //was: Timber::get_posts();

$templates = array( 'index.twig' );
if ( is_home() ) {
    array_unshift( $templates, 'search.twig', 'front-page.twig' );
}
Timber::render( $templates, $context );

请注意,我将search.twig添加到上面的模板中,否则搜索结果页面使用的是front-page.twig模板。

我的搜索.twig:

{% extends "base.twig" %}

{% block content %}
<h1>Your search results for:</h1>
    {% for post in posts %}
        <article class="tease tease-{{post.post_type}}" id="tease-{{post.ID}}">
                <h2><a href="{{post.link}}">{{post.title}}</a></h2>
                <p>{{post.get_preview}}</p>
                {% if post.get_thumbnail %}
                    <img src="{{post.thumbnail.src}}" />
                {% endif %}
        </article>
    {% endfor %}
{% endblock %}

我的搜索表单代码很简单:

<form role="search" method="get" action="{{site.url}}/">

感谢您的期待!

2 个答案:

答案 0 :(得分:1)

我有一个类似的问题让搜索工作,这是我的文件看起来像是为了让它工作。我希望这会有所帮助:

的search.php

  $templates = array( 'search.twig', 'archive.twig', 'index.twig' );
  $context = Timber::get_context();

  $context['search_query'] = get_search_query();
  $context['posts'] = new Timber\PostQuery();
  $context['pagination'] = Timber::get_pagination();

  Timber::render( $templates, $context );

.twig文件

<form method="get" role="search" action="{{ site.url }}">
  <input type="text" placeholder="Enter Keywords..." name="s">
  <input type="submit" value="Search" class="submit button--green">
  <input type="hidden" name="post_type" value="post">
</form>

值为“post”的隐藏输入将限制搜索范围仅搜索“post”帖子类型。您可以添加CPT的名称,它也只会搜索特定的CPT。

是这个html中最重要的事情,这让我很难过
name="s"

这是WP用于进行搜索的查询参数。

以下是我的search-results.twig模板,供您参考:

<section class="section__news-search-results">
  {% for post in posts %}
    <div class="news-item__container">
      <div class="row">
        <div class="col-xs-12 col-sm-12 col-md-4">
          <div class="image">
            {% if post.thumbnail.src %}
              <img src="{{post.thumbnail.src | resize(150, 150) }}" />
            {% endif %}
          </div> {# /.image #}
        </div> {# /.col #}

        <div class="col-xs-12 col-sm-12 col-md-8">
          <div class="copy">
            <p><small>{{ post.date }}</small></p>
            <p><strong>{{post.title}}</strong></p>
            <p>{{post.preview.length(25)}}</p>
          </div> {# /.copy #}
        </div> {# /.col #}
      </div> {# /.row #}
    </div> {# /.news-item__container #}
  {% endfor %}
</section>

答案 1 :(得分:0)

在Search.php中,您需要定义搜索查询,likeo。

$get_search_query = $context['search_query'] =  get_search_query();

如果您的帖子返回了某些内容,请调试search.php文件,否则您可以使用

$context['posts'] = Timber::get_posts();

最后,您的搜索表单应该是这样的

<form action="{{ site.link }}" role="search">
   <input name="search" type="search" autocomplete="off">
   <button>Search</button>
</form>

尝试&amp;让我知道这是否成功。祝你好运