使用get_post_meta()在WooCommerce中输出WooCommerce产品自定义域

时间:2019-08-20 作者:PCNCTH

我正在创建一个插件来显示我的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 所以我创建了如下函数:

去检查是否有gtin编号

  • 如果不回显“identifier\\u exit:false”
  • 如果找到gtin编号,则回显“gtin13:gtin编号”
    1.      <?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 个回复
    SO网友:LoicTheAztec

    以下是一些错误get_post_meta() 第一个参数需要是此处(以及代码中)定义的产品IDpost_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>
    
    它应该更好地工作…

    SO网友:Howdy_McGee

    一个问题是,您需要将$post\\u id传递给函数,以便它可以使用。

    global $post;
    
    check_gtin( $post->ID );
    
    function check_gtin( $post_id ) { /* ... */ }
    
    另一个问题是,在PHP中,单引号意味着literal strings 不会打印其中的变量。有几种方法可以将其转换为工作代码:

    Double Quotes

    echo "gtin13:{$gtin}";
    

    String Concatenation

    echo \'gtin13:\' . $gtin;
    

    Formatted Printing

    printf( \'gtin13:%s\', $gtin );
    
    此外,根据您设置post meta的方式,它可以返回“空”的内容,但不必返回空字符串\'\'. 就我个人而言,我更喜欢使用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\';
        }
    
    }