J'ai un problème pour obtenir la catégorie id du poste actuel. Nous utilisons <?php get_the_category( $id ) ?>
pour déterminer la catégorie du poste actuel. Si un post comme "demo" a 2 catégories comme cat1 et cat2. Lorsque j'ouvre une page cat1 puis que je passe à la page de démonstration, je veux une mise en page différente .. et lorsque j'ouvre une page cat2, puis que je passe à la page de démonstration, je veux ouvrir cette page de démonstration avec une autre présentation. Cela ne peut être fait que lorsque je vais identifier .. de quel article a appelé .. mais comment ??
WordPress a une fonction wp_get_referer
, qui récupère l'URL de renvoi depuis l'en-tête http. Ainsi, si vous passez d'une archive de catégorie à un seul article, le nom de la catégorie sera normalement inclus dans cette URL. Cela signifie que vous pouvez démarrer votre single.php
comme ceci:
$refer = wp_get_referer();
if (strpos($refer, 'category/cat1') != false) {... do something ...}
elseif (strpos($refer, 'category/cat2') != false) {... do something else ...}
else {... do a default thing ...}
Selon votre configuration, cette solution nécessitera peut-être quelques modifications, mais l'idée générale est claire, j'espère.
<?php $categories = get_the_category( $post->ID ); ?>
Cela retournera un tableau de catégories, dont vous pouvez obtenir l'identifiant, comme ceci:
$categories[0]-> term_id;
Ce sera pour la première catégorie du tableau s'il y en a plus d'un.
Des informations sur l'utilisation figurent dans le codex
Dans votre single.php, vous pouvez utiliser par exemple
if(has_category('layout-1')) {
// do layout-1-category stuff here
} elseif (has_category('layout-2')) {
// layout-2 stuff here
} else {
// stuff for all the other styles/regular stuff
}
Mieux encore, utilisez get_template_part pour ne pas simplement inonder votre single.php de toutes sortes de codes stupides.
Obtenez d'abord l'ID de la catégorie:
$cat_id = get_queried_object_id();
Ensuite, obtenez le nom de la catégorie:
$cat_name = get_cat_name($cat_id)
Ensuite, vous pouvez décider quoi faire en fonction du nom de la catégorie:
if ($cat_name == 'Cat 1') {
// ... url = layout-1
} elseif ($cat_name == 'Cat 2') {
// ... url = layout-2
}
Comme mentionné par Gaffen: "changer la mise en page des messages en fonction de la catégorie a été visité de"
Tout d’abord sur la page de modèle de catégorie de votre thème (c’est-à-dire category.php)
récupérez l'identifiant de la catégorie et stockez-le dans l'option WordPress Transient.
global $wp_query;
//get category id (or name, slug) and store to the transient api
$categoryId = $wp_query->queried_object->cat_ID;
set_transient( 'category_id_visited', $categoryId, 1 * HOUR_IN_SECONDS );
maintenant sur single.php ou la page de modèle d’affichage unique.
obtenir la valeur de Transient et changer d'affichage en conséquence
if ( false === ( $category_id_visited = get_transient( 'category_id_visited' ) ) ) {
// this code runs when there is no valid transient set
//do nothing for now
} else {
echo 'You came by visiting category: ' . $category_id_visited;
//delete transient if required, otherwise it will be expired automatically
delete_transient( 'category_id_visited' );
}
J'espère que ça aide.