WooCommerce-如何删除产品&来自网址的产品类别?

时间:2017-04-17 07:30:23

标签: wordpress

我在WordPress上使用WooCommerce,它增加了产品和功能。产品类别

网址。

http://dev.unwaveringmedia.com/8dim/product-category/all-party-supplies/ http://dev.unwaveringmedia.com/8dim/product/14-snowman-serving-tray/

我需要删除'产品' &安培; '产品类别'来自网址。有没有办法修改永久链接并删除它们?

6 个答案:

答案 0 :(得分:11)

是。但请先阅读本文https://docs.woocommerce.com/document/removing-product-product-category-or-shop-from-the-urls/

您可以通过以下方式进行更改:

  1. 您可以更改设置>中的永久链接永久链接>可选>产品类别base = ./(类型./在产品类别库中)。

  2. 请确保您没有任何与类别页面具有相同名称(slug)的页面,帖子或附件,否则它们将发生冲突,代码将无效。

  3. 安装并激活以下插件: (有关详细信息,请参阅https://timersys.com/remove-product-category-slug-woocommerce/

  4. `

    alert()

    enter image description here

    有关详细信息,请参阅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)

其他解决方案都失败了,经过一些试验和错误我想出了这个解决方案......

  1. https://masterns-studio.com/code-factory/wordpress-plugin/woo-category-base/
  2. 免费安装'WOO CATEGORY BASE PERMALINK FIXER'插件
  3. 将产品类别基本永久链接设置为:shop
  4. 将自定义基本永久链接设置为:/ shop /%product_cat%/
  5. 网址将如下所示

    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 /”,但这不会产生影响。