自定义固定链接-在固定链接的末尾追加分类名称和术语名称

时间:2018-11-11 作者:user7459842

我有

custom post type -> resources
custom taxonomy  -> resources_type
我想要自定义永久链接,其中类别基将附加在末尾而不是前面

例如:我添加了一个新资源title "First resource" 和分配term as type1

What I get - http://example.com/resources/resources-type/type1/first-resource

What i want - http://example.com/resources/first-resource/resources-type/type1

我在register post类型中使用以下参数代码:

\'rewrite\' => array("slug" => "/resources/resources-type/%resources_type%"),
然后使用以下代码替换上述代码中的“%resources\\u type%”

function wpa_course_post_link( $post_link, $id = 0 ){
  $post = get_post($id);  
  if ( is_object( $post ) ){
      $terms = wp_get_object_terms( $post->ID, \'resources_type\' );
      if( $terms ){
        return str_replace( \'%resources_type%\' , $terms[0]->slug , $post_link );
      }
  }
  return $post_link;  
}
add_filter( \'post_type_link\', \'wpa_course_post_link\', 1, 3 );

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

只需重写(无需删除)的默认permalink结构(您指定的),即可实现以下permalink结构resources 岗位类型:

/resources/%resources%/resources-type/%resources_type% <- preferred
/resources/resources-type/%resources_type%/%resources% <- default
您可以通过add_permastruct() &mdash;首先,注册post类型,但不指定rewrite 参数,表示重写默认为true/已启用,且段塞将resources (即post type键或slug):

register_post_type( \'resources\', array(
    \'label\' => \'Resources\',
    \'public\' => true,
    // no need to set the \'rewrite\' arg
    ...
) );
然后,立即覆盖permalink结构,如下所示:

add_permastruct( \'resources\', \'/resources/%resources%/resources-type/%resources_type%\' );
其中格式为&mdash;重要的部分是{POST TYPE KEY}, 你的情况是resources:

add_permastruct( \'{POST TYPE KEY}\', \'{PERMALINK STRUCTURE}\' );
(不要忘记刷新重写规则,只需访问永久链接设置页面即可。)

如何禁用/resources/%resources%

/resources/%resources% (即。/{POST TYPE KEY}/%{POST TYPE KEY}%) 在以下情况下自动添加%{POST TYPE KEY}% 在permalink结构中发现。您可以这样删除它:

add_filter( \'resources_rewrite_rules\', \'filter_resources_rewrite_rules\' );
function filter_resources_rewrite_rules( $rules ) {
    $pattern = \'resources/([^/]+)/resources-type/\';
    $p_length = strlen( $pattern );

    foreach ( $rules as $regex => $query ) {
        if ( $pattern !== substr( $regex, 0, $p_length ) ) {
            unset( $rules[ $regex ] );
        }
    }

    return $rules;
}
如果帖子类型是分层的,那么$pattern 可能是resources/(.+?)/resources-type/.

如果您想将上述代码/函数用于其他帖子类型,基本上只需将文本“资源”替换为正确的帖子类型键即可。

看见https://developer.wordpress.org/reference/hooks/permastructname_rewrite_rules/ 有关该筛选器的详细信息。

结束

相关推荐

Let me choose permalinks

我需要选择一个叫做“mysite”的永久链接。com/1418”,但wordpress不断在永久链接中添加“-2”。通常这意味着我已经有了一个名为“相同”的页面,它位于垃圾箱或其他地方。但这里的情况似乎并非如此。我尝试在设置中重置永久链接,这也没有帮助。我如何使用数字作为页面名称permalink,而不用wordpress在permalink中添加“-2”。