解決済functions.phpにてカスタムフィールドの判定ができない
-
投稿者投稿
-
2020年10月9日 6:06 PM #91092mai参加者
宜しくお願いいたします。
現在の環境は下記の通りです。
WordPress のバージョン:5.5.1
Welcart のバージョン: 1.9.33
Welcart専用の拡張プラグイン:
ご利用のテーマ:voll(子テーマ)
症状を確認したブラウザ:chrome デベロッパーツール
サーバー:(会社名、サービス名)xserver
SSLの利用:(独自 常時SSL)関連商品表示フォーマットを変更するために
下記のコードを書いていますが
カスタムフィールドの判定が効きません。
post_custom( ‘test_text’ )が空の状態です。
そこで、カスタムフィールドが登録できているか
確認するために
functions.php内の別の場所で
if(post_custom( ‘test_text’ )):
echo post_custom( ‘test_text’ );
endif;
とすれば登録した文字が表示されます。
使用しているプラグインは、smart custom fieldsです。
登録しているカスタムフィールドは現在3コです。add_filter('usces_filter_assistance_item_list', 'my_format_assistance_item_list',10,2); function my_format_assistance_item_list($list, $post) { $width= 150; $height=150; 中略 $str = '<li>'; if(post_custom( 'test_text' )): // ここの判定ができません。 test_textに文字があれば処理をする endif; 中略 $str = '</li>'; 中略 }
何か基本的な間違いがあるのだと思いますが
色々原因を探していますが解らず困っています。ご教示お願い致します。
2020年10月12日 11:02 AM #91105yasumaxキーマスターこんにちは。
post_custom
のかわりにget_post_meta
を使うのはいかがでしょうか?2020年10月12日 1:21 PM #91112mai参加者yasumax 様
早速のご返信有り難うございます。
初めの中略部分において
$item_name = get_post_meta($post->ID, ‘_itemName’, true);//$item_nameは取得できています。
この様にして商品の名前は取得しています。
if(post_custom( ‘test_text’ )):の代わりに
if(get_post_meta($post->ID, ‘test_text’, true)):echo’test’;endif;//testは表示しない。
この様にも書き換えてみましたがダメでした。
原因がわからず困っています。2020年10月13日 7:59 AM #91129Konoha参加者横から失礼します。
ちょっと思ったのですが…
usces_filter_assistance_item_listのフックは、
echo apply_filters('usces_filter_assistance_item_list', $list, $post);
htmlのデータを変数(デフォルトでは$list)で返して、そのまま$listをechoしてますよね。
$strで新しくhtmlを作り直しているのでしたら、
一般的には$str = '<li>'; if(get_post_meta($post->ID, 'test_text', true)): $str .= 'test'; endif; $str .= '</li>'; //~省略 return $str; //最後にデータを戻す
というように、カスタムフィールドのデータを変数に入れる記述になるのではないでしょうか?
htmlを変数に格納して返しているので、その場でechoは…と思ったのですが…検討違いでしたらすみません。
- この返信は4年、 1ヶ月前にKonohaが編集しました。
2020年10月13日 4:00 PM #91135mai参加者Konoha 様
アドバイス有り難うございます。
echo’test’;とした訳はvar_dump()でも良かったのですが
if(get_post_meta($post->ID, ‘test_text’, true))の条件に該当していない
ことを表現したつもりです。
目的はカスタマーフィールドのtest_textに文字があれば
その文字に基づいて商品データーを加工をしたものを表示させたくて
上記の条件文を入れています。if(post_custom( ‘test_text’ )):
if(get_post_meta($post->ID, ‘test_text’, true)):
両方とも空と判断されています。
if(post_custom( ‘test_text’ )):については
functions.php内の別の場所では有効です。お気づきの点がございましたら宜しくお願い致します。
2020年10月13日 5:06 PM #91137Konoha参加者maiさま
たとえば
$item_name = get_post_meta($post->ID, '_itemName', true); //商品名
は取得できて
$test_text = get_post_meta($post->ID, 'test_text', true); //独自
は取得できないのですよね?
もしかしたら
そのカスタムフィールドのキー名が違っているのではないかしら?Smart Custom Fieldsを使用とのことですが、
フィールド設定でのキー名(名前)にスペースが入ってしまっているとか…
「繰り返し」の設定をしているとか…私も同様にSCFを使用しているので、
add_filter('usces_filter_assistance_item_list', 'my_format_assistance_item_list',10,2); function my_format_assistance_item_list($list, $post) { if(get_post_meta($post->ID,'test_text',true)): echo 'test'; endif; return $list; }
で確認しましたが、特に問題なく表示されました。
2020年10月13日 7:45 PM #91138mai参加者yasumax 様
Konoha 様アドバイス有り難うございました。
私の説明不足で申し訳ありません。関連商品表示フォーマットを変更するためにと書きましたが
投稿記事とか固定ページにてダクに投稿した商品コードを入力したリストを
関連商品としてコンテンツの下部に表示させています。
その為if(get_post_meta($post->ID,’test_text’,true)):
この$post->IDにおいてtest_textの有無を判断していました。
投稿記事とか固定ページのtest_textではなく
各商品マスターのtest_textの有無を判断していました。
素人の素人たる・・・。投稿記事とか固定ページのtest_textを何らかの変数にいれて
条件判断をさせて最後に変数を消す必要がある様に思います。
何か良いアイディアがございましたらアドバイスお願い致します。2020年10月14日 9:13 AM #91139Konoha参加者maiさま
なるほど…商品データのカスタムフィールドではなく、
投稿・固定ページのカスタムフィールドを取得したい、
ということですか。usces_assistance_item()の中で、$postを商品データに書き換えてしまっているので、
$post->IDは当然ながら商品ですものね。ぱっと思いつくのは、
usces_filter_assistance_item_listフック内で、$queried_object= get_queried_object(); if(get_post_meta($queried_object->ID,'test_text',true)): echo 'test'; endif;
とかかしら?
また意図が違っていたらすみません。
2020年10月14日 10:22 AM #91140mai参加者Konoha 様
この度は、ご回答を頂きまして有り難うございます。
下記コードを利用させて頂きます。
$queried_object= get_queried_object();
if(get_post_meta($queried_object->ID,’test_text’,true)):
echo ‘test’;
endif;有り難うございました。
-
投稿者投稿
- このトピックに返信するにはログインが必要です。