J'ai créé deux taxonomies personnalisées (1. Emplacement de l'entreprise et 2. Catégorie d'entreprise ) pour un type de message personnalisé ( Business Listing ). Maintenant, j'ai répertorié tous les emplacements sous Archive de taxonomie d'emplacement où j'ai répertorié tous les emplacements et lorsque l'utilisateur a cliqué sur Emplacement A il faut l’utilisateur pour publier une page d’archive de Emplacement A où tous les articles sont répertoriés à partir de cette taxonomie spécifique .
Voici où je veux lister chaque catégorie d’entreprise en haut et au-dessous de tout le message de catégorie spécifique
Exemple: dans domain.com/locations/location1/
Category 1
Post 1
Post 2
Post 3
Category 2
Post 1
Post 2
Post 3
Comment puis-je accomplir ceci?
J'ai essayé quelques options mais le code ci-dessous obtient le message de tous les emplacements, mais je souhaite répertorier les catégories et publier de l'emplacement actuel.
<?php
$taxonomy = 'business-category';
$args = array(
'orderby' => 'id',
'order' => 'ASC',
);
$taxonomy_terms = get_terms($taxonomy, $args);
if($taxonomy_terms) {
foreach($taxonomy_terms as $taxonomy_term) {
$args = array(
"$taxonomy" => $taxonomy_term->slug,
'post_status' => 'publish',
'posts_per_page' => -1,
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) : ?>
<h2><?php echo $taxonomy_term->name; ?></h2>
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<h3><?php the_title(); ?></h3>
<?php endwhile; ?>
<?php wp_reset_postdata(); endif;
}
}
?>
Réponse modifiée par Ben HartLenn
<?php
$business_location = get_queried_object();
$business_categories = get_terms( [
'taxonomy' => 'business-category',
'hide_empty' => true,
] );
$duplicates = [];
foreach ( $business_categories as $business_category ) :
?>
<?php $args = [
'post_type' => 'business-listing',
'tax_query' => [
'relation' => 'AND',
[
'taxonomy' => 'business-location',
'field' => 'slug',
'terms' => $business_location->slug,
],
[
'taxonomy' => 'business-category',
'field' => 'slug',
'terms' => $business_category->slug,
],
],
'post__not_in' => $duplicates,
];
$query = new WP_Query( $args );
?>
<div class="business-listing-block">
<?php if ( $query->have_posts() ) : ?>
<h2 class='business-category-title'><?php echo $business_category->name; ?></h2>
<ul class='business-listings'>
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<?php if ( ! in_array( $post->ID, $duplicates ) ) {
$duplicates[] = $post->ID;
} ?>
<li class='business-listing'><?php echo the_title(); ?> </li>
<?php endwhile; ?>
</ul>
<?php endif; ?>
</div>
<?php endforeach; ?>
On peut supposer que ce serait dans votre fichier de modèle taxonomy-business-location.php
alors. Voici à quoi pourrait ressembler la zone de contenu principale dans un tel modèle:
<div id="main-content">
<?php
$business_location = get_queried_object();
echo "<h1 class='business-location-title'>Businesses in " . $business_location->name . ":</h1><hr>"; // Location A, according to your example
$business_categories = get_terms( [
'taxonomy' => 'business-category',
'hide_empty' => true, // hide empty business categories(i.e. have no posts)
] );
$duplicates = []; // more on this later...
// start looping through business categories
foreach ( $business_categories as $business_category ) {
// create new query that gets business listings, that are in Location A business location, and are in the current business category from the foreach loop above
$args = [
'post_type' => 'business-listing',
'tax_query' => [
'relation' => 'AND', // business listings must have both taxonomies terms queried below
[
'taxonomy' => 'business-location',
'field' => 'slug',
'terms' => $business_location->slug,
],
[
'taxonomy' => 'business-category',
'field' => 'slug',
'terms' => $business_category->slug,
],
],
'post__not_in' => $duplicates, // prevents duplicate business listings from showing, you may or may not want this part, more info below...
];
$query = new WP_Query( $args );
if ( $query->have_posts() ) : // don't show business category if no posts in current business category and location
echo "<h2 class='business-category-title'>" . $business_category->name . "</h2>";
echo "<ul class='business-listings'>";
// looping through business listings
while ( $query->have_posts() ) : $query->the_post();
/* Collect business listing id's and the array gets added
to the next WP_Query's post__not_in. This way a business
listing will only display in the first business category
shown, and none of the other business categories that
the listing is in. Again, this may or may not be wanted.
*/
if( !in_array($post->ID, $duplicates) ) {
$duplicates[] = $post->ID;
}
// output business listing
echo "<li class='business-listing'>" . get_the_title() . "</li>";
endwhile;
echo "</ul>";
endif;
}
?>
</div><!-- /#main-content -->
EDIT: Voici une photo de la configuration de mes données d’entreprises et de la sortie que j’obtiens si elle vous aide: