먼저 질문에 표시 한 코드로 설명 된 목표를 즉시 달성 할 수 없습니다. 해당 코드에 직접적인 접근 방식이없는 이유를 이해하려면 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에 대한 훌륭한 답변을 발견했습니다 .
OR
에AND
내에서wp-content/plugins/woocommerce/classes/abstract/abstract-wc-product.php
파일을 곧 이것이 내에서 수행 할 변경됩니다functions.php
파일. 다시 감사합니다.