【问题标题】:Mixing Wordpress 3.7.1 Page Templates and Custom Post Types混合 Wordpress 3.7.1 页面模板和自定义帖子类型
【发布时间】: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


    【解决方案1】:

    你想要做的事情,我曾经设法轻松完成。我的意思是拥有自定义帖子类型并将其 slug 与 cusotm 页面一起使用。

    1. 您是否尝试刷新重写规则? (只需访问永久链接页面并按原样保存规则)

    所以我为 Locations 页面创建了一个 page-locations.php 模板,我希望它会被调用,而不是 archive-locations.php。不幸的是,事实并非如此。然后我尝试删除archive-locations.php,认为它可能具有优先权。那也无济于事。 Wordpress 只是渲染 index.php

    你不写,你怎么加载你的页面模板。你是依靠pageslugpage-pageslug.php的自动WP连接还是通过页面属性菜单设置页面模板?

    【讨论】:

    • 感谢您的浏览。我尝试了 page-slug.php 并通过页面属性设置页面。都不工作。我也刚刚尝试了 flush_rewrite_rules 并且没有任何运气。在刷新后,我的页面开始阻止我的自定义帖子类型,而不是我的帖子类型阻止页面模板。我开始认为这是 Wordpress 架构的一个缺点。
    • 我知道它应该可以工作。更新您的 register_post_type $args,添加 'has_archive' => false,,然后更新永久链接。
    猜你喜欢
    • 1970-01-01
    • 2012-07-05
    • 2013-03-17
    • 2016-11-07
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多