В моем Single.php
Я пытаюсь получить текущие сообщения категории слизняков:
$category = get_category(get_query_var('cat'));
$cat_slug = $category->slug;
Но это ничего не возвращает. И определенно есть категория на почте. Что я делаю неправильно?
Вы можете пойти с get_the_category()
, но так как вы пометили свой вопрос Twig
а также Timber
Я подумал, может быть, вы хотите сделать это «путь древесины».
С Timber вы можете получить доступ ко многим функциональным возможностям с помощью методов на объектах. Для класса TimberPost есть метод terms()
, который даст вам все условия для поста. Передайте название таксономии, для которой вы хотите получить условия. В твоем случае: category
,
<?php
$context = Timber::get_context();
$post = Timber::get_post();
$context['post'] = $post;
// Get all categories assigned to post
$categories = $post->terms( 'category' );
// Get only the first category from the array
$context['category'] = reset( $categories );
Timber::render( 'single.twig', $context );
В версиях ниже Timber 1.x были также такие методы, как category()
а также categories()
чтобы получить один или все условия таксономии категории, но они, кажется, устарел сейчас.
В вашем файле Twig вы можете легко получить доступ к слагу через
{{ category.slug }}
Вы также можете напрямую позвонить terms()
метод из Twig и передать результат в цикл for. Это выведет на экран все категории, назначенные посту.
{% for category in post.terms('category') %}
{{ category.slug }}
{% endfor %}
Вы можете попробовать этот код, чтобы решить вашу проблему:
foreach (get_the_category() as $category) {
echo $category->slug .' ';
}
Ты можешь использовать:
$context[ 'category' ] = Timber::get_term(['taxonomy'=>'category']);
и в вашем файле ветки:
{{ category.title }}