is_home () and is_single () ¿No funciona como se esperaba con los tipos de correos personalizados?

3

( Nota para los moderadores: Estaba originalmente titulado: ¿Problema de tipo de publicación personalizado? )

Tengo algunos problemas con los tipos de publicaciones personalizadas donde todo funciona bien, excepto las barras laterales.

Aquí hay un código de mi sidebar.php :

<?php
  if (is_home()) {
    dynamic_sidebar('frontpage-sidebar');
  }
  if (is_single()) {
    dynamic_sidebar('single-post-sidebar');
  }
  ....
?>

Normalmente esto funciona bien, excepto cuando abro una sola página para verificar que la publicación 'frontpage-sidebar' no se está cargando, ya que 'single-post-sidebar' se está cargando. ¿Dónde está el problema?

Aquí está el código para mi tipo de publicación personalizada:

$labels = array(
  'name' => _x('Tools', 'post type general name'),
  'singular_name' => _x('Tool', 'post type singular name'),
  'add_new' => _x('Add New', 'Tool'),
  'add_new_item' => __('Add New Tool'),
  'edit_item' => __('Edit Tool'),
  'new_item' => __('New Tool'),
  'view_item' => __('View Tool'),
  'search_items' => __('Search Tools'),
  'not_found' => __('No Tools found'),
  'not_found_in_trash' => __('No Tools found in Trash'),
  'parent_item_colon' => ''
);
$args = array(
  'labels' => $labels,
  'public' => true,
  'publicly_queryable' => true,
  'show_ui' => true,
  'query_var' => true,
  'rewrite' => true,
  'capability_type' => 'post',
  'hierarchical' => false,
  'menu_position' => 2,
  'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments','page-attributes') // 'not sure that post can have page-attributes ????'
);
register_post_type('tools', $args);

¿Cómo puedo cargar diferentes barras laterales en diferentes páginas cuando utilizo tipos de publicación personalizados en lugar de publicaciones ordinarias?

Gracias.

    
pregunta user1147 14.10.2010 - 04:10

2 respuestas

6

Si entiendo su pregunta correctamente, entonces pregunte por qué is_home() es false cuando está viendo la URL /tools/example-tool/ . Si entiendo tu pregunta, la respuesta es simplemente que is_home () no es true para los tipos de publicación personalizados.

En realidad, is_home() nunca debe ser true excepto 1.) cuando se encuentra en la lista de publicaciones de la página de inicio, o 2.) cuando se ha configurado una "página estática" para que sea una "Página de publicaciones" en Configuración > Sección de lectura del administrador (En mi captura de pantalla, mi "Página de publicaciones" se ha configurado en "Página" - post_type=='page' - cuyo título es "Inicio"):

Entonces,siquieresqueaparezcalabarralateral,creoquetendrásqueusaruncriteriodiferentealdeis_home().¿Puededescribirconpalabrasloqueintentabalograrconestecódigo?

ACTUALIZACIÓN

Basadoenloscomentariosacontinuacióny investigación subsiguiente después de comprender mejor el problema, parece que los valores apropiados para is_home() y is_single() nunca se definieron realmente para los tipos de publicaciones personalizadas . Así que una de las mejores soluciones al problema es crear una página de plantilla de tema específica de tipo de publicación, es decir, single-tools.php si el tipo de publicación es tools , y definir barras laterales específicamente para ese tipo de publicación. Pero si debe enrutar todo a través de un single.php , aquí hay algunas funciones que puede usar en lugar de is_home() y is_single() para lograr los resultados esperados y puede almacenarlos en el tema. functions.php file (o uno de los archivos de un complemento) :

function is_only_home() {
  $post_type = get_query_var('post_type');
  return is_home() && empty($post_type);
}

function is_any_single() {
  $post_type = get_query_var('post_type');
  return is_single() || !empty($post_type);
}

Tomando tu primer ejemplo de código anterior y aplicando estas funciones se vería así:

<?php
  if (is_only_home()) {
    dynamic_sidebar('frontpage-sidebar');
  }
  if (is_any_single()) {
    dynamic_sidebar('single-post-sidebar');
  }
  ....
?>
    
respondido por el MikeSchinkel 14.10.2010 - 08:22
4

La función que quieres usar: is_singular($post_types) donde $post_types es una cadena / matriz de tipos de publicaciones personalizadas. La función devuelve verdadero si se muestra una página en singular.

    
respondido por el user10757 01.12.2011 - 15:43

Lea otras preguntas en las etiquetas