【问题标题】:Create a dynamic rewrite rule for custom taxonomy为自定义分类创建动态重写规则
【发布时间】:2019-12-26 15:36:59
【问题描述】:

我创建了一个名为 food items 的自定义分类。我使用 WordPress 的 CPT UI 插件做到了这一点。我想更改重写 URL 以根据分类术语工作,而不是分类本身

例如:

我有一个名为 Food 的自定义分类,附加到自定义帖子类型的食物。

现在正在为存档形成的 URL 是

example.com/food_item/bread

我希望它像

example.com/bread

我可以使用

做到这一点
add_rewrite_rule(
    '^bread/?$', // the rule regex
    'index.php?taxonomy=food_item&term=bread', // where you want the rule to go
    'top' // the priority. Make this one go first
);

但这不是动态解决方案。将来除了面包之外可能会有更多的价值,我不想手动为所有这些价值定义规则。有没有任何解决方案可以适用于任何有任何术语的分类法?两者都可以是动态的?

【问题讨论】:

  • 这方面有什么帮助吗?
  • 您可以通过类别库的永久链接选项对此进行更改
  • 好的。但这也不适用于所有其他永久链接吗?我只希望它用于分类
  • cnpagency.com/blog/…你有没有用这种方式创建自定义帖子类型在这里你可以通过重写规则寄存器texonomy
  • 我看过这个链接。我使用 CUSTOM POST TYPE UI 插件来创建它。我确信它是以正确的方式创建的。

标签: wordpress


【解决方案1】:
    function na_remove_slug( $post_link, $post, $leavename ) {

    if ( 'food_item' != $post->post_type || 'publish' != $post->post_status ) {
        return $post_link;
    }

    $post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );

    return $post_link; }

    add_filter( 'post_type_link', 'na_remove_slug', 10, 3 );
function na_parse_request( $query ) {

    if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) {
        return;
    }

    if ( ! empty( $query->query['name'] ) ) {
        $query->set( 'post_type', array( 'food_item', 'events', 'page' ) );
    }
}add_action( 'pre_get_posts', 'na_parse_request' );

你可以试试这种方式,添加代码后需要更新一次永久链接

【讨论】:

  • 感谢您的回答。我确实试过这个。但它不起作用。当我写 example.com/bread 时它应该可以工作
  • 您需要从设置中更新永久链接,然后它将起作用
  • 我确实尝试过。但即使在那之后它也不起作用并打开了主页
  • 我认为一定有其他问题我已经检查了我本地的代码并且它在这里工作正常 food_item 我用于帖子类型而不是术语你检查过吗