2017-01-20 6 views
0

これをWP Stack Exchangeに入れますが、それはPHPがあるので、しばしば言います。より適切であれば移動できます。テンプレート/関数にWordPress WooCommerceカスタム属性を表示するには?

「ファブリック」と呼ばれるカスタムwoocommerceプロダクト属性を表示するには、たとえば次のように読んだことがあります。

$fabric_values = get_the_terms($product->id, ‘pa_fabrics’); 

foreach ($fabric_values as $fabric_value) { 
    echo $fabric_value->name; 
} 

しかし、私たちはPHPテンプレート全体で多くの属性を使用するので、より短い方法があります。例えば

単純に行う方法があり、「エコーget_the_terms($製品 - >のid 『pa_fabricsは』);」

または1つは、自分のサイトに追加することができ、単一の機能があり、なるように、 WooCommerce以外のサイトで「Advanced Custom Fields」を使用する場合のように、上記のような短い1行の製品属性をエコーすることができますか?比較的簡単にデータを取得するための単一の短いコードを作成する方法を提供していますSO上this thread見つかり

UPDATE

echo get_the_terms($product->id, 'pa_fabrics'); 

または

echo $product->get_attributes('pa_fabrics'); 

最後のオプションは、最もクリーンで理想的なが、エラーになりそうです:それは確かにオプションですが、のような方法で構築された任意のクリーナーがあるかどうかを確認したいと思います: "致命的なエラー:キャッチされていないエラー:nullの場合、関数function.phpファイル内のget_attributes()を呼び出す。

+0

を意味していますか? – helgatheviking

+0

WooCommerceの新機能が不明なためあなたが提供したその機能でWooCommerce製品属性をどのように使用するのかの例を教えてください。たとえば、上の例を次のように置き換えることができます:echo get_the_terms_list($ product-> id、 'pa_fabrics'); – cchiera

+0

ドキュメントを読むと、最初の引数は製品/ポストIDであり、2番目のものはtaxonomyの名前で、これは 'pa_color'と推測しています。上記のコードはどこに/どのように使用していますか?完全なスニペットを投稿してください。あなたの致命的なエラーは '$ product'がクラスオブジェクトではなくNULLになった結果です。 – helgatheviking

答えて

2

あなたの質問に対する答えは、フレキシブルにするにはこれが必要です。

まず、2つの例を見てみましょう。

1)echo get_the_terms(. . .

それは戻り値の型を知っておくことが重要です機能を使用して。 get_the_terms()は成功した場合に配列を返します。表示するには、配列で何かする必要があります。

https://developer.wordpress.org/reference/functions/get_the_terms/

2)echo $product->get_attributes(...

あなたは正しい道を向かっている:)あなたが見ているエラーが$productあなたはそれがために期待しているものではないことを示しています。 get_attributes()は、WC_Productクラスのメソッドです。それを使用するには、そのクラスのインスタンスが必要です。

製品を入手する1つの方法は、wc_get_product()を使用することです。

$product = wc_get_product(); 

ここで2番目の問題は、メソッド自体です。 get_attributes()は、get_the_terms()のように配列を返します。そのデータを表示するのはあなたの責任です。

代わりにget_attribute()を探していると思います。このメソッドは、唯一の引数として属性名を取り、属性値の文字列を返します。

例:あなたは[ `get_the_term_list()`](https://codex.wordpress.org/Function_Reference/get_the_term_list)

// Get a product instance. I could pass in an ID here. 
// I'm leaving empty to get the current product. 
$product = wc_get_product(); 

// Output fabrics in a list separated by commas. 
echo $product->get_attribute('pa_fabrics'); 

// Now that I have $product, I could output other attributes as well. 
echo $product->get_attribute('pa_colors'); 
+0

あなたの説明と例がありがとうございました。カスタムフィールド、タイトル、日付、カテゴリなどを表示するなど、他のWordPressアイテムのような1行しか持てないのが大好きですが、あなたがリストしているこのオプションは、他の人が検討しているようにはるかに合理的です。本当にありがとう! – cchiera

+0

私はそれが役に立ちましたことを嬉しく思っています:)あなたは、コードがコンパクトではなくクリーンでなければならないと主張していますが、これを1行に集約するオプションがあります。 'echo wc_get_product() - > get_attribute( 'pa_fabrics');'。私の例は検証を含まないことに注意してください。 'wc_get_product()'から期待していた結果が得られたことを確認することは、常に良い考えです。検証プロセスをオフロードする別のユーザが提案したように、 'get_the_term_list()'を試すこともできます。 –

関連する問題