Besoin urgent d'aide. S'il vous plaît dirigez-moi vers le forum approprié si nécessaire, mais j'ai beaucoup besoin de résoudre ce problème.
Je crée un site de gestion de propriété dans lequel la fonctionnalité de base doit fonctionner comme ceci:
Mon problème est que je reçois les articles de service pour tous les bâtiments actuellement, pas seulement celui qui est géré. Le flux actuel va d’une page nommée Bâtiments qui montre tous les messages de bâtiment disponibles (que j’ai personnalisée avec un fichier template-buildings.php) à la page unique pour le type de message personnalisé 'bâtiments' qui affiche une liste des catégories ( géré par single-buildings.php) sur la page category.php pour afficher tous les éléments de service de la catégorie sélectionnée sur la page single.php où un élément individuel est affiché.
Mon gros problème semble être sur category.php. J'essaie d'afficher SEULEMENT les articles d'une catégorie qui ont un rapport avec le post de bâtiment précédemment sélectionné. J'essaie d'utiliser le plugin posts-to-posts pour l'activer. Voici le code jusqu'à présent.
<?php
// Get category id of current page
$catid = get_queried_object_id();
// Find connected posts
$wp_query = new WP_Query( array(
'post_type' => 'buildings'
) );
p2p_type( 'buildings_to_si' )->each_connected( $wp_query, array( 'cat' => $catid ), 'service_items' );
// Display connected posts
while ( $wp_query->have_posts() ) : $wp_query->the_post();
foreach ( $post->service_items as $post ) : setup_postdata( $post );
?>
<div class="col-lg-3 col-md-4 col-sm-6 p-3 text-center">
<a class="btn btn-elegant" href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
</div>
<?php endforeach; ?>
<?php endwhile; ?>
À partir de maintenant, j'obtiens tous les articles d'une catégorie pour tous les bâtiments, quelle que soit la relation définie par le plugin. Je sais que cela a à voir avec le fait que j'essaie de le faire sur la page d'archivage des catégories, mais je ne sais vraiment pas quoi faire d'autre à ce stade. Je suis prêt à suivre un itinéraire totalement différent si nécessaire. Mettra à jour pour clarification si nécessaire. Merci!
Edition: Pour la postérité
Donc, je l'ai fait fonctionner sur la base du commentaire de kuchenundkakao. J'ai ajouté ce code au fichier single-buildings.php qui ajoute l'identifiant du message à l'adresse du lien de catégorie (le code mis à jour est en gras)
<?php
$args = array(
'hide_empty' => true,
'orderby' => 'name',
'order' => 'ASC',
'parent' => 0,
'posts_per_page' => -1
);
$categories = get_categories($args);
foreach($categories as $category) {
// Get the ID of a given category
$category_id = get_cat_ID( $category->name );
// Get the URL of this category
$category_link = get_category_link( $category_id );
/////////// Added bit of code /////////////////
$category_link .= "?building_id=".get_the_ID();
echo '<div class="col-lg-3 col-md-4 col-sm-6 p-3 text-center"><a class="btn btn-lg btn-elegant" href="' . $category_link.'" role="button">' .
$category->name.'</a></div>';
?>
Ensuite, sur category.php, j’ai ajouté quelques variables pour récupérer cet identifiant. Voici le code mis à jour basé sur cela.
<?php
// Get category id of current page
$catid = get_queried_object_id();
////////// Added code ////////////////
$buildingid = $_GET['building_id'];
// Find connected posts
$wp_query = new WP_Query( array(
'post_type' => 'buildings',
////////// Added code ////////////////
'p' => $buildingid
) );
p2p_type( 'buildings_to_si' )->each_connected( $wp_query, array( 'cat' => $catid ), 'service_items' );
// Display connected posts
while ( $wp_query->have_posts() ) : $wp_query->the_post();
foreach ( $post->service_items as $post ) : setup_postdata( $post );
?>
<div class="col-lg-3 col-md-4 col-sm-6 p-3 text-center">
<a class="btn btn-elegant" href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
</div>
<?php endforeach; ?>
<?php endwhile; ?>
Cela a corrigé le problème et m'a permis de continuer à utiliser la page de catégorie comme prévu. Cela ajoute un peu de gâchis à mes URL, mais comme il s’agit d’un site privé pour une entreprise, cela ne sera donc pas un problème.
Je ne connais pas très bien le plug-in posts-to-posts, mais votre problème principal est peut-être que la page de catégorie ne sait pas quel bâtiment vous avez choisi à l'étape précédente si vous ne le transmettez pas dans un paramètre ou ne le sauvegardez pas. dans une session ou un cookie. Il serait peut-être préférable de sortir les éléments connectés sur la page des bâtiments, comme ceci:
Building (description etc)
- category 1
-item 1
- category 2
-item 2
-item 3
...