필터링 된 제품을 표시 할 때 / shop / 페이지에서 카테고리 템플릿을 재정의하는 방법은 무엇입니까?

불꽃

URL 매개 변수를 사용하여 제품을 필터링하고 / shop / 페이지에 표시하는 기능을 이미 만들었습니다. 잘 작동합니다.

그러나 제품 템플릿이 WooCommerce /shop/페이지 에 설정된 경우에만 작동합니다 .

필자의 경우 요구 사항은 카테고리 목록을 /shop/페이지의 기본 템플릿으로 설정하는 것 입니다. 즉, URL 매개 변수를 사용하여 제품 쿼리를 실행할 때 해당 템플릿을 재정의하고 필터링 된 제품 목록을 표시해야합니다.

(예. example.com/shop/?param1=foo&param2=bar)

다음 코드 (및 일부 반복)를 시도했지만 제품 필터가 적용될 때 기본 템플릿을 재정의하는 방법에 대한 단서가 없습니다.

add_filter( 'woocommerce_locate_template', [$this, 'my_include_template_function'], 10, 3 );

public function my_change_template_function($template, $template_name, $template_path)
{
    if (!empty($_GET['param1']) && is_shop() && $template_name == 'content-product_cat.php') {
        return wc_get_template_part('content', 'product');
    } else {
        return $template;
    }
}
Helgatheviking

따라서 범주 루프의 소스는 [필터를 통해] [1] 루프 시작에 추가됩니다.

add_filter( 'woocommerce_product_loop_start', 'woocommerce_maybe_show_product_subcategories' );

woocommerce_maybe_short_product_subcategories()함수에 기초하여 출력을 변경한다 :

$display_type = woocommerce_get_loop_display_mode();

그러나 woocommerce_get_loop_display_mode()결과는 직접 필터링 할 수 없습니다.

그러나 get_option()(설정이 사용자 get_option()지정자 에 있으므로)의 일부 값에 의존하며 다음을 통해 필터링 할 수 있습니다.option_$option

따라서 특정 매개 변수 가있을 때 WooCommerce 에 카테고리를 표시 하지 않도록 지시 하는 잠재적 인 방법 은 해당 매개 변수가 URL에서 감지 $_GETproducts상점 표시 모드 옵션을 필터링 할 수 있습니다 . 이렇게 :

/**
 * Filter shop display type.
 *
 * @param string $value - 'products' | 'subcategories' | 'both'
 * @return string
 */
function kia_woocommerce_shop_page_display( $value ) {
    if ( ! empty( $_GET['param1'] ) {
        $value = 'products';
    }
    return $value;
}
add_filter( 'option_woocommerce_shop_page_display', 'kia_woocommerce_shop_page_display' );

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관