按类别过滤自定义帖子类型

时间:2019-07-15 22:47:49

标签: php wordpress twig timber

我正在尝试使用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 %}

1 个答案:

答案 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 %}