【问题标题】:Display multiple product custom fields within a loop in WooCommerce在 WooCommerce 的循环中显示多个产品自定义字段
【发布时间】:2021-02-24 16:03:06
【问题描述】:

我在 WC 上为我的产品创建了 5 个自定义元值,但并非每个产品都有所有自定义字段。

目前,我正在像这样显示元数据:

<div class="meta">
  <?php if($product->get_meta('metabox_animal') != '') echo '<div class="type"><p>Row One</p></div>' . $product->get_meta('metabox_animal'); ?>
  <?php if($product->get_meta('metabox_medical') != '') echo '<div class="type"><p>Row Two</p></div>' . $product->get_meta('metabox_medical'); ?>
  <?php if($product->get_meta('metabox_general') != '') echo '<div class="type"><p>Row Three</p></div>' . $product->get_meta('metabox_general'); ?>
  <?php if($product->get_meta('metabox_capacity') != '') echo '<div class="type"><p>Row Four</p></div>' . $product->get_meta('metabox_capacity'); ?>
  <?php if($product->get_meta('metabox_pet') != '') echo '<div class="type"><p>Row Five</p></div>' . $product->get_meta('metabox_pet'); ?>
</div>

有没有一种方法可以创建一个循环,循环遍历所有元值,如果它们存在,则显示它们,但如果它们是空白/空/未使用,则显示容器“不适用”?

任何帮助将不胜感激!

【问题讨论】:

    标签: php wordpress woocommerce product custom-fields


    【解决方案1】:

    这未经测试,只有一种方法可以完成:

    <?php
      $html = '';
    
      // collection of meta keys and their display label
      $meta_keys_with_labels = [
        ['animal', 'Row One'],
        ['medical', 'Row Two'],
        ['general', 'Row Three'],
        ['capacity', 'Row Four'],
        ['pet', 'Row Five']
      ];
    
      $html .= '<div class="meta">';
      
      // loop to check if meta key/value exists and append to html string
      foreach ($meta_keys_with_labels as $meta) {
        // unpack the key and display label
        [$key, $label] = $meta;
        
        // grab meta value
        $meta_value = $product->get_meta("metabox_$key");
    
        // append meta value to html string
        if (!empty($meta_value)) {
          $html .= "<div class=\"type\"><p>$label</p></div>$meta_value";
        }
      }
    
      $html .= '</div>';
    
      echo $html;
    

    【讨论】:

      【解决方案2】:

      当然!

      您可以创建一个包含您需要检索的所有元术语的数组。

      按照您的代码,这是您需要的代码。当然,您可以根据需要添加/删除。

      <?php
      $meta_terms = [
          'metabox_animal',
          'metabox_medical',
          'metabox_general',
          'metabox_capacity',
          'metabox_pet'
      ];
      
      foreach ($meta_terms as $meta_term) {
          $meta = $product->get_meta($meta_term);
      
          if (!empty($meta)) {
              echo '<div class="type"><p>' . $meta . '</p></div>';
          }
      }
      

      那么……我们到底做了什么?

      首先,我们创建了一个包含我们需要检索的所有元数据的数组。

      创建该数组后,我们需要开始迭代以获取、检查和显示每个元数据。

      为此,我们使用 foreach (PHP foreach)。

      好的

      在 foreach 块中,使用包含我们需要检索的元字符串的变量 $meta_term,我们现在使用它来获取产品元数据。

      现在我们使用 !empty() 函数检查元数据是否不为空,如果它不为空,则我们知道可以输出值,因此使用 echo 我们现在可以构建正确的 html。

      希望这个帮助=D

      【讨论】:

        【解决方案3】:

        您可以在数组中设置相关数据,然后使用如下的 foreach 循环,如果自定义字段值为空或不存在,则会显示“NOT APPLICABLE”代替(代码已注释)

        <?php 
        // Data array with Meta key / Label pairs
        $data = array(
            'metabox_animal'   => __("Row One"),
            'metabox_medical'  => __("Row Two"),
            'metabox_general'  => __("Row Three"),
            'metabox_capacity' => __("Row Four"),
            'metabox_pet'      => __("Row Five"),
        ); 
        
        echo '<div class="meta">';
        
        // Loop through the data array of Meta key / Label pairs
        foreach ( $data as $meta_key => $label ) {
            $meta_value = $product->get_meta($meta_key); // Get the meta value
            $meta_value = empty($meta_value) ? __("NOT APPLICABLE") : $meta_value; // If empty show "NOT APPLICABLE"
            
            echo '<div class="type"><strong>' . $label . '</strong>: ' . $meta_value . '</div>';
        }
        echo '</div>';
        ?>
        

        我对你的 html 做了一点改动。如果不方便并且您想保留自己的,只需替换:

            echo '<div class="type"><strong>' . $label . '</strong>: ' . $meta_value . '</div>';
        

        通过这一行:

            echo '<div class="type"><p>' . $label . '</p></div>' . $meta_value;
        

        【讨论】:

          猜你喜欢
          • 2021-09-23
          • 1970-01-01
          • 2022-11-05
          • 2018-07-16
          • 2020-11-13
          • 2021-04-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多