使用Custom Post Type UI后去除url中的分类别名前缀

Custom Post Type UI插件是一个添加文章类型的插件,但在使用过程中有文章类型别名和分类目录别名,虽然插件中有去除的功能设置,但在目前的版本是无效的,在做优化的时候需要去除这些。下面讲下怎么去除这2类别名前缀。

一、文章类型前缀去除

此文章类型前缀在添加/编辑文章类型处添加,在分类目录名前显示,去除方法:使用Remove CPT base插件,在设置中勾选添加的文章类型即可。

二、去除文章详情地址前的分类别名前缀

此分类别名前缀在添加/编辑分类处添加,在分类详情页url所属分类前显示。

去除方法1:仅一个分类

add_filter(‘request’, ‘rudr_change_term_request’, 1, 1 );

function rudr_change_term_request($query){

$tax_name = ‘product_cat’; // 在此处指定您的分类名称,也可以是“ category”或“ post_tag”

// 要求子类的条件有所不同,我们应该进行额外的检查
if( $query[‘attachment’] ) :
$include_children = true;
$name = $query[‘attachment’];
else:
$include_children = false;
$name = $query[‘name’];
endif;

$term = get_term_by(‘slug’, $name, $tax_name); // 获取当前别名以确保它存在

if (isset($name) && $term && !is_wp_error($term)): // 在此检查

if( $include_children ) {
unset($query[‘attachment’]);
$parent = $term->parent;
while( $parent ) {
$parent_term = get_term( $parent, $tax_name);
$name = $parent_term->slug . ‘/’ . $name;
$parent = $parent_term->parent;
}
} else {
unset($query[‘name’]);
}

switch( $tax_name ):
case ‘category’:{
$query[‘category_name’] = $name; // 分类
break;
}
case ‘post_tag’:{
$query[‘tag’] = $name; // 标签
break;
}
default:{
$query[$tax_name] = $name; // 其它
break;
}
endswitch;

endif;

return $query;

}

add_filter( ‘term_link’, ‘rudr_term_permalink’, 10, 3 );

function rudr_term_permalink( $url, $term, $taxonomy ){

$taxonomy_name = ‘product_cat’; // 您的分类名称
$taxonomy_slug = ‘product_cat’; // 别名与分类名称可以不同(例如’post_tag’和’tag’)

// 如果URL中没有分类别名,则退出函数
if ( strpos($url, $taxonomy_slug) === FALSE || $taxonomy != $taxonomy_name ) return $url;

$url = str_replace(‘/’ . $taxonomy_slug, ”, $url);

return $url;
}

去除方法2:同时去除多个分类

function rudr_change_term_request($query_vars){

$tax_names = array(‘aktiviteettityyppi’,’tapahtumatyyppi’,’kohdetyyppi’,’palvelutyyppi’,’palveluluokka’); // 在此处指定您的分类名称,也可以是“ category”或“ post_tag”

if( isset($query_vars[‘attachment’]) ? $query_vars[‘attachment’] : null) :

$include_children = true;
$name = $query_vars[‘attachment’];

else:

if( isset($query_vars[‘name’]) ? $query_vars[‘name’] : null) {
$include_children = false;
$name = $query_vars[‘name’];
}

endif;

if (isset($name)):

foreach ($tax_names as $tax_name) {

$term = get_term_by(‘slug’, $name, $tax_name);

if ($term && !is_wp_error($term)):

if( $include_children ) {

unset($query_vars[‘attachment’]);
$parent = $term->parent;

while( $parent ) {

$parent_term = get_term( $parent, $tax_name);
$name = $parent_term->slug . ‘/’ . $name;
$parent = $parent_term->parent;

}

} else {

unset($query_vars[‘name’]);

}

$query_vars[$tax_name] = $name;

endif;

}

endif;

return $query_vars;

}

add_filter(‘request’, __NAMESPACE__ . ‘\\rudr_change_term_request’, 1, 1 );

function rudr_term_permalink( $url, $term, $taxonomy ){

$taxonomy_slugs = array(‘aktiviteettityyppi’,’tapahtumatyyppi’,’kohdetyyppi’,’palvelutyyppi’,’palveluluokka’);

foreach ($taxonomy_slugs as $taxonomy_slug) {

if ( stripos($url, $taxonomy_slug) === TRUE || $taxonomy == $taxonomy_slug ) {

$url = str_replace(‘/’ . $taxonomy_slug, ”, $url);

}
}

return $url;
}

add_filter( ‘term_link’, __NAMESPACE__ . ‘\\rudr_term_permalink’, 10, 3 );

上面2次出现的array(‘aktiviteettityyppi’,’tapahtumatyyppi’,’kohdetyyppi’,’palvelutyyppi’,’palveluluokka’)中红色的即是需要替换的分类别名

Posted in WordPress建站笔记 and tagged .