概要
woocommerce_product_read アクションは、WooCommerceの商品が読み込まれた際に実行されるフックです。このアクションが発火するのは、ユーザーが商品ページを訪れたときです。以下のような機能を実装する際によく使われます。
- 商品ビューのトラッキング
- SEOのためのメタ情報の追加
- 商品情報のカスタマイズ
- サードパーティサービスへの送信データの追加
- 商品表示のカスタムスタイリング
- 在庫や価格の更新に関するカスタム処理
構文
do_action('woocommerce_product_read', $product_id);
パラメータ
$product_id: 読み込まれた商品のIDを表す整数値。
戻り値
このアクション自体には戻り値はありません。
使用可能なプラグインWooCommerceのバージョン
- WooCommerce 3.0.0 以降
使用可能なWordPressのバージョン
- WordPress 4.0 以降
この関数のアクションでの使用可能性
| アクション | 使用例 |
|---|---|
| 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 |
サンプルコード
サンプル1: 商品ビューのトラッキング
このコードは、商品が読み込まれた際に、その商品IDをGoogleアナリティクスに送信する機能を実装します。
add_action('woocommerce_product_read', 'track_product_view');
function track_product_view($product_id) {
echo "<script>console.log('Viewed product: $product_id');</script>";
}
サンプル2: 商品ページにカスタムメッセージを追加
このコードは、商品が読み込まれた際に、商品ページにカスタムメッセージを表示します。
add_action('woocommerce_product_read', 'add_custom_message');
function add_custom_message($product_id) {
echo "<p>この商品は人気があります!</p>";
}
サンプル3: 商品メタデータの追加
このコードは、商品が読み込まれた際に、商品のメタ情報を追加する機能を実装します。
add_action('woocommerce_product_read', 'add_product_meta');
function add_product_meta($product_id) {
if ($meta_value = get_post_meta($product_id, '_custom_meta', true)) {
echo "<p>カスタムメタ: $meta_value</p>";
}
}
サンプル4: 外部APIへのデータ送信
このコードは、お客様が商品を読み込む時に外部APIにデータを送信します。
add_action('woocommerce_product_read', 'send_data_to_api');
function send_data_to_api($product_id) {
$response = wp_remote_post('https://example.com/api/track', [
'body' => ['product_id' => $product_id]
]);
}
サンプル5: 在庫情報のカスタム処理
このコードは、商品が読み込まれた際に在庫情報に基づいてカスタム処理を行います。
add_action('woocommerce_product_read', 'custom_stock_check');
function custom_stock_check($product_id) {
$stock = get_post_meta($product_id, '_stock', true);
if ($stock < 5) {
echo "<p>在庫が少なくなっています!</p>";
}
}