Thanks,
I also had a look at: http://wordpress.org/support/topic/related-posts-by-custom-taxonomy
Unfortunately, I still can’t get it working.
Looping the taxonomies works fine, but collecting the pages to go with that still results in the wrong result.
$args=array(
'post_type'=>'meal',
'orderby'=>'menu_order',
'meal_type'=>$cat, //$cat = the slug
'order'=>'ASC',
);
print_r($args);
results in:
Array
(
[post_type] => meal
[orderby] => menu_order
[meal_type] => starter
[order] => ASC
)
Which seems allright? The URL you posted seems to be a bit overdone for my situation, because there is no hierarchy in the taxonomies?
This is the code i’m using now:
function mealCategory($cat){
global $post;
$args=array(
'post_type'=>'meal',
'orderby'=>'menu_order',
'meal_type'=>$cat,
'order'=>'ASC',
);
$meal_types = new WP_Query($args);
if ( $meal_types->have_posts() ) : while ( $meal_types->have_posts() ) : $meal_types->the_post();
$menuList[] = $post;
endwhile; endif;
return $menuList;
}
$terms = get_terms('meal_type',array('orderby'=>'term_order'));
foreach($terms AS $cat){
// Some HTML
$mealList = mealCategory($cat->slug);
print_r($mealList);
exit;
print_r($mealList); should only show the 3 starters i have and then exit the page.
edit:
This query results in all the meals i have, so no taxonomy filter is being applied.
I have worked my way through your URL, but my loop is similar to:
foreach ($tax_terms as $tax_term) {
$args=array(
'post_type' => $object_type,
"$taxonomy" => $tax_term->slug,
'post_status' => 'publish',
'posts_per_page' => -1,
'caller_get_posts'=> 1
);
$my_query = null;
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
echo '<p>Listing post_type='.$post_type->label . ', taxonomy='. $taxonomy . ', term='. $tax_term->slug.'</p>';
while ($my_query->have_posts()) : $my_query->the_post(); ?>
<p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
<?php
echo get_the_term_list( $my_query->post->ID, $taxonomy, $tax[$taxonomy]->singular_label.': ', ', ', '' );
endwhile;
}
}
I already have the terms.
"$taxonomy" => $tax_term->slug,
is similar to my:
‘meal_type’=> $cat,
??
I have now tried the code code from your URL, but narrowd it down:
$object_type = "meal";
$taxonomies = get_object_taxonomies($object_type);
foreach ($taxonomies as $taxonomy ) {
$args=array(
'name' => $taxonomy
);
$output = 'objects'; // or objects
$tax=get_taxonomies($args,$output);
$tax_terms = get_terms($taxonomy);
foreach ($tax_terms as $tax_term) {
$args=array(
'post_type' => $object_type,
"$taxonomy" => $tax_term->slug,
'post_status' => 'publish',
'posts_per_page' => -1,
'caller_get_posts'=> 1
);
$my_query = null;
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
echo '<p>Listing post_type='.$post_type->label . ', taxonomy='. $taxonomy . ', term='. $tax_term->slug.'</p>';
while ($my_query->have_posts()) : $my_query->the_post(); ?>
<p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
<?php
echo get_the_term_list( $my_query->post->ID, $taxonomy, $tax[$taxonomy]->singular_label.': ', ', ', '' );
endwhile;
}
}
}
exit;
And this results in:
Listing post_type=, taxonomy=meal_type, term=dessert
CRÈME BRULÉE
: Dessert
GOURMET SAUCES, BUTTERS & SALSAS – R18.00 Each
: Main Course
PRIME RIB ON THE BONE
: Steaks
RUMP OR SIRLOIN – Med 500g
: Steaks
RUMP OR SIRLOIN – Small 250g
: Steaks
“HOLLANDSE” PEPPER FILLET
*etc…
Listing post_type=, taxonomy=meal_type, term=main-course
CRÈME BRULÉE
: Dessert
GOURMET SAUCES, BUTTERS & SALSAS – R18.00 Each
: Main Course
PRIME RIB ON THE BONE
: Steaks
RUMP OR SIRLOIN – Med 500g
: Steaks
RUMP OR SIRLOIN – Small 250g
: Steaks
“HOLLANDSE” PEPPER FILLET
SIDE DISHES charged at R18.50 per portion
: Steaks
*etc…
Got it working like this:
$q = "
SELECT *
FROM $wpdb->posts p
INNER JOIN wp_term_relationships tr ON (tr.object_id=p.ID AND tr.term_taxonomy_id = ".$cat->term_id.")
WHERE p.post_parent = 0
AND p.post_type = 'meal'
AND p.post_status != 'trash'
AND p.post_status != 'auto-draft'
ORDER BY p.menu_order ASC";
$res = $wpdb->get_results($q);
return $res;