_HOME()和_Single()对Custom Post类型是否未按预期工作?

时间:2010-10-14 作者:user1147

(Moderators note: 最初的标题是:“自定义帖子类型问题?”)

我在自定义帖子类型方面遇到了一些问题,除了侧边栏之外,其他的一切都很好。

以下是我的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);
当使用自定义帖子类型而不是普通帖子时,如何在不同的页面上加载不同的侧边栏?

谢谢

2 个回复
最合适的回答,由SO网友:MikeSchinkel 整理而成

如果我正确理解了你的问题,那么请使用询问原因is_home()false 查看URL时/tools/example-tool/? 如果我理解你的问题,答案就是is\\u home()不是true 用于自定义帖子类型。

事实上is_home() 不应该是true 1除外。)出现在主页帖子列表上时,或2。)当;“静态页面”已设置为a;“发布页面”在设置中;正在阅读管理部分(在我的屏幕截图中,我的“帖子页面”已设置为“页面”)post_type==\'page\' -- 其标题为;主页“):

Setting a Home Page in WordPress 3.0\'s Admin Consolemikeschinkel.com)

因此,如果你想显示侧边栏,我认为你需要使用不同的标准is_home(). 你能用语言描述一下你试图完成这段代码的目的吗?

根据以下评论更新subsequent research 在更好地理解问题之后,它出现了appropriate values for is_home() and is_single() were never really defined for custom post types. 因此,解决这个问题的一个更好的方法是创建一个特定于帖子类型的主题模板页面,即。single-tools.php 如果职位类型为tools, 并专门为该帖子类型定义侧栏。But if you must route everything through one 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\');
  }
  ....
?>

SO网友:user10757

要使用的函数:is_singular($post_types) 哪里$post_types 是自定义帖子类型的字符串/数组。如果显示单个页面,则函数返回true。

结束

相关推荐

Sidebar slideshow widget

有人知道可以放在边栏上的高质量图像幻灯片小部件吗?