WooCommerce - URL에서 제품 및 제품 카테고리를 삭제하는 방법
WordPress에서 WooCommerce를 사용하고 있습니다.WordPress에 제품 및 제품 카테고리가 추가됩니다.
URL.
http://dev.unwaveringmedia.com/8dim/product-category/all-party-supplies/ http://dev.unwaveringmedia.com/8dim/product/14-snowman-serving-tray/
URL에서 'product'와 'product-category'를 삭제해야 합니다.퍼멀링크를 수정하여 제거할 수 있는 방법이 있습니까?
네. 하지만 이 기사를 먼저 읽어보세요.https://docs.woocommerce.com/document/removing-product-product-category-or-shop-from-the-urls/
다음 방법으로 변경할 수 있습니다.
[ Settings ]> [ permalink ]> [ optional ]> [ Product category base = . / ](제품 카테고리 베이스에 ./ 라고 입력합니다)에서 permalinks 를 변경할 수 있습니다.
카테고리 페이지와 같은 이름(슬래그)의 페이지, 투고, 또는 첨부 파일이 없는 것을 확인해 주세요.그렇지 않으면, 페이지, 투고, 첨부 파일이 충돌해, 코드가 동작하지 않게 됩니다.
이하의 플러그 인을 인스톨 해 액티브하게 합니다(자세한 것에 대하여는, 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;
});`
상세한 것에 대하여는, https://timersys.com/remove-product-category-slug-woocommerce/ 를 참조해 주세요.
아무도 /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 );
일부 테마/플러그인이 이 규칙과 충돌할 수 있기 때문에 우선 순위를 추가했습니다.
페이지네이션과는 통하지 않았다.여기 동작하는 풀코드가 있습니다.
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;
} );}
셰로즈 알타프의 속임수를 사용하면 그 일을 완벽하게 해낼 수 있다.
사이에 다음 추가$slug
그리고.$exists
선언을 통해 하위 범주에서도 사용할 수 있습니다.
$slug_array = explode( '/', $slug );
$slug = array_values(array_slice($slug_array, -1))[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;
});
그런 다음 Admin 패널에서 permalinks를 업데이트하여 permalinks를 플러시하십시오.
관리 패널 Permalinks의 permalink 구조에는 '/product/'가 계속 표시되지만 영향을 미치지는 않습니다.
다른 솔루션은 모두 실패했고, 시행착오를 거듭한 끝에 이 솔루션을 생각해 냈습니다.
- https://masterns-studio.com/code-factory/wordpress-plugin/woo-category-base/에서 무료 'WO CATGERY BASE PERMALINK FIXER' 플러그인을 설치합니다.
- Product Category Base Permalinks를 shop으로 설정합니다.
- 커스텀 베이스 퍼멀링크를 /shop/%product_cat%/로 설정합니다.
그러면 URL은 다음과 같이 표시됩니다.
http://www.example.com/shop/category/sub-category/product
페이지 번호부여 및 하위 카테고리에 대해서는 정상적으로 동작하고 있는 것 같습니다.
언급URL : https://stackoverflow.com/questions/43447175/woocommerce-how-to-remove-product-product-category-from-urls
'programing' 카테고리의 다른 글
레일에서 JSON을 렌더링할 때 관련 모델 포함 (0) | 2023.02.23 |
---|---|
Json을 반환하지만 원하지 않는 뒤로 슬래시 "\"를 포함합니다. (0) | 2023.02.23 |
문자열 배열에서 Orderby 필터를 작동시키는 방법은 무엇입니까? (0) | 2023.02.23 |
oracle sqlplus에서 테이블 데이터를 보다 명확하게 표시하는 방법 (0) | 2023.02.23 |
리액트JS에 표시되도록 div를 스크롤하려면 어떻게 해야 합니까? (0) | 2023.02.23 |