【问题标题】:Get woocommerce categories thumbnails for each category on category pages获取类别页面上每个类别的 woocommerce 类别缩略图
【发布时间】:2021-09-20 00:12:49
【问题描述】:

我有问题。我使用带有缩略图的过滤器。至少此过滤器不包括获取类别缩略图,您必须手动将所有缩略图上传到过滤器中,这不是一个好的解决方案。

我尝试做的是从类别缩略图中自动获取缩略图。到目前为止,我有一个从当前查询中添加缩略图的代码,这也不是一个好的解决方案。我需要分别获取每个类别的缩略图。

此代码适用于当前查询,并为当前打开的类别中的所有类别显示相同的图像。您知道如何分别获取每个类别的缩略图吗?

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 ); 


                        return '<span class="prdctfltr_customize_block prdctfltr_customize"><span class="prdctfltr_customize_image"><img src="' . $image . '" alt="' . $cat->name . '"/></span>' . ( $cnt !== false ? ' <span class="prdctfltr_customize_count">' . absint( $cnt ) . '</span>' : '' ) . ( $tip !== false ? '<span class="prdctfltr_tooltip"><span>' . wp_kses_post( $tip ) . '</span></span>' : '' ) . ( $checked !== '' ? '<input type="checkbox" value="' . esc_attr( $term_slug ) . '"' . esc_html( $checked ) . '/>' : '' ) . '<span class="prdctfltr_customization_search">' . esc_html( $term_name ) . '</span>' . wp_kses_post( $sublevel ) . '</span>';
                    }

提前谢谢你。

更新 PHP CODE

【问题讨论】:

  • 澄清一下,您需要所有产品类别的缩略图吗?
  • 是的,我正在使用仅支持类别名称的 ajax 过滤器。我想将类别缩略图添加到这些过滤器中。正如我上面提到的,到目前为止,我的当前查询运行良好,但这不是正确的解决方案。我需要从每个类别的 wp 管理类别中获取缩略图。

标签: php wordpress woocommerce


【解决方案1】:

注意:以下 sn-p 已在 wordpress 5.8 和 woocommerce 5.2 上经过全面测试,适用于默认的 woocommerce 产品类别。如果您尝试在第三方插件中使用它,您可能会遇到一些差异。因此,您可以随意自定义它!

如果我理解正确,您需要所有产品类别的缩略图。

您可以使用get_terms 获取所有产品类别。然后使用foreach 循环输出您的缩略图。像这样:

$args = array(
  'taxonomy' => 'product_cat',
  'hide_empty' => false,
);

$terms = get_terms($args);

foreach ($terms as $product_cat) {
  $thumbnail_id = get_woocommerce_term_meta($product_cat->term_id, 'thumbnail_id', true);
  $image = wp_get_attachment_url($thumbnail_id);
  echo "<img src='" . $image . "'>";
}

此部分与问题中使用的插件有关!

更新

就像我在 cmets 中所说,您提供的 php 文件是一个巨大的文件,其中包含“4634”行“意大利面条”代码,并多次引用其他外部文件。然而,在1957 线上,有一个似乎是我们感兴趣的函数,名为“get_customized_term_700”,包含$term_id$term_slug$term_name$cnt$checked 和@ 987654334@.

在同一个函数中,还有一个switchcase语句。 case 条件之一检查image。如果有过滤器,它将输出类别。所以我们将使用它来输出图像。

所以继续REPLACE使用以下函数在1957 行上调用“get_customized_term_700”的整个函数。

注意:
这还没有经过测试,因为我无法访问插件,这纯粹是根据php 文件中的逻辑编写的。希望对你有帮助!

public static function get_customized_term_700($term_id, $term_slug, $term_name, $cnt, $checked = '', $sublevel = '')
  {
    if (!empty($term_id)) {

      $data = array(
        'tooltip' => '',
        'data' => '',
      );

      if (!empty(self::$filter['style']['terms'])) {

        $key = self::__find_customized_term($term_id, self::$filter['style']['terms']);

        if ($key !== false) {
          $data = array_merge(array(
            'tooltip' => '',
            'data' => '',
          ), self::$filter['style']['terms'][$key]);
        }
      }
    } else {
      $data = array(
        'value' => '',
        'title' => self::__get_none_string(),
        'tooltip' => self::__get_none_tooltip_string(),
        'data' => self::__get_customized_term_none(self::$filter['style']['style']['type']),
      );
    }

    if (!empty($data['title'])) {
      $term_name = $data['title'];
    }

    $tip = empty($data['tooltip']) ? false : $data['tooltip'];

    switch (self::$filter['style']['style']['type']) {

      case 'text':
        return '<span class="prdctfltr_customize_' . esc_attr(self::$filter['style']['style']['css']) . ' prdctfltr_customize"><span class="prdctfltr_customize_name">' . esc_html($term_name) . '</span>' . ($cnt !== false ? ' <span class="prdctfltr_customize_count">' . absint($cnt) . '</span>' : '') . ($tip !== false ? '<span class="prdctfltr_tooltip"><span>' . wp_kses_post($tip) . '</span></span>' : '') . ($checked !== '' ? '<input type="checkbox" value="' . esc_attr($term_slug) . '"' . esc_html($checked) . '/>' : '') . wp_kses_post($sublevel) . '</span>';
        break;

      case 'color':
        if (!empty(self::$filter['style']['label']) && self::$filter['style']['label'] == 'side') {
          return '<span class="prdctfltr_customize_block prdctfltr_customize"' . (!empty(self::$filter['style']['size']) ? sprintf(' style="line-height:%1$spx;', absint(self::$filter['style']['size'])) : '') . '><span class="prdctfltr_customize_color_text"><span style="background-color:' . Prdctfltr()->esc_color($data['data']) . ';' . (!empty(self::$filter['style']['size']) ? sprintf('width:%1$spx;height:%1$spx;', absint(self::$filter['style']['size'])) : '') . '"></span></span>' . ($tip !== false ? '<span class="prdctfltr_tooltip"><span>' . wp_kses_post($tip) . '</span></span>' : '') . ($checked !== '' ? '<input type="checkbox" value="' . esc_attr($term_slug) . '"' . esc_html($checked) . '/>' : '') . '<span class="prdctfltr_customization_search">' . esc_html($term_name) . '</span><span class="prdctfltr_customize_color_text_tip">' . esc_html($term_name) . '</span>' . ($cnt !== false ? ' <span class="prdctfltr_count">' . absint($cnt) . '</span>' : '') . wp_kses_post($sublevel) . '</span>';
        } else {
          return '<span class="prdctfltr_customize_block prdctfltr_customize"><span class="prdctfltr_customize_color" style="background-color:' . Prdctfltr()->esc_color($data['data']) . ';' . (!empty(self::$filter['style']['size']) ? sprintf('width:%1$spx;height:%1$spx;', absint(self::$filter['style']['size'])) : '') . '"></span>' . ($cnt !== false ? ' <span class="prdctfltr_customize_count">' . absint($cnt) . '</span>' : '') . ($tip !== false ? '<span class="prdctfltr_tooltip"><span>' . wp_kses_post($tip) . '</span></span>' : '') . ($checked !== '' ? '<input type="checkbox" value="' . esc_attr($term_slug) . '"' . esc_html($checked) . '/>' : '') . '<span class="prdctfltr_customization_search">' . esc_html($term_name) . '</span>' . wp_kses_post($sublevel) . '</span>';
        }
        break;

      case 'image':
        if (!empty(self::$filter['style']['label']) && self::$filter['style']['label'] == 'side') {
          $args = array(
            'taxonomy' => 'product_cat',
            'hide_empty' => false,
          );
          $output = '';
          $terms = get_terms($args);
          foreach ($terms as $product_cat) {
            $thumbnail_id = get_woocommerce_term_meta($product_cat->term_id, 'thumbnail_id', true);
            $image = wp_get_attachment_url($thumbnail_id);
            $output .= '<span class="prdctfltr_customize_block prdctfltr_customize"' . (!empty(self::$filter['style']['size']) ? sprintf(' style="line-height:%1$spx;"', absint(self::$filter['style']['size'])) : '') . '><span class="prdctfltr_customize_image_text"><img src="' . $image . '"/></span>' . ($tip !== false ? '<span class="prdctfltr_tooltip"><span>' . wp_kses_post($tip) . '</span></span>' : '') . ($checked !== '' ? '<input type="checkbox" value="' . esc_attr($product_cat->slug) . '"' . esc_html($checked) . '/>' : '') . '<span class="prdctfltr_customization_search">' . esc_html($product_cat->name) . '</span><span class="prdctfltr_customize_image_text_tip">' . esc_html($product_cat->name) . '</span>' . ($cnt !== false ? ' <span class="prdctfltr_count">' . absint($cnt) . '</span>' : '') . wp_kses_post($sublevel) . '</span>';
          }
          return $output;
        }
        break;

      case 'select':
        return '<span class="prdctfltr_customize_select prdctfltr_customize">' . ($checked !== '' ? '<input type="checkbox" value="' . esc_attr($term_slug) . '"' . esc_html($checked) . '/>' : '') . '<span class="prdctfltr_customize_name">' . esc_html($term_name) . '</span>' . ($cnt !== false ? ' <span class="prdctfltr_customize_count">' . absint($cnt) . '</span>' : '') . wp_kses_post($sublevel) . '</span>' . ($tip !== false ? '<span class="prdctfltr_tooltip"><span>' . wp_kses_post($tip) . '</span></span>' : '');
        break;

      case 'html':
        if (!empty($data['data'])) {
          return wp_kses_post(stripslashes($data['data'])) . '<span class="prdctfltr_customization_search">' . esc_html($term_name) . '</span>' . ($tip !== false ? '<span class="prdctfltr_tooltip"><span>' . wp_kses_post($tip) . '</span>' . wp_kses_post($sublevel) . '</span>' : '');
        } else {
          return esc_html($term_name);
        }
        break;

      default:
        return '';
        break;
    }
  }

【讨论】:

  • 您好,谢谢您的回答 Ruvee。我试图实现你的代码,但它没有帮助我仍然看不到缩略图。它让我。我已经更新了我的问题,您可以在底部看到 php 代码。检查函数所在的第 2105 行。也许我在那里做错了什么。谢谢您的帮助!非常感谢。
  • 这是因为$terms 是一个对象数组,我们需要一个foreach 循环来获取数据from each object。你试图从$terms 获取数据,这就是你得到 的原因。我假设您使用的是默认的 woocommerce 类别 product_cat 对吗?或者您正在使用自定义分类法?另外,如果您能告诉我您的过滤器的逻辑,以及您尝试过滤这些类别的方式,那就太好了。
  • potapanie.artbuild.sk/kategoria-produktu/test-kat 这是过滤的 URL。我使用正常的 woocommerce 类别是的。您可以在打开 URL 时检查它。它仅适用于我从 woocommerce 中的 wp admin 添加的 woocommerce 类别。它不支持的是缩略图,您可以手动将它们上传到过滤器中,这是一个非常糟糕的解决方案。过滤器中可能没有自定义分类法,它从 woo 类别中获取除缩略图之外的所有内容。如果你愿意,我可以与你分享插件文件。
  • 在我与您分享的 php 文件中,有很多 product_cart 调用,所以他们也使用它。奇怪的是它不适用于条款。
  • 现在它只加载一个类别,您可以在我之前发送给您的测试 URL 上看到它并获得其缩略图。在网址上查看。我们很接近,但我们错过了一些东西。
猜你喜欢
  • 1970-01-01
  • 2012-11-16
  • 2021-10-14
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
  • 2020-10-07
  • 2021-06-24
  • 2013-02-24
相关资源
最近更新 更多