【问题标题】:How to display Woocommerce Category image?如何显示 Woocommerce 类别图像?
【发布时间】:2012-09-24 21:21:19
【问题描述】:

我在 PHP 中使用此代码:

$idcat = 147;
$thumbnail_id = get_woocommerce_term_meta( $idcat, 'thumbnail_id', true );
$image = wp_get_attachment_url( $thumbnail_id );
echo '<img src="'.$image.'" alt="" width="762" height="365" />';

其中147是手动设置的当前ID,但我需要其他类别的当前ID

有什么建议吗?

【问题讨论】:

  • 问题到底是什么?您需要在不明确设置的情况下检索当前类别 id 的类别图像吗?
  • 对不起,我需要显示当前 woocommerce 产品类别中的图像。

标签: php wordpress woocommerce thumbnails


【解决方案1】:

若要在archive-product.php 中显示当前显示的类别的类别图像,请在is_product_category() 为真时使用当前类别term_id

// verify that this is a product category page
if ( is_product_category() ){
    global $wp_query;

    // get the query object
    $cat = $wp_query->get_queried_object();

    // get the thumbnail id using the queried category term_id
    $thumbnail_id = get_term_meta( $cat->term_id, 'thumbnail_id', true ); 

    // get the image URL
    $image = wp_get_attachment_url( $thumbnail_id ); 

    // print the IMG HTML
    echo "<img src='{$image}' alt='' width='762' height='365' />";
}

【讨论】:

  • 感谢您的回答,但不能正常工作,因为 woocommerce 模板中的“is_category”是“is_product_category”和“get_query_var('cat')”->“cat”?有什么建议吗?我使用 woocommerce 模板来覆盖默认的 woocommerce。我正在编辑 product-archive.php 模板。
  • 你的意思是archive-product.php吗?这是用于商店主页和标签档案的模板,例如/product-tag/TAG-NAME。如果是这种情况,我假设您正在尝试获取循环中每个产品的类别图像?或者您正在查看单个产品类别并需要显示该类别的图像,例如/product-category/CATEGORY
  • 是的 /product-category/CATEGORY,当我创建一个新类别时,我可以从 woocommerce 管理员上传一张图片。 P.D.:西班牙语(我的母语:))是/categoria-producto/categoria
  • 我现在在智利,但我的西班牙语很糟糕。即使您的语言设置为es_ES,该文件也应该相同,因此您希望将is_product_category() 用于if 语句和term_id 中的类别,因为它是分类法的一部分 - 请参阅我的答案的编辑.
【解决方案2】:

get_woocommerce_term_meta 自 Woo 3.6.0 起已弃用。

所以改变

$thumbnail_id = get_woocommerce_term_meta($value->term_id, 'thumbnail_id', true );

into: ($value->term_id 应该是woo category id)

get_term_meta($value->term_id, 'thumbnail_id', true)

查看文档了解详情: https://docs.woocommerce.com/wc-apidocs/function-get_woocommerce_term_meta.html

【讨论】:

  • 7 年并没有那么糟糕 :)
【解决方案3】:

来自WooCommerce page

// WooCommerce – display category image on category archive

add_action( 'woocommerce_archive_description', 'woocommerce_category_image', 2 );
function woocommerce_category_image() {
    if ( is_product_category() ){
      global $wp_query;
      $cat = $wp_query->get_queried_object();
      $thumbnail_id = get_woocommerce_term_meta( $cat->term_id, 'thumbnail_id', true );
      $image = wp_get_attachment_url( $thumbnail_id );
      if ( $image ) {
          echo '<img src="' . $image . '" alt="" />';
      }
  }
}

【讨论】:

  • 整洁。 get_woocommerce_term_meta 已弃用,请改用 get_term_meta。
【解决方案4】:

您还可以使用 foreach 循环来显示由父 ID 给出的父类别中的类别图像等。

例如,我给父类别的 74 个 id,然后我将显示来自子类别的图像及其 slug。

**<?php
$catTerms = get_terms('product_cat', array('hide_empty' => 0, 'orderby' => 'ASC', 'child_of'=>'74'));
foreach($catTerms as $catTerm) : ?>
<?php $thumbnail_id = get_woocommerce_term_meta( $catTerm->term_id, 'thumbnail_id', true ); 

// get the image URL
$image = wp_get_attachment_url( $thumbnail_id );  ?>
<li><img src="<?php echo $image; ?>" width="152" height="245"/><span><?php echo $catTerm->name; ?></span></li>
<?php endforeach; ?>** 

【讨论】:

    【解决方案5】:

    为防止全尺寸类别图像减慢页面速度,您可以使用带有wp_get_attachment_image_src() 的较小图像:

    <?php 
    
    $thumbnail_id = get_woocommerce_term_meta( $term->term_id, 'thumbnail_id', true );
    
    // get the medium-sized image url
    $image = wp_get_attachment_image_src( $thumbnail_id, 'medium' );
    
    // Output in img tag
    echo '<img src="' . $image[0] . '" alt="" />'; 
    
    // Or as a background for a div
    echo '<div class="image" style="background-image: url("' . $image[0] .'")"></div>';
    
    ?>
    

    编辑:固定变量名和缺少引号

    【讨论】:

    • 此代码已被弃用,因为 Woocommerce 3.6 并且此示例中未定义 $term
    【解决方案6】:

    这个解决方案的代码很少。我觉得更好。

    <?php echo wp_get_attachment_image( get_term_meta( get_queried_object_id(), 'thumbnail_id', 1 ), 'thumbnail' ); ?>
    

    【讨论】:

      【解决方案7】:

      /wp-content/plugins/woocommerce/templates/循环路径中添加代码

          <?php
              if ( is_product_category() ){
      
                  global $wp_query;
                  $cat = $wp_query->get_queried_object();    
                  $thumbnail_id = get_woocommerce_term_meta( $cat->term_id, 'thumbnail_id', true ); 
                  $image = wp_get_attachment_url( $thumbnail_id ); 
                  echo "<img src='{$image}' alt='' />";
              }
          ?>
      

      【讨论】:

        【解决方案8】:

        <?php 
        
        	$terms = get_terms( array(
        	'taxonomy' => 'product_cat',
        	'hide_empty' => false,
        	) ); // Get Terms
        
        foreach ($terms as $key => $value) 
        {
        	$metaterms = get_term_meta($value->term_id);
        	$thumbnail_id = get_woocommerce_term_meta($value->term_id, 'thumbnail_id', true );
        	$image = wp_get_attachment_url( $thumbnail_id );
        	echo '<img src="'.$image.'" alt="" />';
        } // Get Images from woocommerce term meta
        
        ?>

        【讨论】:

        • 虽然此代码可以回答问题,但提供有关其解决问题的方式和原因的信息可提高其长期价值。
        【解决方案9】:

        原始答案有所帮助,但已过时。

        来自https://docs.woocommerce.com/document/woocommerce-display-category-image-on-category-archive/

         /**
         * Display category image on category archive
         */
        add_action( 'woocommerce_archive_description', 'woocommerce_category_image', 2 );
        function woocommerce_category_image() {
            if ( is_product_category() ){
                global $wp_query;
                $cat = $wp_query->get_queried_object();
                $thumbnail_id = get_term_meta( $cat->term_id, 'thumbnail_id', true );
                $image = wp_get_attachment_url( $thumbnail_id );
                if ( $image ) {
                    echo '<img src="' . $image . '" alt="' . $cat->name . '" />';
                }
            }
        }
        

        我添加了一个类echo '&lt;img src="' . $image . '" alt="' . $cat-&gt;name . '" class="catImage" /&gt;';,然后用它设置样式

        .catImage{
          float: left;
          max-height: 100px;
          padding-right: 10px;
        }
        

        【讨论】:

          【解决方案10】:

          我是这样做的:

          function loop_product_category_image(){
              global $wp_query;
              $terms = get_the_terms( $wp_query->ID, 'product_cat' );
              $thumbnail_id = get_term_meta( $terms[0]->term_id, 'thumbnail_id', true );
              $image = wp_get_attachment_url( $thumbnail_id );
              echo "<img src='{$image}' alt='category image' width='162' height='165' />";
          }
          

          你可以钩比例如: 在产品循环中:

          add_action('woocommerce_before_shop_loop_item', 'loop_product_category_image', 7);
          

          或在产品中:

          add_action('woocommerce_before_main_content', 'cylkow_loop_product_category_image', 7);
          

          或任何你想要的地方。

          你也可以使用条件标签 https://woocommerce.com/document/conditional-tags/

          【讨论】:

            【解决方案11】:

            使用此代码可能会对您有所帮助。我已经通过了 cat id 17.pass woocommerce cat id 就是这样

               <?php
                  global $woocommerce;
                  global $wp_query;
                  $cat_id=17;
                  $table_name = $wpdb->prefix . "woocommerce_termmeta";
                  $query="SELECT meta_value FROM {$table_name} WHERE `meta_key`='thumbnail_id' and woocommerce_term_id ={$cat_id} LIMIT 0 , 30";
                  $result =  $wpdb->get_results($query);
            
                  foreach($result as $result1){
                      $img_id= $result1->meta_value;
                  }     
            
                  echo '<img src="'.wp_get_attachment_url( $img_id ).'" alt="category image">';
               ?>
            

            【讨论】:

              猜你喜欢
              • 2015-05-07
              • 2014-04-27
              • 1970-01-01
              • 1970-01-01
              • 2021-10-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-09-21
              相关资源
              最近更新 更多