我在WordPress上使用WooCommerce,它增加了产品和功能。产品类别
网址。
http://dev.unwaveringmedia.com/8dim/product-category/all-party-supplies/ http://dev.unwaveringmedia.com/8dim/product/14-snowman-serving-tray/
我需要删除'产品' &安培; '产品类别'来自网址。有没有办法修改永久链接并删除它们?
答案 0 :(得分:11)
是。但请先阅读本文https://docs.woocommerce.com/document/removing-product-product-category-or-shop-from-the-urls/
您可以通过以下方式进行更改:
您可以更改设置>中的永久链接永久链接>可选>产品类别base = ./(类型./在产品类别库中)。
请确保您没有任何与类别页面具有相同名称(slug)的页面,帖子或附件,否则它们将发生冲突,代码将无效。
安装并激活以下插件: (有关详细信息,请参阅https://timersys.com/remove-product-category-slug-woocommerce/)
`
alert()
有关详细信息,请参阅https://timersys.com/remove-product-category-slug-woocommerce/
答案 1 :(得分:1)
使用Shehroz Altaf的技巧可以(几乎)完美地完成工作。
在$slug
和$exists
声明之间添加以下内容将使其也适用于子类别。
$slug_array = explode( '/', $slug );
$slug = array_values(array_slice($slug_array, -1))[0];
答案 2 :(得分:1)
对我来说分页不起作用。这是起作用的完整代码。
add_filter('request', function( $vars ) {
global $wpdb;
if( ! empty( $vars['pagename'] ) || ! empty( $vars['category_name'] ) || ! empty( $vars['name'] ) || ! empty( $vars['attachment'] ) ) {
$slug = ! empty( $vars['pagename'] ) ? $vars['pagename'] : ( ! empty( $vars['name'] ) ? $vars['name'] : ( !empty( $vars['category_name'] ) ? $vars['category_name'] : $vars['attachment'] ) );
$exists = $wpdb->get_var( $wpdb->prepare( "SELECT t.term_id FROM $wpdb->terms t LEFT JOIN $wpdb->term_taxonomy tt ON tt.term_id = t.term_id WHERE tt.taxonomy = 'product_cat' AND t.slug = %s" ,array( $slug )));
if( $exists ){
$old_vars = $vars;
$vars = array('product_cat' => $slug );
if ( !empty( $old_vars['paged'] ) || !empty( $old_vars['page'] ) )
$vars['paged'] = ! empty( $old_vars['paged'] ) ? $old_vars['paged'] : $old_vars['page'];
if ( !empty( $old_vars['orderby'] ) )
$vars['orderby'] = $old_vars['orderby'];
if ( !empty( $old_vars['order'] ) )
$vars['order'] = $old_vars['order'];
}
}
return $vars;
});
这将添加新的重写规则以分页查询。
add_action('init', 'do_rewrite');
function do_rewrite(){
add_rewrite_rule( '[^/]+/([^/]+)/page/?([0-9]{1,})/?$', 'index.php?attachment=$matches[1]&paged=$matches[2]', 'top' );
add_filter( 'query_vars', function( $vars ){
$vars[] = 'attachment';
$vars[] = 'paged';
return $vars;
} );}
答案 3 :(得分:0)
其他解决方案都失败了,经过一些试验和错误我想出了这个解决方案......
网址将如下所示
http://www.example.com/shop/category/sub-category/product
似乎适用于分页和子类别
答案 4 :(得分:0)
我知道这是一个古老的问题,但是如果有人从我的回答中受益,那么它会很好。
您可以将此插件用于此https://wordpress.org/plugins/woo-permalink-manager/
答案 5 :(得分:0)
您可以使用以下过滤器:woocommerce_register_post_type_product
如果您只想删除/ product /但保留类别,那么这里是一个示例。
add_filter( 'woocommerce_register_post_type_product', function($var) {
$var['rewrite'] = str_replace('/product/', '/', $var['rewrite']);
return $var;
});
然后确保通过更新“管理”面板中的永久链接来刷新永久链接。
请记住,您仍然会在管理面板永久链接的永久链接结构中看到“ / product /”,但这不会产生影响。