创建自定义帖子类型和分类档案以及漂亮的URL

时间:2013-01-10 作者:NW Tech

我创建了一个自定义帖子类型,Local Pages 以及两种不同的分类法:LocationsServices.

到目前为止,自定义的post类型仍然有效。然而,URL并不漂亮。它们看起来像:http://domain.com/?localpage=%post_name%

理想情况下,我想为帖子类型和分类法创建一个归档。

例如,主归档文件类似于http://domain.com/localpage, 将列出该职位类型中的所有职位。我想这需要它自己的归档模板。

我还想为我的分类法创建一个类别列表页面,其中URL类似于http://domain.com/localpage/locationshttp://domain.com/localpage/services. 这两个页面基本上都列出了特定分类法的所有类别或项目。过滤每个页面上指向下一个分类法的链接。

这将如何工作的一个例子是:

Locations: 加利福尼亚州雅培;加利福尼亚州阿伯丁;电缆,CA;草莓,加利福尼亚州;加利福尼亚州Zuver

Services: 铝制可调天井盖;隔热天井盖;存放前遮阳篷;日光室外壳。

访问时http://domain.com/localpage/locations, 您将看到上面列出的位置。单击任何特定位置后,您将被发送到以下位置http://domain.com/localpage/%location_name%/services 它将列出该位置的所有服务。单击某项服务后,您将被带到如下位置http://domain.com/localpage/%location_name%/%service_name%/%post_name%

我该如何实现这一点,需要哪些页面模板文件(archive.php、single.php等)?

这是我在函数中使用的代码。php’创建自定义帖子类型和分类法。

/////////////////////////////////////////////////
// Local Page Custom Post Type
/////////////////////////////////////////////////
function create_local_pages() {

    $labels = array(
        \'name\' => _x( \'Local Pages\', \'post type general name\' ), // Tip: _x(\'\') is used for localization
        \'singular_name\' => _x( \'Local Page\', \'post type singular name\' ),
        \'add_new\' => _x( \'Add New\', \'Local Page\' ),
        \'add_new_item\' => __( \'Add New Local Page\' ),
        \'edit_item\' => __( \'Edit Local Page\' ),
        \'new_item\' => __( \'New Local Page\' ),
        \'view_item\' => __( \'View Local Page\' ),
        \'search_items\' => __( \'Search Local Pages\' ),
        \'not_found\' =>  __( \'No Local Pages found\' ),
        \'not_found_in_trash\' => __( \'No Local Pages found in Trash\' ),
        \'parent_item_colon\' => \'\'
    );

    $annoucement_args = array(
        \'labels\' =>$labels,
        \'singular_label\' => __(\'Local Page\'),
        \'public\' => true,
        \'show_ui\' => true,
        \'menu_position\' => 5,
        \'capability_type\' => \'post\',
        \'hierarchical\' => false,
        \'rewrite\' => false,
        \'supports\' => array(\'title\', \'editor\'),
        \'has_archive\' => true,
     );
    register_post_type(\'localpage\', $annoucement_args);
}
add_action(\'init\', \'create_local_pages\');



/////////////////////////////////////////////////
// Local Page Taxonomies
/////////////////////////////////////////////////
add_action( \'init\', \'build_locations\', 0 );
    function build_locations() {
        register_taxonomy( \'location\', \'localpage\', array( \'hierarchical\' => true, \'label\' => \'Locations\', \'query_var\' => true, \'rewrite\' => true ) );
    }

add_action( \'init\', \'build_services\', 0 );
    function build_services() {
        register_taxonomy( \'services\', \'localpage\', array( \'hierarchical\' => true, \'label\' => \'Services\', \'query_var\' => true, \'rewrite\' => true ) );
    }

add_action( \'init\', \'build_keywords\', 0 );
    function build_keywords() {
        register_taxonomy( \'keyword\', \'localpage\', array( \'hierarchical\' => true, \'label\' => \'Keywords\', \'query_var\' => true, \'rewrite\' => true ) );
    }
任何帮助都将不胜感激。

Additional information

在提供的示例中,本地页面是站点中与地理位置和单个特定服务相关的页面。因此,我将它们称为自定义帖子类型的“本地页面”。因此,他们可以被命名为任何不同的名字。

从我的理解来看,这是一个代表他的SEO游戏。除了一些关键字和位置在整个内容中发生变化外,大多数内容都是相同的。这不是我真正喜欢的东西,但我正在努力满足客户的要求。

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

实现永久链接,如http://example.com/localpage/%post_name%/, 您需要设置rewrite argument 注册自定义帖子类型时:

$annoucement_args = array(
    ...
    \'rewrite\' => array( \'with_front\' => false ),
    ...
);
我认为在这里使用自定义分类法不是最好的主意。为什么不使用自定义元框呢?看到这个了吗WP Explorer article 用于指导。

结束

相关推荐