2014-01-15 94 views
2

我在编辑带有钩子的Woocommerce模板时遇到了一些麻烦。本质上,我只想更改product-image模板,而不是链接到上传的产品图像,而是链接到产品帖子。覆盖钩子模板

目前product-image.php woocommerce模板有

global $post, $woocommerce, $product; 

?> 
<div class="images"> 

<?php 
    if (has_post_thumbnail()) { 

     $image_title  = esc_attr(get_the_title(get_post_thumbnail_id())); 
     $image_link   = wp_get_attachment_url(get_post_thumbnail_id()); 
     $image    = get_the_post_thumbnail($post->ID, apply_filters('single_product_large_thumbnail_size', 'shop_single'), array(
      'title' => $image_title 
      )); 
     $attachment_count = count($product->get_gallery_attachment_ids()); 

     if ($attachment_count > 0) { 
      $gallery = '[product-gallery]'; 
     } else { 
      $gallery = ''; 
     } 

     echo apply_filters('woocommerce_single_product_image_html', sprintf('<a href="%s" itemprop="image" class="woocommerce-main-image zoom" title="%s" rel="prettyPhoto' . $gallery . '">%s</a>', $image_link, $image_title, $image), $post->ID); 

    } else { 

     echo apply_filters('woocommerce_single_product_image_html', sprintf('<img src="%s" alt="Placeholder" />', woocommerce_placeholder_img_src()), $post->ID); 

    } 
?> 

<?php do_action('woocommerce_product_thumbnails'); ?> 

</div> 

我不确定如何适应echo apply_filters('woocommerce_single_product_image_html', sprintf('<a href="%s" itemprop="image" class="woocommerce-main-image zoom" title="%s" rel="prettyPhoto' . $gallery . '">%s</a>', $image_link, $image_title, $image), $post->ID);%s更改为链接的帖子。

我使用的钩:

add_action('woocommerce_product_thumbnails', 'custom_links'); 

function custom_links() { 
//code 
} 

有人能帮助我获得这个有些方向是什么?

回答

1

您正在调用操作而不是过滤器。你也打电话错了。

更改此:

add_action('woocommerce_product_thumbnails', 'custom_links'); 

这样:

add_filter('woocommerce_single_product_image_html', 'custom_links', 10, 2); 

2代表参数计数的功能,你custom_links()应该是这样的:

function custom_links($link, $post_id) { 
    $pattern = '/(?<=href=")([^"]*)/'; 
    $replacement = get_permalink($post->ID); 
    return preg_replace($pattern, $replacement, $link); 
} 

进程$link根据需要变量和th回报它。

+0

感谢您的回应!该函数似乎正在工作,但是当我更改'$ link'的值时,它将删除图片,我知道如何更改href并使src保持不变? – Chris

+0

@Chris这是因为$ link变量包含html,如“”。使用preg_replace()(或任何其他字符串函数)只修改url或仅重新生成整个字符串。你有产品ID。只需获取图像和网址并重做字符串。 – ViszinisA

+0

当我尝试替换$ link字符串时,出现致命错误。 I.E.让它只显示图像,甚至没有尝试将它链接到post'function custom_links($ link,$ post_id){ $ link =“”; return $ link; }'我想我在这里错过了一条规则。 – Chris