将帖子ID插入前面有破折号的辅助文件的末尾

时间:2018-12-28 作者:Ryan Dorn

我想动态地将帖子ID插入到它们的URL段塞中。

What I have

<去掉带前缀的帖子名称(WC的“/产品”)的代码
  • 生成我想要的URL的代码
    • What I want

      ~/category-name/hey-slug-12903/do not want 附加为多余子目录的ID,如:~/category-name/hey-slug/12903/~/category-name/12903/hey-slug/

    My Issue

    <我得到了404(我刷新了重写规则)
  • 我不知道是否也需要使用add_rewrite_rule();
  • My Code:

    add_filter( \'post_type_link\', \'wpp_remove_slug\', 10, 3 );
    function wpp_remove_slug( $post_link, $post, $name ) {
    
        if ( \'product\' != $post->post_type || \'publish\' != $post->post_status ) {
          return $post_link;
        }
        $post_link = str_replace( \'/\' . $post->post_type . \'/\', \'/\', $post_link );
        $post_link = substr($post_link, 0, -1);
        $post_link = $post_link . "-" . $post->ID . \'/\';
        return $post_link;
    
    
    }
    

    1 个回复
    SO网友:Milo

    这个rewrite 中的参数register_post_type 是有限的,但您可以使用add_permastruct. 附加的好处是,这将为您生成所有重写规则,新规则将覆盖原始规则。您只需确保在注册post类型后挂起。

    function wpd_woo_product_permastruct(){
        add_permastruct(
            \'product\',
            \'%product_cat%/%product%-%post_id%/\',
            array(
                \'walk_dirs\' => false,
                \'with_front\' => false
            )
        );
    }
    add_action( \'init\', \'wpd_woo_product_permastruct\', 99 );
    
    神奇的是,这就是你所需要的一切。重写标记替换将为您完成,因此post_type_link 不需要过滤器。

    通常,缺少静态slug会导致与其他规则发生冲突,但在这种情况下,它会起作用,因为嵌入的post ID会触发更严格的匹配。

    你不能拥有的是%product_cat% 没有静态段塞的规则,这就是为什么我们必须设置walk_dirsfalse. 否则,对根页面的任何请求都将被分类规则覆盖,WordPress将查找与页面slug匹配的术语。

    如果您想要引入这种模糊性的规则,您可以执行以下操作this answer, 手动解决冲突。

    相关推荐

    尝试调用REST API时出错REST_POST_INVALID_PAGE_NUMBER

    我遇到以下错误,试图通过REST API调用特定帖子类型的所有帖子或所有帖子:/wp-json/wp/v2/posts/wp-json/wp/v2/posts?page=1/wp-json/wp/v2/posts?page=1&per_page=1/wp-json/wp/v2/faq出现的错误是:{“code”:“rest\\u post\\u invalid\\u page\\u number”,“message”:“请求的页码大于可用的页数。”,“数据”:{“状态”:400}}我得到了两个自定