【发布时间】:2013-12-06 02:43:17
【问题描述】:
概述
我有一个名为 Locations 的自定义帖子类型。当用户访问 /locations 时,我希望他们看到有关所有位置的一些一般信息。当用户访问 /location/{a-location} 时,我希望他们看到有关“a-location”的具体信息。听起来很简单。
第一次解决方案尝试
我在 Wordpress 仪表板中创建了一个 Locations 页面来保存 /locations url 的内容。然后我创建了一个archive-locations.php 文件和一个single-location.php。 archive-locations.php 从 Locations 页面中提取信息,并列出所有自定义帖子类型 Locations。当用户点击某个位置的链接时,用户会被重定向到 /locations/{a-location} 并调用 single-location.php。这几乎可以解决问题,但感觉不对劲,而且还会产生一些其他问题。
问题
当用户访问 /locations 时,我更愿意使用 Locations 页面的页面模板(而不是 archive-locations.php 页面)。我正在使用 Yoast 插件为每个页面指定自定义元标题和描述。由于正在使用 archive-locations.php,所有这些元数据都会被忽略。
第二次解决方案尝试
所以我为 Locations 页面创建了一个 page-locations.php 模板,我希望它会被调用而不是 archive-locations.php。不幸的是,事实并非如此。然后我尝试删除archive-locations.php,认为它可能具有优先权。那也无济于事。 Wordpress 只是呈现 index.php。如果我禁用自定义帖子类型并访问 /locations,那么我的页面模板会被正确调用。看起来将自定义帖子类型命名为与页面相同的名称会导致 Wordpress 出现一些问题。但是,我需要有点相似才能确定 URL 结构。 /locations 需要从页面模板中提取; /locations/{a-location} 需要从另一个 php pfile 中提取。
问题
有没有办法让页面模板和自定义帖子类型与类似的 slug 一起工作?如果没有,我想我唯一的选择是增强我的 header.php 并在我在 /locations 时更聪明地确定标题和描述。
这是注册我的自定义帖子类型的代码,以防我做错了什么:
$args = array(
'labels' => $labels,
'description' => 'Holds our location specific data',
'public' => true,
'menu_position' => 20,
'supports' => array('title', 'editor', 'thumbnail', 'page-attributes' ),
'hierarchical' => true,
'has_archive' => true,
'rewrite' => array('with_front' => false, 'slug' => 'locations') //remove /news/ from the permalink when displaying a custom post type
);
register_post_type( 'locations', $args );
(我也尝试将 has_archive 更改为 false,但没有帮助。)
【问题讨论】:
标签: wordpress custom-post-type