web-dev-qa-db-ja.com

get_post_meta()を使用してWooCommerceのWooCommerce製品カスタムフィールドを出力します

WooCommerce製品のスキーマスクリプトを表示するプラグインを作成しています。カスタムフィールドを使用して、WooCommerceにgtin番号を追加します。

これは私がやったことです:

<?php
    $gtin = get_post_meta(post_ID,'gtin',true);
?>
<script type="application/ld+json">{
    "gtin13:"<?php echo $gtin;?>"</script>}

結果:

"gtin13:"1112223334"

どれがうまくいくか…

しかし、一部の製品にはgtin番号がないため、次のような関数を作成しました。

  1. gtin番号があるかどうか確認してください。
  2. 「identifier_exit:false」をエコーし​​ない場合
  3. Gtin番号が見つかった場合は、「gtin13:gtin番号」をエコーし​​ます。
     <?php
         function check_gtin() {
             $gtin=get_post_meta(post_ID,'gtin',true);
             if ($gtin!='') {
                 echo '$gtin13:$gtin';
             } else {
                 echo 'identifier_exits:false';
             }
         }
     ?>
    <script type="application/json+ld">{
        "<?php check_gtin();?>"</script>}

結果:

"gtin13:$gtin"

私が期待していること:

"gtin13:1112223334"

だから誰かが私が間違ったことを私に指摘できますか?

2
PCNCTH

get_post_meta()の最初の引数はここで(およびコードでpost_IDも動的変数ではなく、何も与えません)…

以下を試してください:

<?php
     function check_gtin(){
         if ( $gtin = get_post_meta(get_the_id(), 'gtin', true) ){
             echo "gtin13:". $gtin;
         } else {
             echo 'identifier_exits:false';
         }
     }
 ?>

次に:

<script type="application/json+ld">{"<?php check_gtin(); ?>"</script>

うまくいくはずです…

1
LoicTheAztec

1つの問題は、関数に$ post_idを渡す必要があることです。これにより、関数が機能します。

_global $post;

check_gtin( $post->ID );

function check_gtin( $post_id ) { /* ... */ }
_

もう1つの問題は、PHP単一引用符が リテラル文字列 であることを意味し、変数を出力しないことです。これを作業コードに変換する方法がいくつかあります:

二重引用符

_echo "gtin13:{$gtin}";
_

文字列連結

_echo 'gtin13:' . $gtin;
_

フォーマットされた印刷

_printf( 'gtin13:%s', $gtin );
_

さらに、投稿メタの設定方法によっては、「空」の値が返されることがありますが、空の文字列_''_は必要ありません。個人的に、私は empty() を使用して、何かが存在するかどうかを確認することを好みます。これは、空の配列、空の文字列、0、falseをチェックします。


まとめると、次のようになります。

_/**
 * Display GTIN
 *
 * @param Integer $post_id
 *
 * @return void
 */
function check_gtin( $post_id ) {

    $gtin = get_post_meta( $post_id, 'gtin', true );

    if( ! empty( $gtin ) ) {
        echo "gtin13:{$gtin}";
    } else {
        echo 'identifier_exits:false';
    }

}
_
0
Howdy_McGee