admin管理员组文章数量:1315962
I am trying to create tabs using the Foundations framework, outputting posts from a custom post type called testimonial and filtering them through their assigned custom category called filed-under. What am I doing wrong in my loop?
What I Have Working
- Category tabs appear when new categories are created
What is Not Working
- The posts aren't appearing in the tabbed content area
- How do you get the loop to filter the 'all' category?
Link to Demo /testimonials/
Code
<?php
// TABBED HEADERS
echo '<ul class="tabs" data-tabs id="example-tabs">';
echo '<li class="tabs-title is-active link-no-style">';
echo '<a href="#all" aria-selected="true">All</a>';
echo '</li>';
$args = array(
'hide_empty' => 1,
'orderby' => 'name',
'order' => 'ASC',
'post_type' => 'testimonial',
'taxonomy' => 'filed-under',
);
$categories = get_categories($args);
foreach ($categories as $category) {
echo
'<li class="tabs-title link-no-style">
<a href="#' . $category->slug . '" aria-selected="true" role="tab" data-toggle="tab">
' . $category->name . '
</a>
</li>';
}
echo '</ul>';
// TABBED CONTENT
echo '<div class="tabs-content" data-tabs-content="example-tabs">';
echo '<div class="tabs-panel is-active" id="' . $category->slug . '">';
echo '<ul class="accordion" data-accordion data-allow-all-closed="true">';
foreach ($categories as $category) {
$the_query = new WP_Query(array(
'post_type' => 'testimonial',
'post_status' => 'publish',
'category_name' => $category->slug,
));
while ($the_query->have_posts()) : $the_query->the_post();
echo '<li class="accordion-item" data-accordion-item>';
echo '<a href="#" class="accordion-title"><p>';
the_title();
echo '</p></a>';
echo '<div class="accordion-content" data-tab-content>';
echo the_field('testimonial');
echo '</div>';
echo '</li>';
endwhile;
wp_reset_postdata();
}
echo '</ul>';
echo '</div>';
echo '</div>';
?>
CODE V2
<?php
echo '<ul class="tabs" data-tabs id="example-tabs">';
echo '<li class="tabs-title is-active link-no-style">';
echo '<a href="#" aria-selected="true">All</a>';
echo '</li>';
$_terms = get_terms(array('filed-under'));
foreach ($_terms as $term) {
// TABBED HEADERS
echo '<li class="tabs-title link-no-style">';
echo '<a href="#' . $term->slug . '"aria-selected="true" role="tab" data-toggle="tab">';
echo $term->name;
echo '</a>';
echo '</li>';
} // CLOSE OFF FIRST LOOP
echo '</ul>';
foreach ($_terms as $term) :
$term_slug = $term->slug;
// QUERY
$_posts = new WP_Query( array(
'post_type' => 'testimonial',
'posts_per_page' => -1,
'tax_query' => array(
array(
'taxonomy' => 'filed-under',
'field' => 'slug',
'terms' => $term_slug,
),
),
));
// TABBED CONTENT
echo '<div class="tabs-content" data-tabs-content="example-tabs">';
echo '<div class="tabs-panel" id="' . $term_slug . '">';
echo '<ul class="accordion" data-accordion data-allow-all-closed="true">';
if( $_posts->have_posts() ) : while ( $_posts->have_posts() ) : $_posts->the_post();
echo '<li class="accordion-item" data-accordion-item>';
echo '<a href="#" class="accordion-title">';
echo '<p>';
the_title();
echo '</p>';
echo '</a>';
echo '<div class="accordion-content" data-tab-content>';
echo the_field('testimonial');
echo '</div>';
echo '</li>';
endwhile; endif; wp_reset_postdata();
echo '</ul>';
echo '</div>';
echo '</div>';
endforeach;
?>
I am trying to create tabs using the Foundations framework, outputting posts from a custom post type called testimonial and filtering them through their assigned custom category called filed-under. What am I doing wrong in my loop?
What I Have Working
- Category tabs appear when new categories are created
What is Not Working
- The posts aren't appearing in the tabbed content area
- How do you get the loop to filter the 'all' category?
Link to Demo http://staging-newmummycompanyca.temp312.kinsta.cloud/testimonials/
Code
<?php
// TABBED HEADERS
echo '<ul class="tabs" data-tabs id="example-tabs">';
echo '<li class="tabs-title is-active link-no-style">';
echo '<a href="#all" aria-selected="true">All</a>';
echo '</li>';
$args = array(
'hide_empty' => 1,
'orderby' => 'name',
'order' => 'ASC',
'post_type' => 'testimonial',
'taxonomy' => 'filed-under',
);
$categories = get_categories($args);
foreach ($categories as $category) {
echo
'<li class="tabs-title link-no-style">
<a href="#' . $category->slug . '" aria-selected="true" role="tab" data-toggle="tab">
' . $category->name . '
</a>
</li>';
}
echo '</ul>';
// TABBED CONTENT
echo '<div class="tabs-content" data-tabs-content="example-tabs">';
echo '<div class="tabs-panel is-active" id="' . $category->slug . '">';
echo '<ul class="accordion" data-accordion data-allow-all-closed="true">';
foreach ($categories as $category) {
$the_query = new WP_Query(array(
'post_type' => 'testimonial',
'post_status' => 'publish',
'category_name' => $category->slug,
));
while ($the_query->have_posts()) : $the_query->the_post();
echo '<li class="accordion-item" data-accordion-item>';
echo '<a href="#" class="accordion-title"><p>';
the_title();
echo '</p></a>';
echo '<div class="accordion-content" data-tab-content>';
echo the_field('testimonial');
echo '</div>';
echo '</li>';
endwhile;
wp_reset_postdata();
}
echo '</ul>';
echo '</div>';
echo '</div>';
?>
CODE V2
<?php
echo '<ul class="tabs" data-tabs id="example-tabs">';
echo '<li class="tabs-title is-active link-no-style">';
echo '<a href="#" aria-selected="true">All</a>';
echo '</li>';
$_terms = get_terms(array('filed-under'));
foreach ($_terms as $term) {
// TABBED HEADERS
echo '<li class="tabs-title link-no-style">';
echo '<a href="#' . $term->slug . '"aria-selected="true" role="tab" data-toggle="tab">';
echo $term->name;
echo '</a>';
echo '</li>';
} // CLOSE OFF FIRST LOOP
echo '</ul>';
foreach ($_terms as $term) :
$term_slug = $term->slug;
// QUERY
$_posts = new WP_Query( array(
'post_type' => 'testimonial',
'posts_per_page' => -1,
'tax_query' => array(
array(
'taxonomy' => 'filed-under',
'field' => 'slug',
'terms' => $term_slug,
),
),
));
// TABBED CONTENT
echo '<div class="tabs-content" data-tabs-content="example-tabs">';
echo '<div class="tabs-panel" id="' . $term_slug . '">';
echo '<ul class="accordion" data-accordion data-allow-all-closed="true">';
if( $_posts->have_posts() ) : while ( $_posts->have_posts() ) : $_posts->the_post();
echo '<li class="accordion-item" data-accordion-item>';
echo '<a href="#" class="accordion-title">';
echo '<p>';
the_title();
echo '</p>';
echo '</a>';
echo '<div class="accordion-content" data-tab-content>';
echo the_field('testimonial');
echo '</div>';
echo '</li>';
endwhile; endif; wp_reset_postdata();
echo '</ul>';
echo '</div>';
echo '</div>';
endforeach;
?>
Share
Improve this question
edited Nov 14, 2020 at 1:15
Natasha Mcd
asked Nov 11, 2020 at 14:35
Natasha McdNatasha Mcd
1257 bronze badges
2
- Can you fix the indenting on your code? It's difficult to read, there are free code editors programs that will do indenting automatically, such as Sublime Text, or Visual Studio Code – Tom J Nowell ♦ Commented Nov 11, 2020 at 16:34
- 1 Thanks for the tip! I downloaded a plugin for Visual Code to help me in the future and have updated above. – Natasha Mcd Commented Nov 11, 2020 at 17:42
1 Answer
Reset to default 1' publish',
This is your problem, an extra space character.
Note that in future you can catch this by using Query Monitor and by checking if posts were found. Because the post loop is missing an if ( $query->have_posts() ) { ... } else { echo "none found"; }
type check, you had no way of knowing where to look for the problem.
Also, you're listing terms in the filed-under
taxonomy:
'taxonomy' => 'filed-under',
But then you're passing those terms to the category_name
parameter, which is unrelated. So now the terms are being used as if they are terms in the category taxonomy, but they are not.
本文标签: custom post typesLooping Through Categories of a CPT
版权声明:本文标题:custom post types - Looping Through Categories of a CPT 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1741996141a2410083.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论