web-dev-qa-db-fra.com

Obtenir l'id de la catégorie actuelle sur post page wordpress

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 ??

1
devjohn

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.

1
cjbj
<?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

0
Gaffen

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.

0
jimihenrik

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
}
0
mjakic

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.

0
Dharmang