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
番号がないため、次のような関数を作成しました。
<?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"
だから誰かが私が間違ったことを私に指摘できますか?
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つの問題は、関数に$ 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';
}
}
_