我正在尝试使用Timber和Twig在<select>
元素中列出特定帖子类型的所有类别。然后,当用户选择一个类别时,我只希望显示该类别中的帖子。我怎样才能做到这一点?感谢所有帮助。
我的控制器:
<?php
/**
* Template Name: QnA Page Template
*/
$context = Timber::get_context();
$post = new Timber\Post();
$args = array (
'post_type' => 'qna',
'posts_per_page' => -1
);
$context['post'] = $post;
$context['qna'] = Timber::get_posts($args);
Timber::render('templates/pages/template-qna.twig', $context);
到目前为止,我的模板是
{% block content %}
<select id="filter-by-category">
<option></option>
...
</select>
{% endblock %}
答案 0 :(得分:0)
尝试一下:
<?php
/**
* Template Name: QnA Page Template
*/
$context = Timber::get_context();
$context['post'] = new Timber\Post();
$context['qna'] = new Timber\PostQuery( [
'post_type' => 'qna',
'posts_per_page' => -1
] );
$context['categories'] = Timber::get_terms( [
'taxonomy' => 'category',
] );
Timber::render( 'templates/pages/template-qna.twig', $context );
要使用带有<select>
标签的类别,可以使用以下内容:
{% block content %}
<select id="filter-by-category">
{% for category in categories %}
<option value="{{ category.link }}">{{ category.title }}</option>
{% endfor %}
</select>
{% endblock %}
当然,您还需要注意使用JavaScript进行选择的更改,然后将用户重定向到所选的类别存档。
代替使用选择,它更容易并且可能更易于用户使用,以无序列表显示所有类别:
{% block content %}
<ul>
{% for category in categories %}
<li><a href="{{ category.link }}">{{ category.title }}</a></li>
{% endfor %}
</ul>
{% endblock %}