i can't find the {% if categoryName %} Code for parent / subcategory.
Please See my Screenshots and Codes:
Backend:
My Shortcode for those Views atm:
[events category="66"]
ShortcodeEvents.php File:
<?php
namespace WpTheme\Shortcodes\Module;
use WpTheme\Shortcodes\ShortcodeModule;
class ShortcodeEvents extends ShortcodeModule
{
/**
* @param $atts
*
* @return mixed
*/
public function handle($atts, $content = null) {
extract(shortcode_atts([
'category' => false,
'limit' => - 1,
'parent' => $sub_category->cat_ID,
], $atts));
$args = [
'posts_per_page' => $limit,
];
if ($category) {
$category = collect(explode(',', $category))->map(function ($value) {
return trim($value);
})->filter()->toArray();
$args = collect($args)->merge([
'tax_query' => [
[
'taxonomy' => 'event-category',
'field' => 'term_id',
'terms' => $category,
],
],
])->toArray();
$events = app(\WpTheme\PostTypes\Repository\Event::class)->all($args);
$categoryName = get_term(array_shift($category), $taxonomy)->name;
} else {
$events = app(\WpTheme\PostTypes\Repository\Event::class)->allGroupedByCategory();
}
return $this->renderView('shortcodes/events.twig', compact('events', 'categoryName'), false);
}
}
My twig File:
{% if events %}
{% if categoryName %}
<h2>{{ categoryName }}</h2>
<hr class="mt-0 mb-8">
{% endif %}
{% for parentTerm in events %}
<div class="{{ loop.index == 1 ? 'mb-default' : 'mt-default' }}">
<div class="mb-8 mb-lg-12 mb-xl-16">
<h2>{{ parentTerm.name }}</h2>
{% if parentTerm.description %}
<p>{{ parentTerm.description }}</p>
{% endif %}
</div>
{% for childTerm in parentTerm.childTerms %}
<div class="mb-8 mb-lg-12">
<h3>{{ childTerm.name }}</h3>
{% for event in childTerm.events %}
{% set index = random() %}
<div class="my-4">
<b-button variant="unstyled" v-b-toggle.accordion-{{ index }} class="accordion-trigger">
<span class="plus"></span>
<h4>{{ event.title }}</h4>
</b-button>
<b-collapse id="accordion-{{ index }}" accordion="my-accordion" role="tabpanel">
<div class="py-4 py-lg-6">
{% set speaker = event.meta('speaker') %}
{% if speaker %}
<p>
<a href="{{ speaker.link }}">{{ speaker.title }}</a>
</p>
{% endif %}
{% if event.meta('dates') %}
<table class="table-responsive-md">
<thead>
<tr>
<th>{{ function('trans', 'global.date') }}</th>
<th>{{ function('trans', 'global.place') }}</th>
<th>{{ function('trans', 'global.topic') }}</th>
</tr>
</thead>
<tbody>
{% for date in event.meta('dates') %}
<tr>
<td class="text-nowrap">{{ date.date|date("d.m.Y") }}</td>
<td class="text-nowrap">{{ date.location }}</td>
<td>{{ date.topic }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
</div>
</b-collapse>
</div>
{% endfor %}
</div>
{% endfor %}
</div>
{% endfor %}
{% endif %}
I found out, that at least i can get some Items from Subcategory if i use:
{{ parentTerm.title }} instead of {{ event.title }}
{% if parentTerm.meta('dates') %} instead of {% if event.meta('dates') %}
But parentTerm.category or parentTerm.categoryName seems not working.
Any Ideas?
@Alorsons I want to make sure you're aware that subcategories/child terms naturally come through any
Timber\Term
object via{{ term.children }}
— this returns an array of otherTimber\Term
objects representing any children (subcategories for thecategory
taxonomy — but will work with any hierarchical taxonomy)