user1147
  • 0
Новичок

is_home() и is_single() не работают должным образом с пользовательскими типами записей?

  • 0

( Примечание модератора: изначально называлось: «Проблема с пользовательским типом записи?» )

У меня возникли некоторые проблемы с пользовательскими типами сообщений, где все работает отлично, кроме боковых панелей.

Вот некоторый код из моего sidebar.php :

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

Обычно это работает нормально, за исключением случаев, когда я открываю одну страницу, чтобы проверить 'frontpage-sidebar', не загружается ли сообщение, поскольку 'single-post-sidebar' вместо этого загружается. В чем проблема?

Вот код для моего пользовательского типа сообщения:

$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);

Как загрузить разные боковые панели на разных страницах при использовании пользовательских типов сообщений вместо обычных сообщений?

Спасибо.

Share
  1. Я также пробую это, tut justintadlock.com/archives/2010/04/29/… но тот же результат, что и боковая панель моей домашней страницы, также загружается на одной странице,…

    • 0
    • Он просто не загружает боковую панель в single.php, при печати обычного поста она загружает боковую панель, но для пользовательских типов она не загружает боковую панель.

      • 0
    • @user1147 user1147 Я сильно отредактировал ваш вопрос, чтобы попытаться сделать его более ясным (пожалуйста, просмотрите, чтобы убедиться, что я не изменил значение). Одна вещь, которую я не понял, это когда вы сказали: «когда я открываю одну страницу, чтобы проверить сообщение « ; не могли бы вы уточнить, что вы имели в виду под «одной страницей»?

      • 0
    • Извините, при открытии отдельного сообщения, чтобы проверить его, боковая панель для отдельного сообщения не загружается, у меня нет страниц, только категории.

      • 0
    • @ user1147 — Смотрите мое обновление ниже.

      • 0
    • Да, это помогает, но не решает проблему, я использую последний пост для главной страницы (не статической страницы), в соответствии с этим codex.wordpress.org/Conditional_Tags мне нужно будет только изменить sidebar.php на это, если (is_front_page( )) { dynamic_sidebar(‘frontpage-sidebar’); } if (is_single()) { dynamic_sidebar(‘single-post-sidebar’); } но это не работает, все еще на одной странице, где печатается сообщение, загружается боковая панель с домашней страницы. Мне нужно загружать разные боковые панели на разных страницах-сообщениях, сначала на главной странице, на одной второй боковой панели,… Tnx Майк

      • 0
    • @ user1147 — Я несколько раз перечитал ваш комментарий и до сих пор не могу понять, о чем вы спрашиваете. Можете ли вы обновить свой вопрос, указав фактические URL-адреса и снимки экрана, если это возможно, и показать, какой контент вы хотите показывать, где?

      • 0
    • Извините, спасибо за ваше терпение, это на моем локальном хосте, я попытаюсь еще раз объяснить. У меня есть несколько боковых панелей: боковая панель на главной странице, боковая панель с одной записью,…, когда я помещаю виджет календаря на главную страницу боковая панель работает нормально (виджет календаря загружается на fronpage), но когда я помещаю виджет категории на боковую панель с одним постом, он снова показывает мне виджет календаря (виджет календаря снова загружается в один пост, даже я помещаю виджет категории на эту боковую панель).При использовании стандартного типа сообщения он работает нормально, но когда я использую пользовательский тип сообщения, он не работает.

      • 0
    • @ user1147 — Вы используете один single.php шаблон для всех типов сообщений? Рассматривали ли вы вместо этого создание single-tools.php для другого вашего пользовательского типа сообщений? tools Я знаю, что это не отвечает на ваше «Почему?» вопрос, но это может дать вам то, что вы хотите?

      • 0
    • Это самый правильный ответ.

      • 0
    • Эта функция отчаянно нуждается в дополнительном параметре для включения файла $post_id .

      • 0
  2. Если я правильно понимаю ваш вопрос, то используйте вопрос, почему is_home(), false когда вы просматриваете URL-адрес /tools/example-tool/ ? Если я понимаю ваш вопрос, ответ прост: is_home() не true для пользовательских типов сообщений.

    На самом деле is_home() никогда не должно быть, true за исключением 1.) когда на главной странице список сообщений или 2.) когда «статическая страница» была установлена ​​​​как «страница сообщений» в разделе « Настройки»> «Чтение » администратора (в моем снимок экрана моя «Страница сообщений» была установлена ​​​​как «Страница» — post_type=='page' — с заголовком «Домашняя»):

    Настройка домашней страницы в консоли администратора WordPress 3.0
    (источник: mikeschinkel.com )

    Поэтому, если вы хотите, чтобы боковая панель отображалась, я думаю, вам нужно использовать другие критерии, чем is_home() . Можете ли вы описать словами, что вы пытались выполнить с помощью этого кода?

    ОБНОВИТЬ

    Основываясь на комментариях ниже и последующих исследованиях после лучшего понимания проблемы, кажется, что соответствующие значения для is_home() пользовательских is_single() типов сообщений никогда не были определены. Таким образом, одним из лучших решений проблемы является создание страницы шаблона темы для конкретного типа сообщения, то есть, single-tools.php если тип сообщения tools, и определение боковых панелей специально для этого типа сообщения. Но если вы должны маршрутизировать все через одинsingle.php , то вот некоторые функции, которые вы могли бы использовать вместо is_home() и is_single() для достижения ожидаемых результатов, и вы можете сохранить их в functions.php файле вашей темы (или в одном из файлов плагина) :

    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);
    }
    

    Если взять ваш первый пример кода выше и применить эти функции, это будет выглядеть так:

    <?php
      if (is_only_home()) {
        dynamic_sidebar('frontpage-sidebar');
      }
      if (is_any_single()) {
        dynamic_sidebar('single-post-sidebar');
      }
      ....
    ?>
    
    • 0
  3. Функция, которую вы хотите использовать: is_singular($post_types) где $post_types находится строка/массив пользовательских типов сообщений. Функция возвращает true, если отображается единственная страница.

    • 0

Оставить ответ

You must login to add an answer.