web-dev-qa-db-ja.com

WooCommerceカートの特定の製品属性とメタデータをエコーする

更新(著者のコメントに関連):

WooCommerce cart.phpをカスタマイズして、製品ページでEssential Gridプレミアムプラグインを使用して正常に動作しているメタデータを表示したいと思います。

メタフィールドクリエーターエッセンシャルグリッド プラグインで作成したいくつかの製品属性フィールドとカスタムメタフィールドを表示したいと思います。

テストのために、私は'Height'属性(そう'pa_height')とカスタムフィールド'Age'を使用しています=どのスラッグか'eg-age-cal'

現在、私は以下を使用してみました:

<?php echo get_post_meta($product_id, 'pa_height', true );?>

そしてまた:

<?php echo get_post_meta($product_id, 'eg-age-cal', true );?>

しかし、これらは動作しないようです。

私は何とかしてコードを機能させることができました:

<?php echo get_post_meta($product_id, '_regular_price', true );?>

したがって、コードが機能していることがわかります。

これらのカスタム属性とカスタムフィールドから値を取得するにはどうすればよいですか。

ありがとう。

7
Steven Wright

更新(WC 3+との互換性)

以下のコメントで説明した後、 Essential Gridプレミアムプラグイン(商用プラグイン)を使用していくつかのカスタムフィールドと属性を作成していることに気づきましたあなたのwooCommerce製品に関連しています。

この時点では、I't ca n't helpです。これは、このプラグインを以前に使用したことがなく、このプラグイン内のデータベースのどこにデータが保存されているかわからないためです。

通常のWordPress/WooCommerce関数を使用してこのデータを取得することはできないと思います。これが通常どおりget_post_meta()を使用してデータを取得しない…の理由です。

助けられる最良の方法は:
-データベースでそのカスタムフィールドデータを検索/探索します。
-検索/質問Essential Gridプラグイン作成者はスレッドをサポートします。


私の元の答え:

製品で定義されている属性の場合get_post_meta()関数を_$product_id_変数とともに使用する場合は、この方法で必要なデータを取得します(これは値の配列です)。

_// getting the defined product attributes
$product_attr = get_post_meta( $product_id, '_product_attributes' );

// displaying the array of values (just to test and to see output)
echo var_dump( $product_attr );
_

関数get_attributes()(より推奨)を次のように使用することもできます。

_// Creating an object instance of the product
$_product = new WC_Product( $product_id );

// getting the defined product attributes
$product_attr = $_product->get_attributes();

// displaying the array of values (just to test and to see output)
echo var_dump( $product_attr );
_

すべてのコードがテストされ、機能しています。

NOW CART DATA IS SET IN COOKIES AND SESSIONSそしてカートデータを取得するにはWC()->cart構文を使用する必要がありますとアイテム

したがって、次の種類のコードを使用してカート内のアイテム(製品)を取得できます。

_foreach ( WC()->cart->get_cart() as $cart_item ) {
    $product = $cart_item['data'];
    if(!empty($product)){

        // getting the defined product attributes
        $product_attr = $_product->get_attributes();

        // displaying the attributes array of values (just to test and to see output)
        echo var_dump( $product_attr ) . '<br>';
    }
}
_

これにより、CART内の各製品の値の属性配列が表示されます。


ソリューションこのスレッド に基づいて、同じコードスニペット内でwc_get_product_terms()を使用して取得しますあなたの属性:

_foreach ( WC()->cart->get_cart() as $cart_item ) {
    $product = $cart_item['data'];
    if(!empty($product)){

        // compatibility with WC +3
        $product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;

        // Getting "height" product attribute
        $myAttribute = array_shift( wc_get_product_terms( $product_id, 'pa_height', array( 'fields' => 'names' ) ) );
        echo $myAttribute . '<br>';
    }
}
_

参照:

5
LoicTheAztec