woocommerce 관련 제품을 사용자 정의하는 방법은 무엇입니까? [닫은]


14

WooCommerce의 단일 제품 페이지 하단에 관련 제품 을 표시하는 웹 사이트에 다음 코드 줄이 있습니다 ...

functions.php :

// display upsells and related products within dedicated div with different column and number of products
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products',20);
remove_action( 'woocommerce_after_single_product', 'woocommerce_output_related_products',10);
add_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20);

function woocommerce_output_related_products() {
    $output = null;

    ob_start();
    woocommerce_related_products(4,4); 
    $content = ob_get_clean();
    if($content) { $output .= $content; }

    echo '<div class="clear"></div>' . $output;
}

동일한 이름으로 분류 된 4 개의 제품을 표시 할 때 관련 태그를 대신 표시하려면 위의 내용을 어떻게 수정 합니까?

예를 들어 '자동차'라는 제품 카테고리가 있으며이 카테고리에는 '홀드', '포드', '도요타', '닛산'등의 태그가 있습니다.

사용자가 현재보고있는 제품의 태그와 관련하여 맨 아래에 4 개의 제품을 표시하고 싶습니다.

답변:


29

먼저 질문에 표시 한 코드로 설명 된 목표를 즉시 달성 할 수 없습니다. 해당 코드에 직접적인 접근 방식이없는 이유를 이해하려면 woocommerce_related_products()지금까지 수행 한 작업을 수행하기 위해 사용중인 항목을 살펴 봐야 합니다.

둘째 , 당신은 그렇지 않으면 당신이 대답을 확실히하기 위해 절대 목표가되어야하는 질문을 할 수 없기 때문에 이해해야합니다. Wordpress Development 는 WordPress 핵심 관련 질문에 대한 기본 범위를 가지고 있음을 명심 해야합니다. 관심이 있으시면 Wordpress Development Meta 에 대해 논의 중입니다.이 주제는 WPSE의 플랫폼 플러그인의 미래입니다. . 따라서 woocommerce와 같은 플러그인에 대한 질문을하는 경우 가능한 한 핵심 기능과 관련하여 플러그인을 분해해야합니다-다음 요점을 참조하십시오-사람들이 모든 플러그인의 모든 세부 사항을 알 수는 없으므로 사용 중입니다.

셋째 , 이제 무슨 일이 일어나고 있는지 더 깊이있는 통찰력을 얻을 수 있습니다. 당신이 말했듯이, 당신은 woocommerce_related_products()지금 사용하고 있습니다. 소스를 살펴보면이 함수가 템플릿 woocommerce_get_template()을 가져 오는 데 사용 됩니다 related.php. woocommerce_get_template()다시 woocommerce_locate_template()템플릿을 찾는 데 사용하고, 후자는 wordpress core 기능을 사용하여 템플릿을 찾습니다 locate_template().
이제 코어와의 연결이 이루어졌으며, 위에서 언급 한 (그리고 희망적으로 검사 된) 우 커머스 기능은 본질적으로 핵심 기능을 확장하기위한 랩퍼라는 사실을 깨달았습니다. 기능 의존성을 분석하여 분명하게 한 또 다른 것은 이전에 말한 바와 같이 목표를 달성하기 위해 다른 접근법이 필요 woocommerce_related_products()하다는 것입니다.
당신이 내 설명을 따라 나를 따라 지금까지 철저히 읽었다면, related.php당신이 찾고있는 것을 포함하고 있음을 깨달았습니다 . 나는 특히 훅 get_related()을 포함 woocommerce_product_related_posts하고 핵심 기능을 사용 하는 함수 에 대해 이야기 wp_get_post_terms()하고 있으며 get_posts()- get_related()일련의 ID를 얻는 데 사용됩니다. 추가적으로이 woocommerce_related_products_args관련 제품 쿼리 내부의 인수를 변경하는 데 사용할 수있는 훅 related.php, WP_Query이 사용됩니다. 쿼리는 get_related()호출 의 결과 ID를 사용합니다 .
문제를 해결하기 위해 모든 것이 준비되어 있다고 생각합니다. 실제로 그 이상으로 관련 제품을 사용자 정의하는 방법에 대한 거의 완전한 개요를 제공합니다. 나는 검사 된 소스 코드에서 모든 기능 (기능 및 / 또는 후크)을 언급하지는 않았지만 모든 중요한 기능을 언급했습니다. 이제 woocommerce의 관련 제품 기능을 워드 프레스 핵심 기능으로 추적 할 수있는 방법이 명확 해졌습니다.

넷째 , 사용자 정의를 적용 할 위치와 요청한 내용을 살펴 봅니다. 예를 들면 다음과 같습니다.

Woocommerce는 관련 제품을 결정하기 위해 통화를 woocommerce_product_related_posts사용자 정의해야 get_posts()합니다.

암호:

        // Get the posts
        $related_posts = get_posts( apply_filters('woocommerce_product_related_posts', array(
                'orderby' => 'rand',
                'posts_per_page' => $limit,
                'post_type' => 'product',
                'fields' => 'ids',
                'meta_query' => $meta_query,
                'tax_query' => array(
                        'relation' => 'OR',
                        array(
                                'taxonomy' => 'product_cat',
                                'field' => 'id',
                                'terms' => $cats_array
                        ),
                        array(
                                'taxonomy' => 'product_tag',
                                'field' => 'id',
                                'terms' => $tags_array
                        )
                )
        ) ) );

목표를 달성하기 위해이를 어떻게 사용자 지정할 수 있습니까? 표시 되는 단일 제품 product_cat과 동일한 제품 범주에 있고 동일한 태그가있는 관련 product_tag제품을 표시하는 것입니다.

적어도 완벽하고 준비된 코드 응답을 얻을 것으로 기대되는 경우가 아니라면 결론을 내리지 않으면 가장 먼저해야 할 일은 tax_query매개 변수를 relation에서 (으) OR로 변경하는 것 AND입니다.





노트:

  • 위의 링크 된 진행중인 토론을 염두에 두고이 설명을 더 길게 설명했습니다.
  • 귀하의 질문에 대한 답변 일뿐만 아니라 일반적인 교육 목적을 달성하기 위해 추가적으로 노력하고 있음을 염두에 두시기 바랍니다.
  • 이는 검증되지 않은 실제 준비가 만든 코드가 없기 때문에,
  • 마지막으로 woocoomerce 2.1이 출시되면서 몇 가지 중요한 코드 변경이 구현 될 것으로 예상되지만 2.0.19부터는 위의 코드가 유효합니다.



편집하다:

핵심 클래스를 직접 편집 (플러그인)해서는 안됩니다. 코어 파일을 업데이트하면 덮어 쓰기 때문에 업데이트를 다시 변경해야하기 때문에 문제가됩니다. 특히이 경우처럼 쉽게 피할 수없는 경우 아래 코드는 어쨌든 수행하려는 작업을 수행합니다 functions.php.

암호:

    add_filter( 'woocommerce_product_related_posts', 
                'wpse_123436_change_wc_related_products_relation_to_and' );
    function wpse_123436_change_wc_related_products_relation_to_and() {
            $get_related_products_args = array(
                'orderby' => 'rand',
                'posts_per_page' => $limit,
                'post_type' => 'product',
                'fields' => 'ids',
                'meta_query' => $meta_query,
                'tax_query' => array(
                    'relation' => 'AND',
                    array(
                        'taxonomy' => 'product_cat',
                        'field' => 'id',
                        'terms' => $cats_array
                    ),
                    array(
                        'taxonomy' => 'product_tag',
                        'field' => 'id',
                        'terms' => $tags_array
                    )
                )
            );
            return $get_related_products_args;
    }



WooCommerce 버전 2.1.0 이상에서는 더 이상 존재하지 않으므로 위의 후크가 작동하지 않으므로 버전 2.0.20까지 답변을 사용할 수 있습니다. 그러나 @NathanPowell은 사용 가능한 v2.1.0부터 관련 후크를 사용할 수있는 관련 제품사용자 정의 에 관한 StackOverflow에 대한 훌륭한 답변을 발견했습니다 .


빠르고 자세한 답변을 위해 @ialocin에게 대단히 감사합니다. 임시 조치로, 나는 단순히 변경 ORAND내에서 wp-content/plugins/woocommerce/classes/abstract/abstract-wc-product.php파일을 곧 이것이 내에서 수행 할 변경됩니다 functions.php파일. 다시 감사합니다.
user1752759

@ user1752759 다음 작업을 통해 수정 내용보기functions.php
Nicolai

완벽한 답변! 플러그인을 이해하는 방법과 필요에 따라 확장하는 방법에 대한 가이드 북에서 사용해야합니다. 이 책이 존재하는지 확실하지 않습니다 .. 그러나 여전히 :)
ThdK

@ ThdK 고마워, 나는 그것이 좋은지 모른다. WC 2.1.x로 이것을 시도 했습니까?
Nicolai

안녕하세요 @ialocin. 하단의 편집 된 버전에 닫는 괄호가 누락되어 불행히도 더 이상 버전 2.1.8의 솔루션으로 작동하지 않습니다. 문제가되지 않으면 업데이트 해 주시겠습니까?
user1752759

2

여기 사람들을 속이지 마십시오. 허용 된 답변은 사용자에게 그의 목표를 가져 왔습니다.

첫 번째 문제는 다음과 같습니다.

<?php
// display upsells and related products within dedicated div with different column and number of    products
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products',20);
remove_action( 'woocommerce_after_single_product', 'woocommerce_output_related_products',10);
add_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20);

조치가 제거 된 후 제거 된 정확한 위치에 배치됩니다. 목표는 명확하지 않습니다.

태그와 카테고리 woocommerce_output_related_products가이 플러그인 의 기능을 주도하는 요소라는 것을 이해하지 못했기 때문에 관련 제품에 대한 검색을 통해이 문제를 발견했습니다 .

이 질문에 대한 가장 좋은 답변은 다음 링크이며 woocommerce_output_related_products_args()필터 와 관련이 있습니다. /programming/23554993/output-posts-related-to-the-tags


이것은 실제로 매우 재미있다. 내 대답을주의 깊게 읽으면 한 필터 만 사용하기 때문에 질문 할 수있는 이유는 무엇입니까? 그 당시에 사용 가능한 유일한 필터가 되려면, 내가 실제로 쓴 것을 읽고 다른 버전의 소스 파일을 보는 데 시간이 걸린다는 것을 알 것입니다. 그냥 말하면 그 외에도, 당신이 연결 한 대답은 사용 가능한 새로운 후크 v2.1을 잘 설명합니다.
Nicolai

죄송합니다. 늦은 밤이었습니다. OP의 코드에서 명백한 결함에 대해 조금 설명하고 싶었습니다.
Nathan Powell

걱정할 필요는 없지만 말을해야한다고 느꼈습니다.
Nicolai

참조 링크가 저에게 도움이되었습니다. Nathan, 감사합니다. 지금 2 시간 동안 직접 해보려고했습니다. 이제 필터를 올바르게 적용하는 것을 알고 있습니다 :)
marcovega
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.