【问题标题】:Custom Field URL Option for Woocommerce Product ThumbnailWoocommerce 产品缩略图的自定义字段 URL 选项
【发布时间】:2013-06-22 16:41:15
【问题描述】:

目前我正在为附属产品使用 Woocommerce 插件。例如,我希望能够单击主页上的缩略图并直接转到亚马逊。目前它已经设置好,一旦点击它就会转到我网站上的产品详细信息页面。从那里你可以进入亚马逊页面。但是,点击次数越少越好。

所以我在 content-product.php 页面中找到了钩子。我所做的是将整个内容包装在一个 URL 中,并使用一个自定义字段来添加 URL。没有按预期工作。发生的情况是,该 URL 仅在使用其中一种促销闪存选项时才会转到亚马逊。关闭后,该 URL 不会转到亚马逊,而是转到我网站上的产品页面。我不知道在哪里放置 URL 包装器。

所以我尝试寻找当前控制缩略图所在位置的<a href="<?php the_permalink(); ?>">。我将函数追溯到 woocommerce-template.php 文件。那是我遇到死胡同的地方。我不确定当前缩略图在哪里。

这是我修改后的代码,它在 content-product.php 页面中部分起作用:

<div class="thumbnail-wrapper">
        <a href="<?php echo get_post_meta( $post->ID, 'URLThumb', true ); ?>">
        <?php
            /**
             * woocommerce_before_shop_loop_item_title hook
             *
             * @hooked woocommerce_show_product_loop_sale_flash - 10
             * @hooked woocommerce_template_loop_product_thumbnail - 10
             */
            do_action( 'woocommerce_before_shop_loop_item_title' );
        ?>  
        </a>
</div>

这是缩略图功能,我似乎无法进一步深入查找现有的 &lt;a href="&lt;?php the_permalink(); ?&gt;"&gt; 以进行更改。这是在 woocommerce-template.php 页面上。

if ( ! function_exists( 'woocommerce_template_loop_product_thumbnail' ) ) {

/**
 * Get the product thumbnail for the loop.
 *
 * @access public
 * @subpackage  Loop
 * @return void
 */
function woocommerce_template_loop_product_thumbnail() {
    echo woocommerce_get_product_thumbnail();
}
}

【问题讨论】:

    标签: php wordpress hook woocommerce custom-fields


    【解决方案1】:

    文件名:woocommerce.php

    文件位置:wp-content/themes/'your-theme'/theme/woocommerce.php

    解决方案:通过查询产品类型来定位外部产品,外部时在 $product_url 中循环,在简单/变量时在 get_permalink() 中循环。此代码还用于在新标签中打开外部产品。

    我将发布之前代码的一个版本,然后再发布一个包含我的添加和修改的版本。在我的主题中,我粘贴的第一行代码位于 woocommerce.php 中的第 374 行(这会因您的主题而异,并且某些主题可能没有修改后的 woocommerce.php 文件。如果是这种情况,只需拖动 woocommerce .php 从插件进入你的主题目录。

    添加/修改前的代码:

    function woocommerce_template_loop_product_thumbnail() {
    
    global $product, $woocommerce_loop;
    
    
    $i = 0;
    $attachments = array();
    
    $attachments[] = get_post_thumbnail_id();
    $attachments = array_merge( $attachments, $product->get_gallery_attachment_ids() );
    
    $original_size = wc_get_image_size( 'shop_catalog' );
    
    
    if ( $woocommerce_loop['view'] == 'masonry_item' ) {
        $size = $original_size;
        $size['height'] = 0;
        YIT_Registry::get_instance()->image->set_size('shop_catalog', $size );
    }
    
    switch  ( $woocommerce_loop['products_layout'] ) {
    
        case 'zoom':
            if( isset( $attachments[1] ) ) {
    
                echo '<a href="' . get_permalink() . '" class="thumb">' . woocommerce_get_product_thumbnail() . '</a>';
                echo '<div class="attachments-thumbnail">';
                while( $i < 3 ){
                    if( ! isset( $attachments[ $i ] ) ) break;
                    $src = wp_get_attachment_image_src( $attachments[ $i ], 'shop_catalog' );
                    $active = ( $i == 0 ) ? 'active' : '';
                    echo '<div class="single-attachment-thumbnail ' . $active . '" data-img="' . $src[0] . '">';
                    yit_image( "id=$attachments[$i]&size=shop_thumbnail&class=image-hover" );
                    echo '</div>';
                    $i++;
                }
                echo '</div>';
            }
            else {
                echo '<a href="' . get_permalink() . '" class="thumb">' . woocommerce_get_product_thumbnail() . '</a>';
            }
            break;
    
        case 'flip':
            if( isset( $attachments[1] ) ) {
                echo '<a href="' . get_permalink() . '" class="thumb backface"><span class="face">' . woocommerce_get_product_thumbnail() . '</span></a>';
                echo '<span class="face back">';
                yit_image( "id=$attachments[1]&size=shop_catalog&class=image-hover" );
                echo '</span></a>';
            }
            else {
                echo '<a href="' . get_permalink() . '" class="thumb"><span class="face">' . woocommerce_get_product_thumbnail() . '</span></a>';
            }
            break;
    }
    

    添加/修改后的代码:

        function woocommerce_template_loop_product_thumbnail() {
    
    global $product, $woocommerce_loop;
    
    if(!is_single() ) {
        if( $product->is_type( 'external' ) ){
        $product_url = $product->get_product_url() . '"target="_blank""';
            } else( $producenter code heret_url = get_permalink());
    } else ($product_url = get_permalink());
    
    $i = 0;
    $attachments = array();
    
    $attachments[] = get_post_thumbnail_id();
    $attachments = array_merge( $attachments, $product->get_gallery_attachment_ids() );
    
    $original_size = wc_get_image_size( 'shop_catalog' );
    
    
    if ( $woocommerce_loop['view'] == 'masonry_item' ) {
        $size = $original_size;
        $size['height'] = 0;
        YIT_Registry::get_instance()->image->set_size('shop_catalog', $size );
    }
    
    switch  ( $woocommerce_loop['products_layout'] ) {
    
        case 'zoom':
            if( isset( $attachments[1] ) ) {
    
                echo '<a href="' . $product_url . '" class="thumb">' . woocommerce_get_product_thumbnail() . '</a>';
                echo '<div class="attachments-thumbnail">';
                while( $i < 3 ){
                    if( ! isset( $attachments[ $i ] ) ) break;
                    $src = wp_get_attachment_image_src( $attachments[ $i ], 'shop_catalog' );
                    $active = ( $i == 0 ) ? 'active' : '';
                    echo '<div class="single-attachment-thumbnail ' . $active . '" data-img="' . $src[0] . '">';
                    yit_image( "id=$attachments[$i]&size=shop_thumbnail&class=image-hover" );
                    echo '</div>';
                    $i++;
                }
                echo '</div>';
            }
            else {
                echo '<a href="' . $product_url . '" class="thumb">' . woocommerce_get_product_thumbnail() . '</a>';
            }
            break;
    
        case 'flip':
            if( isset( $attachments[1] ) ) {
                echo '<a href="' . $product_url . '" class="thumb backface"><span class="face">' . woocommerce_get_product_thumbnail() . '</span></a>';
                echo '<span class="face back">';
                yit_image( "id=$attachments[1]&size=shop_catalog&class=image-hover" );
                echo '</span></a>';
            }
            else {
                echo '<a href="' . $product_url . '" class="thumb"><span class="face">' . woocommerce_get_product_thumbnail() . '</span></a>';
            }
            break;
    }
    

    添加代码:

      if( $product->is_type( 'external' ) ){
        $product_url = $product->get_product_url() . '"target="_blank""';
            } else( $product_url = get_permalink());
    } else ($product_url = get_permalink());
    

    代码修改:

    除了上面添加的代码之外,将 get_permalink() 的所有实例替换为 $product_url。

    【讨论】:

    • 请不要将不相关的网址排除在可能被视为垃圾邮件的答案之外。谢谢。
    【解决方案2】:

    想出了一个变通办法。由于触发的是 SalesFlash 图像,因此我只是使用空白 PNG 图像覆盖在产品图像之上。把我所有的产品都变成了销售商品,而且效果很好。不完美,但无论如何我都不需要销售图标。

    但如果有人知道合适的编程解决方案,我会更改它。谢谢。

    【讨论】:

      【解决方案3】:

      这在 content-product.php 中为我工作,无需询问元数据

        <div class="thumbnail-wrapper"><a href="<?php echo $product->product_url; ?>">
          <?php
      
                  /**
                   * woocommerce_before_shop_loop_item_title hook
                   *
                   * @hooked woocommerce_show_product_loop_sale_flash - 10
                   * @hooked woocommerce_template_loop_product_thumbnail - 10
                   */
                  do_action( 'woocommerce_before_shop_loop_item_title' );
              ?>  </a>
          </div
      

      我在 loop/add-to-cart.php 中为“添加更多”做了同样的事情 和第 21 行 get_permalink() 和 57 $link 中的“详细信息”按钮,分别替换它们,如下所示: 第 27 行

      $details  = sprintf('<a href="%s" rel="nofollow" title="%s" class="details">%s</a>', get_permalink(), apply_filters('yit_details_button', __( 'Details', 'yit' )), apply_filters('yit_details_button', __( 'Details', 'yit' )) );
      

      用 $product->product_url 替换 get_permalink() 并在第 57 行

         $add_to_cart = sprintf('<a href="%s" rel="nofollow" class="view-options" title="%s">%s</a>', apply_filters( 'yit_external_add_to_cart_link_loop', $link, $product ), $label, $label);
      

      再次将 $link 替换为 $product->product_url 。 到目前为止,我没有任何问题。我想知道你是否终于找到了一个明确的解决方案,这样我们就可以对缩略图和产品图像做同样的事情,而不需要在它们上面添加一个空白图像。我的代码不多,所以如果有人知道如何放置外部图像,我将不胜感激首页产品图片上的链接。谢谢

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-24
        • 1970-01-01
        • 2018-01-10
        • 2015-07-04
        相关资源
        最近更新 更多