复制类别/位置页面层次结构

时间:2016-11-14 作者:php-b-grader

寻找建议,建议或建议最合适的网页结构的网站。

我正在迁移一个网站,该网站在/服务/位置/的结构中有大约1000页–有4个服务和大约250个位置

我倾向于将它们创建为页面,因为这只会阻塞网站的页面部分,使查找和编辑核心页面变得很麻烦。

我曾想过使用分类和帖子,但这位客户想写一些博客,所以我也不想把帖子部分塞满。

我正在考虑一个自定义帖子类型,但自定义帖子类型会在开头添加一个slug(例如/custom slug/service/location/),这意味着我需要301将新站点上的1000个URL从/service/location/重定向到/custom slug/service/location/)。

我倾向于创建4个自定义帖子类型(4个服务),然后为每个客户帖子类型创建250个自定义帖子-但我不喜欢在admin中有4个额外的菜单/部分(我可能会忘记它-但我认为必须有一种更干净的方式),或者只处理类别和帖子,而忽略“阻塞”问题…

有人有什么建议吗?有没有更合适的方法?

1 个回复
SO网友:TheDeadMedic

您可以很容易地使CPT具有“无栓”永久链接:

register_post_type( \'service\', [
    \'hierarchical\' => true,
    \'public\'       => true,
    // Other args, no need for "rewrite"
]);

// Change service to top-level permalink.
add_permastruct( \'service\', \'%service%\', [
    \'with_front\' => false,
    \'paged\'      => false,
    \'feed\'       => false,
]);

// Remove all default service rewrite rules.
add_filter( \'service_rewrite_rules\', \'__return_empty_array\' );
。。。应该将其包装在函数中并连接到init. 然后要“抓住”这些帖子类型,我们需要一点pre_get_posts 魔术:

add_action( \'pre_get_posts\', function ( $wp_query ) {
    if (
        $wp_query->is_main_query() &&
        $wp_query->is_singular() &&
        $wp_query->get( \'pagename\' )
    ) {
        if ( ! $post_type = $wp_query->get( \'post_type\' ) )
            $post_type = [];
        elseif ( ! is_array( $post_type ) )
            $post_type = [ $post_type ];

        $wp_query->set( \'post_type\', array_merge( $post_type, [
            \'page\',
            \'service\',
        ]));
    }
});
然后确保刷新重写规则(只需在管理中加载设置>永久链接)。

相关推荐