WooCommerceはWordPressベースのネット通販サイトを構築するのに便利なプラグインです。通常の物販ではネット通販に必要な機能は一通り備わっているのでそのままの状態で運用できると思います。今回は現在クライアントから依頼されている旅行ガイドに関するマッチング用途で使います。扱う商品がガイドプランである特殊性から商品属性を追加する必要性が出てきました。今回は、旅行プランの都市名を商品属性として追加しましたのでその手順をご紹介します。
商品属性に関連するソースコードは /wp-content/plugins/woocommerce/includes/admin/meta-boxes/class-wc-meta-box-product-data.php にあり、このファイルにコードを2ヶ所追加します(元ファイルは保存して下さい)。まず、1つ目はpublic static function output( $post )関数下140行目辺りにある以下の場所です。
<div id="general_product_data" class="panel woocommerce_options_panel"><?php echo '<div class="options_group hide_if_grouped">'; // SKU if ( wc_product_sku_enabled() ) { woocommerce_wp_text_input( array( 'id' => '_sku', 'label' => '<abbr title="'. __( 'Stock Keeping Unit', 'woocommerce' ) .'">' . __( 'SKU', 'woocommerce' ) . '</abbr>', 'desc_tip' => 'true', 'description' => __( 'SKU refers to a Stock-keeping unit, a unique identifier for each distinct product and service that can be purchased.', 'woocommerce' ) ) ); } else { echo '<input type="hidden" name="_sku" value="' . esc_attr( get_post_meta( $thepostid, '_sku', true ) ) . '" />'; }このSKUは商品属性の最上位で、これ以下数個の属性が同様に記述されていますので追加したい位置を決めます。今回はこのSKUの更に上、つまり最上位に_product_cityという属性を選択要素として追加します。因みに選択肢はBuddyPressのグループ名で値は既に$groups配列に格納されています。
<div id="general_product_data" class="panel woocommerce_options_panel"><?php $city_options = ''; foreach ( $groups['groups'] as $group ) { $city_options[$group->slug] = $group->name; } echo '<div class="options_group hide_if_grouped">'; woocommerce_wp_select( array( 'id' => '_product_city', 'label' => __( 'Product City', 'woocommerce' ), 'options' => $city_options, 'desc_tip' => 'true', 'description' => __( 'Choose the city where this product is relevant.', 'woocommerce' ) ) ); echo '</div>';次にこの属性値を保存・更新するためのコードを追加します。同じファイルのpublic static function save( $post_id, $post ) 関数下800行目以下に保存・更新するためのコードが羅列されているので適当な箇所に以下のコードを追加します。
if ( isset( $_POST['_product_city'] ) ) { update_post_meta( $post_id, '_product_city', wc_clean( $_POST['_product_city'] ) ); }WordPress管理画面 > WooCommerce > 商品 > で商品一覧から1つを選んで商品詳細ページを見ると下図のように Product City が追加されています。この手順通りにやれば思い通りに商品属性を変更できそうです。