programing

WooCommerce - 제품 카테고리 슬러그를 상점 기반으로 변경

muds 2023. 9. 18. 22:47
반응형

WooCommerce - 제품 카테고리 슬러그를 상점 기반으로 변경

이제 저는 이틀 동안 이 문제를 파악하려고 노력했고 거의 정신을 잃을 지경에 이르렀습니다.

이제 제 링크는 mydomain.com/product-category/clothing/t-shirts/ 이고 저는 mydomain.com/store/clothing/t-shirts/ 이 되기를 원합니다.

상품 카테고리 퍼말링크를 변경해야 하는데 설정 - 퍼말링크스 - 상품 카테고리 베이스를 /store/로 변경하면 상품 페이지에 접속하려고 하면 404가 나옵니다.

도와주시면 정말 감사하겠습니다! 감사합니다.

여기서 내 코드 보기: http://levantoan.com/cach-cai-dat-base-cua-danh-muc-san-pham-giong-voi-base-cua-trang-san-pham/

또는 github https://gist.github.com/levantoan/fc705c5ae4739e6d87e2ec51b257ea5c 에서.

먼저 Setting / Permalinks로 이동합니다.

매장기준 : 매장
상품 카테고리 기준 : 매장(매장 기준 동일)
제품 퍼머링크 베이스:카테고리가 있는 상점 기준(예: /store/%product_cat%)

그런 다음 함수에 코드를 삽입합니다.php

//base product category same base shop Page for woocommerce
add_filter( 'rewrite_rules_array', function( $rules )
{
    $new_rules = array();
    $terms = get_terms( array(
        'taxonomy' => 'product_cat',
        'post_type' => 'product',
        'hide_empty' => false,
    ));
    if($terms && !is_wp_error($terms)){
        $siteurl = esc_url(home_url('/'));
        foreach ($terms as $term){
            $term_slug = $term->slug;
            $baseterm = str_replace($siteurl,'',get_term_link($term->term_id,'product_cat'));

            $new_rules[$baseterm.'?$'] = 'index.php?product_cat='.$term_slug;
            $new_rules[$baseterm.'page/([0-9]{1,})/?$'] = 'index.php?product_cat='.$term_slug.'&paged=$matches[1]';
            $new_rules[$baseterm.'(?:feed/)?(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?product_cat='.$term_slug.'&feed=$matches[1]';

        }
    }
    return $new_rules + $rules;
} );

Polylang이 지원하는 솔루션.

@Tản Lă Vnn에 따르면.

add_filter( 'rewrite_rules_array', 'your_prefix_rewrite_rules', 9999 );

function your_prefix_rewrite_rules( $rules ) {
    $new_rules = [];

    $languages = pll_languages_list();
    $your_base = 'shop';

    foreach ( $languages as $lang ) {
        $terms = get_terms(
            [
                'taxonomy'   => 'product_cat',
                'post_type'  => 'product',
                'hide_empty' => false,
                'lang'       => $lang,
            ]
        );

        if ( empty( $terms ) || is_wp_error( $terms ) ) {
            continue;
        }

        $site_url = esc_url( home_url( '/' ) );
        foreach ( $terms as $term ) {
            $term_slug = $term->slug;
            $base_term = str_replace( $site_url, '', get_term_link( $term->term_id, 'product_cat' ) );

            $new_rules[ $base_term . '?$' ]                                    = 'index.php?lang=' . $lang . '&product_cat=' . $term_slug;
            $new_rules[ $base_term . 'page/([0-9]{1,})/?$' ]                   = 'index.php?lang=' . $lang . '&product_cat=' . $term_slug . '&paged=$matches[1]';
            $new_rules[ $base_term . '(?:feed/)?(feed|rdf|rss|rss2|atom)/?$' ] = 'index.php?lang=' . $lang . '&product_cat=' . $term_slug . '&feed=$matches[1]';

        }

        if ( isset( $rules[ '(' . $lang . ')/' . $your_base . '/(.+?)/?$' ] ) ) {
            unset( $rules[ '(' . $lang . ')/' . $your_base . '/(.+?)/?$' ] );
        }

        if ( isset( $rules[ '(' . $lang . ')/' . $your_base . '/(.+?)/([^/]+)?(:/([0-9]+))?/?$' ] ) ) {
            unset( $rules[ '(' . $lang . ')/' . $your_base . '/(.+?)/([^/]+)?(:/([0-9]+))?/?$' ] );
        }

        if ( isset( $rules[ '(' . $lang . ')/' . $your_base . '/.+?/[^/]+/([^/]+)/?$' ] ) ) {
            unset( $rules[ '(' . $lang . ')/' . $your_base . '/.+?/[^/]+/([^/]+)/?$' ] );
        }
    }

    return $new_rules + $rules;
}

언급URL : https://stackoverflow.com/questions/28221920/woocommerce-change-product-category-slug-to-shop-base

반응형