Obtener el ID de categoría actual desde la página de entrada en WordPress

19 dic 2013, 13:17:46
Vistas: 24.6K
Votos: 2

Tengo un problema para obtener el ID de categoría de la entrada actual. Estamos usando <?php get_the_category( $id ) ?> para encontrar la categoría de la entrada actual. Si una entrada como 'demo' tiene 2 categorías como cat1 y cat2. Cuando abro una página de cat1 y luego voy a la página demo, quiero un diseño diferente... y cuando abro una página de cat2 y luego voy a la página demo, quiero abrir esta página demo con otro diseño. Esto solo se puede hacer cuando pueda identificar... desde qué categoría se ha llamado... pero ¿cómo?

1
Comentarios

No sé si lograste resolver esto, pero acabo de terminar de escribir una función de navegación de publicaciones muy extensa para esto, también revisa la respuesta de @G.M. a mi pregunta original aquí. Puedes, tomando el código de ambas respuestas y combinándolo, saber de qué categoría proviene la publicación individual y luego usar el filtro single_template para establecer una plantilla específica

Pieter Goosen Pieter Goosen
8 ene 2015 09:13:26
Todas las respuestas a la pregunta 5
0

WordPress tiene una función wp_get_referer, que obtiene la URL de referencia desde la cabecera HTTP. Así que, si navegas desde un archivo de categoría a una entrada individual, el nombre de la categoría normalmente estará incluido en esa URL. Esto significa que puedes comenzar tu single.php de esta manera:

$refer = wp_get_referer();
if (strpos($refer, 'category/cat1') != false) {... hacer algo ...}
elseif (strpos($refer, 'category/cat2') != false) {... hacer otra cosa ...}
else {... acción por defecto ...}

Dependiendo de tu configuración, esta solución puede necesitar algunos ajustes, pero la idea general es clara, espero.

3 jul 2016 19:27:12
8
<?php $categories = get_the_category( $post->ID ); ?>

Esto devolverá un array de categorías, del cual puedes obtener el ID, así:

$categories[0]-> term_id;

Esto será para la primera categoría en el array si hay más de una.

Puedes encontrar información sobre su uso en el codex

19 dic 2013 14:08:58
Comentarios

Gracias por esta información. Pero necesito una categoría desde la cual se haya llamado la publicación en lugar de la primera categoría.

devjohn devjohn
19 dic 2013 14:26:29

Disculpa, quizás no entendí bien, ¿qué quieres decir con 'desde qué publicación se ha llamado'?

Gaffen Gaffen
19 dic 2013 14:27:36

Sencillamente-- hay una página de categoría para cat-1 y muestra todas sus publicaciones, ej. demo. Cuando abro demo desde esta página, quiero que la publicación demo se abra en layout-1. Y si abro la publicación demo desde la página de categoría cat-2, entonces debe abrirse con layout-2.

devjohn devjohn
19 dic 2013 14:41:53

Puedo hacer esto usando cadenas de consulta pero no quiero usarlo debido a problemas con la URL.

devjohn devjohn
19 dic 2013 14:45:40

Sugeriría establecer la categoría como datos de publicación usando un formulario (aunque no es semántico) o javascript, aunque eso no funcionará sin javascript, al menos se degradará correctamente.

También podrías reformular tu pregunta para reflejar mejor lo que quieres: cambiar el diseño de una publicación dependiendo de la categoría desde la que se visitó, ya que así es más probable que obtengas respuestas.

Gaffen Gaffen
19 dic 2013 15:22:43

Diseño de publicación donde una publicación se vea en este formato (solo apariencia) u otro formato... Si uso javascript también coloca cadenas de consulta en la URL.

devjohn devjohn
20 dic 2013 07:58:25

Lo único que se me ocurre sugerir es usar variables de sesión para guardar temporalmente la última página de categoría visitada, y luego si la publicación actualmente vista está en esa categoría, cambiar el diseño.

Gaffen Gaffen
20 dic 2013 11:46:57

Gracias por la respuesta y la sugerencia. Pero ¿sería posible hacer esto usando algún truco de WordPress en lugar de PHP?

devjohn devjohn
24 dic 2013 07:00:01
Mostrar los 3 comentarios restantes
0

Como mencionó Gaffen: "cambiar el diseño de una publicación dependiendo de la categoría desde la cual fue visitada"

Primero, en la plantilla de categoría de tu tema (por ejemplo, category.php)

Obtén el ID de la categoría y guárdalo en la opción Transient de WordPress.

global $wp_query;

//obtener el ID de la categoría (o nombre, slug) y guardarlo en la API Transient
$categoryId = $wp_query->queried_object->cat_ID;
set_transient( 'category_id_visited', $categoryId, 1 * HOUR_IN_SECONDS );

Ahora en single.php o la plantilla de visualización de publicación individual.

Obtén el valor de Transient y cambia la visualización según corresponda

if ( false === ( $category_id_visited = get_transient( 'category_id_visited' ) ) ) {
    // este código se ejecuta cuando no hay un transient válido configurado
    // no hacer nada por ahora
} else {
    echo 'Viniste al visitar la categoría: ' . $category_id_visited;
    //eliminar el transient si es necesario, de lo contrario expirará automáticamente
    delete_transient( 'category_id_visited' );
}

Espero que ayude.

21 mar 2014 11:39:51
0

En tu archivo single.php podrías usar por ejemplo:

if(has_category('layout-1')) {
  // hacer aquí lo correspondiente a layout-1
} elseif (has_category('layout-2')) {
  // acciones para layout-2 aquí
} else {
  // acciones para todos los demás estilos/contenido normal
}

Mejor aún, usa get_template_part para no saturar tu single.php con todo tipo de código innecesario.

17 mar 2015 13:32:17
1

Primero obtén el ID de la categoría:

$cat_id = get_queried_object_id();

Luego obtén el nombre de la categoría:

$cat_name = get_cat_name($cat_id)

Entonces puedes decidir dependiendo del nombre de la categoría qué hacer:

if ($cat_name == 'Cat 1') {
   // ... url = layout-1
} elseif ($cat_name == 'Cat 2') {
   // ... url = layout-2
}
17 mar 2015 17:02:46
Comentarios

$cat_id = get_queried_object_id(); recuperará el ID de la publicación y NO el ID de la categoría cuando estás en una página de publicación, como preguntó el OP.

Kevin M Kevin M
15 feb 2016 23:30:22