我正在使用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}}/">
感谢您的期待!
答案 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;让我知道这是否成功。祝你好运