概要
woocommerce_product_related_posts_query
フィルタは、WooCommerceにおいて関連商品を取得する際のクエリを変更するために使用されます。このフィルタを使うことで、デフォルトの関連商品表示をカスタマイズし、特定の商品を除外したり、他の条件によって表示する商品を変更することが可能です。主に以下のような機能を実装する際に役立ちます。
- 関連商品のフィルタリング
- 特定のカテゴリーの商品を優先表示
- 除外したい商品を指定
- 複雑な条件で関連商品を生成
- 表示数を変更
- カスタムメタデータに基づく関連商品の取得
このフィルタは、WooCommerceのバージョンが3.0以上、WordPressのバージョンが4.0以上で使用可能です。
構文
add_filter('woocommerce_product_related_posts_query', 'custom_related_posts_query', 10, 2);
パラメータ
$related_posts
:デフォルトで取得される関連商品のID配列$product_id
:現在表示中の商品ID
戻り値
- フィルタリングされた関連商品のID配列
サンプルコード
サンプルコード1: 特定の商品を除外
add_filter('woocommerce_product_related_posts_query', 'exclude_specific_product', 10, 2);
function exclude_specific_product($related_posts, $product_id) {
$exclude_ids = array(123, 456); // 除外する商品ID
return array_diff($related_posts, $exclude_ids);
}
このサンプルコードは、特定の商品ID(123, 456)を関連商品リストから除外します。
サンプルコード2: カテゴリーからのフィルタリング
add_filter('woocommerce_product_related_posts_query', 'filter_related_by_category', 10, 2);
function filter_related_by_category($related_posts, $product_id) {
$terms = wp_get_post_terms($product_id, 'product_cat', array('fields' => 'ids'));
return array_merge($related_posts, $terms);
}
このコードでは、現在の商品が属するカテゴリーに基づいて関連商品を取得し、関連商品リストを更新します。
サンプルコード3: 表示数の変更
add_filter('woocommerce_product_related_posts_query', 'change_related_posts_count', 10, 2);
function change_related_posts_count($related_posts, $product_id) {
return array_slice($related_posts, 0, 4); // 最大4件に制限
}
このサンプルは、関連商品の表示数を最大4件に制限しています。
サンプルコード4: 特定のメタデータで関連商品を選択
add_filter('woocommerce_product_related_posts_query', 'related_posts_by_meta', 10, 2);
function related_posts_by_meta($related_posts, $product_id) {
$meta_query = array(
'key' => 'custom_meta_key',
'value' => 'custom_value',
'compare' => '='
);
$related_posts = get_posts(array(
'post_type' => 'product',
'meta_query' => array($meta_query)
));
return wp_list_pluck($related_posts, 'ID');
}
このコードは、特定のカスタムメタデータ(custom_meta_key
及び custom_value
)に基づいて関連商品を選択します。
サンプルコード5: タグに基づく関連商品の取得
add_filter('woocommerce_product_related_posts_query', 'related_posts_by_tags', 10, 2);
function related_posts_by_tags($related_posts, $product_id) {
$tags = wp_get_post_terms($product_id, 'product_tag', array('fields' => 'ids'));
if ($tags) {
$related_posts = get_posts(array(
'tax_query' => array(
array(
'taxonomy' => 'product_tag',
'field' => 'term_id',
'terms' => $tags
)
)
));
}
return wp_list_pluck($related_posts, 'ID');
}
このサンプルでは、商品タグに基づいて関連商品を取得する機能を提供します。
この関数のアクションでの使用可能性
アクション | 使用可能性 |
---|---|
mu_plugin_loaded | |
registered_post_type | |
plugins_loaded | |
wp_roles_init | |
setup_theme | |
after_setup_theme | |
set_current_user | |
init | |
register_sidebar | |
wp_loaded | |
send_headers | |
parse_query | |
pre_get_posts | |
wp | |
template_redirect | |
get_header | |
wp_head |