WooCommerce-如何从网址中删除产品和产品类别?

Bha*_*ee 5 wordpress

我在WordPress上使用WooCommerce,它将产品和产品类别添加到

网址.

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

我需要从网址中删除"产品"和"产品类别".有没有办法修改永久链接并删除它们?

小智 13

是.但请首先阅读本文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/)

`

<?php
/*
Plugin Name: Remove product-category slug
Plugin URI: https://timersys.com/
Description: Check if url slug matches a woocommerce product category and use it instead
Version: 0.1
Author: Timersys
License: GPLv2 or later
*/
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;
});`
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

有关详细信息,请参阅https://timersys.com/remove-product-category-slug-woocommerce/


Gor*_*vic 8

没有人提到如何删除 /product/ 所以这里是:

function na_remove_slug( $post_link, $post, $leavename ) {
    if ( 'product' != $post->post_type || 'publish' != $post->post_status ) {
        return $post_link;
    }
    $post_link = str_replace( '/product/', '/', $post_link );
    return $post_link;
}
add_filter( 'post_type_link', 'na_remove_slug', 10, 3 );

function change_slug_struct( $query ) {

    if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) {
        return;
    }

    if ( ! empty( $query->query['name'] ) ) {
        $query->set( 'post_type', array( 'post', 'product', 'page' ) );
    } elseif ( ! empty( $query->query['pagename'] ) && false === strpos( $query->query['pagename'], '/' ) ) {
        $query->set( 'post_type', array( 'post', 'product', 'page' ) );

        // We also need to set the name query var since redirect_guess_404_permalink() relies on it.
        $query->set( 'name', $query->query['pagename'] );
    }
}
add_action( 'pre_get_posts', 'change_slug_struct', 99 );
Run Code Online (Sandbox Code Playgroud)

我添加了优先级,因为某些主题/插件可能与此规则冲突,这发生在我身上。