Here’s what we’ve come up with so far, and there’s definitely room for improvement.
remove_action( 'genesis_loop', 'genesis_do_loop' );
add_action( 'genesis_loop', 'ahso_custom_taxonomy_archive_loop' );
function ahso_custom_taxonomy_archive_loop() {
global $wp_query; // globalize it.
// get category ID
$cat_id = $wp_query->get_queried_object_id(); // get current category
// get all child categories
$cat_args = array(
'type' => 'products',
'child_of' => $cat_id,
//'parent' => '',
'orderby' => 'term_group',
'order' => 'ASC',
'hide_empty' => 0,
'hierarchical' => 1,
'exclude' => '',
'include' => '',
'number' => '',
'taxonomy' => 'product-categories',
'pad_counts' => false
);
// get all children of the current category
$categories = get_categories( $cat_args );
// if the cat has kittens, loop thru them in term order
if ( !empty($categories) ) {
foreach ($categories as $category) {
// first output the category archive headline
// gets the term table w/ the meta info added by genesis that contains the archive headline and intro text
$term = get_term_by( 'id', $category->term_id, $category->taxonomy );
echo '';
echo ''.$term->meta["headline"].'';
echo '';
// then build a query to loop thru the posts in that cat
// WP_Query arguments
$args = array (
'post_type' => 'products',
'order' => 'ASC',
'orderby' => 'menu_order',
'tax_query' => array(
array(
'taxonomy' => 'product-categories',
'field' => 'id',
'terms' => $category->term_id,
'include_children' => false, // no kittens
)
)
);
// loop thru posts in category
// output featured image
// The Query
$cat_query = new WP_Query( $args );
// The Loop
if ( $cat_query->have_posts() ) {
while ( $cat_query->have_posts() ) {
$cat_query->the_post();
// do something
echo '';
echo '';
echo the_post_thumbnail('medium');
echo '';
echo ''.get_the_title().'';
echo '';
}
} else {
// no posts found
}
// Restore original Post Data
wp_reset_postdata();
}
} // end category children loop
// if the category has no children, just run a loop thru that category.
// get_categories returns an empty array
if ( empty($categories) ) {
//echo 'this cat has no kittens';
// WP_Query arguments
$args = array (
'post_type' => 'products',
'order' => 'ASC',
'orderby' => 'menu_order',
'tax_query' => array(
array(
'taxonomy' => 'product-categories',
'field' => 'id',
'terms' => $cat_id, // get the initial $cat_id, from the query object
'include_children' => false, // pls spay and neutr yrs pets
)
)
);
// The Query
$cat_query = new WP_Query( $args );
// The Loop
if ( $cat_query->have_posts() ) {
while ( $cat_query->have_posts() ) {
$cat_query->the_post();
// do something
echo '';
echo '';
echo the_post_thumbnail('medium');
echo '';
echo ''.get_the_title().'';
echo '';
}
} else {
// no posts found
}
// Restore original Post Data
wp_reset_postdata();
} // end no children category loop
}
If you have any ideas, let us know. Feedback is always welcome.