functions.phpにてカスタムフィールドの判定ができない

ホーム フォーラム その他 functions.phpにてカスタムフィールドの判定ができない

このトピックには8件の返信が含まれ、3人の参加者がいます。1 ヶ月、 2 週間前 mai さんが最後の更新を行いました。

9件の投稿を表示中 - 1 - 9件目 (全9件中)
  • 投稿者
    投稿
  • #91092

    mai
    参加者

    宜しくお願いいたします。

    現在の環境は下記の通りです。
    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>';
      中略
        }

    何か基本的な間違いがあるのだと思いますが
    色々原因を探していますが解らず困っています。

    ご教示お願い致します。

    #91105

    yasumax
    キーマスター

    こんにちは。

    post_customのかわりにget_post_metaを使うのはいかがでしょうか?

    【参考URL】
    WordPress Codex 日本語 関数リファレンス/get post meta

    #91112

    mai
    参加者

    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は表示しない。
    この様にも書き換えてみましたがダメでした。
    原因がわからず困っています。

    #91129

    Konoha
    参加者

    横から失礼します。

    ちょっと思ったのですが…

    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は…と思ったのですが…

    検討違いでしたらすみません。

    • この返信は1 ヶ月、 2 週間前に   さんが編集しました。
    #91135

    mai
    参加者

    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内の別の場所では有効です。

    お気づきの点がございましたら宜しくお願い致します。

    #91137

    Konoha
    参加者

    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;
    }
    

    で確認しましたが、特に問題なく表示されました。

    #91138

    mai
    参加者

    yasumax 様
    Konoha 様

    アドバイス有り難うございました。
    私の説明不足で申し訳ありません。

    関連商品表示フォーマットを変更するためにと書きましたが
    投稿記事とか固定ページにてダクに投稿した商品コードを入力したリストを
    関連商品としてコンテンツの下部に表示させています。
    その為if(get_post_meta($post->ID,’test_text’,true)):
    この$post->IDにおいてtest_textの有無を判断していました。
    投稿記事とか固定ページのtest_textではなく
    各商品マスターのtest_textの有無を判断していました。
    素人の素人たる・・・。

    投稿記事とか固定ページのtest_textを何らかの変数にいれて
    条件判断をさせて最後に変数を消す必要がある様に思います。
    何か良いアイディアがございましたらアドバイスお願い致します。

    #91139

    Konoha
    参加者

    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;
    

    とかかしら?

    また意図が違っていたらすみません。

    #91140

    mai
    参加者

    Konoha 様

    この度は、ご回答を頂きまして有り難うございます。
    下記コードを利用させて頂きます。
    $queried_object= get_queried_object();
    if(get_post_meta($queried_object->ID,’test_text’,true)):
    echo ‘test’;
    endif;

    有り難うございました。

9件の投稿を表示中 - 1 - 9件目 (全9件中)

このトピックに返信するにはログインが必要です。