Comers
@Comers
Frontend Dev.

Woocommerce. Активная ссылка на товар в категории. КАК?

Друзья, подскажите как в woocommerce (в категориях) сделать название товара ссылкой. Сейчас ссылкой является изображение и появляющаяся кнопка при наведении. В php мои знания нулевые. Использую шаблон Rocket (тормознутый, но интересный). Отвечающий участок кода за вывод названия товара и ссылки изображени:

if ( ! function_exists( 'woocommerce_get_product_thumbnail' ) ) {

	function woocommerce_get_product_thumbnail( $size = 'shop_catalog', $placeholder_width = 0, $placeholder_height = 0  ) {

		global $post;

		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( 'product_loop_catalog_thumbnail_size', 'shop_catalog' ), array(
				'title'	=> $image_title,
				'alt'	  => $image_title,
				'class' => 'thumbnail'
				) );
			$product_link  = get_the_permalink();
			$product_title = get_the_title();

			echo apply_filters( 'woocommerce_product_loop_image_html', sprintf( '<figure class="product-thumbnail"><a href="%s">%s</a><span class="product-btn-group"><a href="%s" class="btn btn-primary btn-single-icon product-popup magnific-popup-link" title="%s"><i class="fa fa-plus"></i></a><a href="%s" class="btn btn-primary btn-single-icon product-link"><i class="fa fa-link"></i></a></span></figure>', $product_link, $image, $image_link, $product_title, $product_link ), $post->ID );

		} elseif ( wc_placeholder_img_src() ) {

			$product_link  = get_the_permalink();

			echo apply_filters( 'woocommerce_single_product_image_html', sprintf( '<figure class="product-thumbnail product-thumbnail__placeholder"><a href="%s"><img src="%s" alt="%s" class="thumbnail" /></a></figure>', $product_link, wc_placeholder_img_src(), esc_html__( 'Placeholder', 'rocket' ) ), $post->ID );
		}

	}
}

// Remove a link wrapping product thumbnail and data
remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 );
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5 );

// Add Wrapper to Product Info
function rocket_wrap_before_product_desc() {
	echo '<div class="product-info">';
}
add_action( 'woocommerce_before_shop_loop_item_title', 'rocket_wrap_before_product_desc', 10);

function rocket_wrap_after_product_desc() {
	echo '</div>';
}
add_action( 'woocommerce_shop_loop_item_title', 'rocket_wrap_after_product_desc', 20);


Я уже пытался передвигать, что-то добавлять...но никак не работает =((
  • Вопрос задан
  • 3029 просмотров
Решения вопроса 1
klyo
@klyo
Делай...
Исходя из того кода, который вы написали, можно сделать таким образом.

В WordPress есть глобальная переменная product:
global $product;
Чтобы сформировать ссылку, необходимо сделать следующее:
echo '<a href="'.get_permalink($product->post->id).'">Якорь ссылки</a>';


В вашем случае попробуйте заменить вот эту часть кода:
// Add Wrapper to Product Info
function rocket_wrap_before_product_desc() {
  echo '<div class="product-info">';
}
add_action( 'woocommerce_before_shop_loop_item_title', 'rocket_wrap_before_product_desc', 10);

function rocket_wrap_after_product_desc() {
  echo '</div>';
}
add_action( 'woocommerce_shop_loop_item_title', 'rocket_wrap_after_product_desc', 20);

На вот этот код:
// Add Wrapper to Product Info
function rocket_wrap_before_product_desc() {
  global $product;
  echo '<div class="product-info"><a href="'.get_permalink($product->post->id).'">';
}
add_action( 'woocommerce_before_shop_loop_item_title', 'rocket_wrap_before_product_desc', 10);

function rocket_wrap_after_product_desc() {
  echo '</a></div>';
}
add_action( 'woocommerce_shop_loop_item_title', 'rocket_wrap_after_product_desc', 20);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы