programing

카테고리를 보호하기 위해 Woocommerce의 Shop 페이지를 비활성화합니다.

goodsources 2023. 2. 10. 21:46
반응형

카테고리를 보호하기 위해 Woocommerce의 Shop 페이지를 비활성화합니다.

Woocommerce에서 "shop" 페이지를 비활성화하려고 합니다.기본적으로는 사진작가를 위한 인화 및 이미지 다운로드를 판매하기 위한 숍 테마를 만들고 있습니다.

프라이빗 갤러리를 작성해야 하기 때문에 커스텀 투고 타입을 작성했습니다.여기서 woocommerce 카테고리 단축코드를 사용하여 제품을 표시하고 그 투고 타입을 패스워드로 보호합니다.

이것은 woocommerce 카테고리를 보호하기 위한 패스워드의 회피책입니다(더 나은 카테고리를 알고 있는 경우는, 설명해 주세요).

문제는 누군가가 "보호 대상"을 포함한 모든 제품을 /쇼핑에 간다는 것입니다.그래서 샵 페이지를 비활성화 시켜야 하고, 테마 기능으로 프로그래밍을 해야 합니다.무슨 생각 있어?

숍 페이지를 비활성화하려면archive-product.php에서 줄서다/wp-content/plugins/woocommerce/templates/archive-product.php넣어주세요/wp-content/themes/{Your Theme}/woocommerce/archive-product.php

파일을 열고 아래 코드로 파일 내의 모든 파일을 덮어씁니다.

<?php
global $wp_query;

$wp_query->set_404();
status_header(404);

get_template_part('404');

파일을 저장하면 Shop 페이지가 사라지고 404 페이지로 바뀝니다.

함수에 추가:

function woocommerce_disable_shop_page() {
    global $post;
    if (is_shop()):
    global $wp_query;
    $wp_query->set_404();
    status_header(404);
    endif;
}
add_action( 'wp', 'woocommerce_disable_shop_page' );

문서: WooCommerce 조건부 함수 문서

WooCommerce에는 제품 투고 유형을 작성하기 위해 사용하는 배열에 대한 필터가 있습니다.woocommerce_register_post_type_product.

아카이브 템플릿을 변경하여 강제로 리디렉션하는 대신 게시 유형의 아카이브를 완전히 제거할 수 있지만,has_archive작성 시 포스트 타입의 속성.

add_filter('woocommerce_register_post_type_product', function($post_type) {
    $post_type['has_archive'] = false;
    return $post_type;
});

그런 다음 WooCommerce > Settings > Product > Display 순으로 이동하여 "Shop Page" 옵션의 "x"를 클릭하여 CMS에서 상점 페이지를 삭제해야 합니다.

Permalink 캐시를 플러시해야 할 수 있습니다.이 작업은 [Settings]> [ Permalinks ]의 [Update]버튼을 클릭하는 것만으로 실행할 수 있습니다.

*편집 - 아래 페이지 설정이 작동하지 않는 것 같습니다.만약 WooCommerce에 변경할 플러그인 설정이 없다면 저는 개인적으로 Redirection과 같은 워드프레스 리다이렉트 플러그인을 사용합니다.이렇게 하면 원치 않는 상점 페이지에서 제품이 표시되는 페이지로 자동으로 리디렉션할 수 있습니다.그것은 404 문제를 피하고 모든 것을 적절하게 유지합니다.또한 템플릿 파일을 편집하지 않기 때문에 개발자가 아닌 사용자에게 복잡성이 가중됩니다.


오래된 답변:

우 세팅 해봤어?

관리 영역, 왼쪽 메인 메뉴, Woocommerce > Settings 페이지 탭을 클릭합니다.

페이지 설정은 "Shop Base Page(기본 페이지 쇼핑)"이며 드롭다운에는 오른쪽에 작은 "x"가 있습니다.페이지를 제거하려면 여기를 클릭하십시오.

다른 곳에 수정해야 할 링크가 있으면 알려주시면 수정하기 위한 후크/필터를 찾아드리겠습니다.

template_redirect는 페이지 렌더링 전 마지막 후크입니다.따라서 제 사용 예에서는 보고 있는 페이지가 "샵" 페이지인지, 가격 페이지로 리다이렉트되는지 여부를 묻습니다.

function my__template_redirect(){
    if(is_shop()){
        wp_redirect(site_url() . '/pricing/', '302');
    }
}
add_action('template_redirect', 'my__template_redirect');

마지막 제안은 WP 4.6.1과 WooCommerce 2.6.4에서는 통하지 않았습니다.게시 탭에서 제품을 숨기는 것이 좋습니다.

http://paperhedge.com/hide-products-from-displaying-in-shop-page-woocommerce/

기본 shop 페이지를 비활성화하고 /shop/slug를 커스텀페이지에 사용할 수 있도록 하려면 다음 명령을 사용합니다.

function remove_woocommerce_default_shop( $args, $post_type ) {
    if (class_exists('WooCommerce')) {
        if ( $post_type == "product" ) {
            $args['has_archive'] = true;
        }
        return $args;
    }
}
add_filter('register_post_type_args', 'remove_woocommerce_default_shop', 20, 2);

몇 가지(혹은 그 이상)를 걸 필요가 있습니다.

/* hide category from shop pages */
add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
function custom_pre_get_posts_query( $q ) {

    if ( ! $q->is_main_query() ) return;
    if ( ! $q->is_post_type_archive() ) return;

    if ( ! is_admin() ) {
        $q->set( 'tax_query', array(array(
            'taxonomy' => 'product_cat',
            'field' => 'slug',
            'terms' => array( YOUR-CATEGORY-SLUG, YOUR-CATEGORY-SLUG-2 ), // Don't display products in the knives category on the shop page
            'operator' => 'NOT IN'
        )));

    }

    remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

}

고양이 또는 고양이가 숍 페이지에서 숨길 수 있도록 YOUR-CATGERY-SLUG, YOUR-CATGERY-SLUG-2를 변경합니다.

그럼 남성에게도 숨겨야겠죠?

/* hide category from menues */
add_filter( 'get_terms', 'get_subcategory_terms', 10, 3 );
function get_subcategory_terms( $terms, $taxonomies, $args ) {
    $new_terms = array();

    // if category and on the shop page (change it with is_woocommerce() if want to hide from all woo pages)
    if ( in_array( 'product_cat', $taxonomies ) && ! is_admin() && is_shop() ) {

        foreach ( $terms as $key => $term ) {
          if ( ! in_array( $term->slug, array( YOUR-CATEGORY-SLUG, YOUR-CATEGORY-SLUG-2 ) ) ) {
            $new_terms[] = $term;
          }

    }
        $terms = $new_terms;
    }
  return $terms;
}

하지만 이것이 100% 해결되는 것은 아니라고 생각합니다.그 이후 검색 결과는 어떻게 됩니까?

이거 드셔보세요

  1. "Shop"이라는 이름의 새 페이지를 만듭니다.
  2. "woocommerce" > "Settings" > "Product" > "Display" 탭으로 이동합니다.
  3. "Shop"이라는 이름의 상점 페이지를 선택한 다음 변경 사항 저장을 클릭합니다.
  4. "페이지"로 돌아가서 "쇼핑" 페이지를 삭제합니다(페이지를 휴지통에 보관하고 영구적으로 삭제하지 마십시오).

이 방법은 나에게 효과가 있다

언급URL : https://stackoverflow.com/questions/12716020/disable-shop-page-on-woocommerce-to-protect-categories

반응형