将重写端点添加到CPT归档

时间:2022-01-27 作者:Edegist

我有一个带有分层分类归档的自定义帖子类型,并希望添加一个名为;infopage“;归档中的每个术语。

e、 g。

domain.com/tax-term-1/infopage

domain.com/tax-term-2/child-term-3/child-term-4/infopage
等等。

我不想将此作为一个儿童术语添加,而是希望它是一个;“虚拟”;页面,因为内容将动态生成。

尝试了类似的操作,但在访问端点页面时得到了404(是的,我刷新了permalinks):

add_action( \'init\', function() {
    add_rewrite_endpoint( \'infopage\', EP_PAGES );
} );

add_action( \'template_redirect\', function() {
    global $wp_query;
    if ( ! isset( $wp_query->query_vars[\'infopage\'] ) ) {
        return;
    }
    include plugin_dir_path( __FILE__ ) . \'templates/infopage.php\';
    die;
} );
是的add_rewrite_endpoint 不打算与CPT和自定义分类一起使用?如果没有,是否有推荐的替代方法来实现我的需求?

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

很可能是因为您的自定义分类法没有分配给端点掩码,所以您得到的是404(EP_PAGES) 与端点一起使用。

因为add_rewrite_endpoint() 可用于自定义帖子类型和分类,但you need to assign the endpoint mask to the post type or taxonomy 注册期间,通过ep_mask 输入rewrite 的参数register_taxonomy() 以及register_post_type(), 像这样:

// Add the "infopage" endpoint with the endpoint mask EP_PAGES.
add_rewrite_endpoint( \'infopage\', EP_PAGES );

// Register a "foo" post type.
register_post_type( \'foo\', array(
    \'public\'  => true,
    \'label\'   => \'Foos\',
    \'rewrite\' => array(
        \'ep_mask\' => EP_PAGES, // assign EP_PAGES to the CPT
        \'slug\'    => \'foos\',
    ),
) );

// Register a hierarchical taxonomy for the "foo" CPT above.
register_taxonomy( \'foo_cpt\', \'foo\', array(
    \'public\'       => true,
    \'label\'        => \'Foo Categories\',
    \'hierarchical\' => true,
    \'rewrite\'      => array(
        \'ep_mask\'      => EP_PAGES, // assign EP_PAGES to the taxonomy
        \'hierarchical\' => true,     // this one is entirely up to you
    ),
) );
因此,分配端点掩码,然后刷新重写规则(只需访问Permalink设置管理页面),看看您是否仍然获得404。

此外,如果您无法更改register_taxonomy()register_post_type() 代码(例如,因为帖子类型或分类是使用第三方插件注册的),那么您可以使用register_taxonomy_argsregister_post_type_args 钩子以修改分类法或post类型参数。

至于;推荐的备选方案;,那么它将使用add_rewrite_rule() 手动为端点添加重写规则,例如。add_rewrite_rule( \'foo_cpt/(.+?)/infopage(/(.*))?/?$\', \'index.php?foo_cpt=$1&infopage=$3\', \'top\' ) 对于foo_cpt 上述分类法:)

相关推荐

Dynamic Endpoints

我在WordPress外部有一个数据库表,需要为其创建端点。我已经创建了一个页面/cars/ 我计划使用页面模板生成链接。我希望url看起来像/cars/camaro/ ()/cars/%model%/ ). 起初,我认为我可以使用端点,但不知道如何根据从模型表中提取的段塞使它们动态。我也不确定使用Permalink结构标签是更容易还是更好。我甚至不完全确定从哪里开始,我以前创建过“静态”端点,所以我有一个基础可以跳出,但当我到达request 我不知道该怎么办。/** * Add endpoi