2014-01-15 3 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 ru вернуть его.

+0

Благодарим за отзыв! Функция, похоже, работает, однако, когда я меняю значение «$ link», она удаляет изображение, любую идею, как я могу просто изменить href и оставить src таким же? – Chris

+0

@Chris Это потому, что переменная $ link содержит html как "". Либо используйте preg_replace() (или любые другие строковые функции), чтобы изменить только URL-адрес или просто восстановить целую строку. У вас есть идентификатор продукта. Просто получите изображение и url и переделайте строку. – ViszinisA

+0

Я получаю фатальные ошибки, когда пытаюсь заменить строку $ link. И.Е. чтобы он просто отображал изображение, даже не пытаясь связать его с функцией post_ функции custom_links ($ link, $ post_id) { $ link = ""; return $ link; } 'Я думаю, что здесь отсутствует правило. – Chris

Смежные вопросы