• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Как поменять расположение табов на странице товара?

Voxtone

Новичок
Здравствуйте! Извиняюсь если с моей проблемой нужно в раздел Вопросы новичков.
Появилась необходимость сделать так, что бы при открытии страницы товара, "по умолчанию" таб "Детали" был бы первым, а не вторым. И у меня это получилось сделать в теме storefront путём изменения функции woocommerce_default_product_tabs в файле wc-template-functions.php.
Я поменял приоритеты у 'Description' и Additional information. Additional information я выставил 10.
Код:
<?php
if ( ! function_exists( 'woocommerce_default_product_tabs' ) ) {
/**
* Add default product tabs to product pages.
*
* @param array $tabs Array of tabs.
* @return array
*/
function woocommerce_default_product_tabs( $tabs = array() ) {
  global $product, $post;
  // Description tab - shows product content.
if ( $post->post_content ) {
$tabs['description'] = array(
'title' => __( 'Description', 'woocommerce' ),
'priority' => 20,
'callback' => 'woocommerce_product_description_tab',
);
  }
  // Additional information tab - shows attributes.
if ( $product && ( $product->has_attributes() || apply_filters( 'wc_product_enable_dimensions_display', $product->has_weight() || $product->has_dimensions() ) ) ) {
$tabs['additional_information'] = array(
'title' => __( 'Additional information', 'woocommerce' ),
'priority' => 10,
'callback' => 'woocommerce_product_additional_information_tab',
);
  }
  // Reviews tab - shows comments.
if ( comments_open() ) {
$tabs['reviews'] = array(
/* translators: %s: reviews count */
'title' => sprintf( __( 'Reviews (%d)', 'woocommerce' ), $product->get_review_count() ),
'priority' => 30,
'callback' => 'comments_template',
);
  }
  return $tabs;
}
}
?>
Проблема в том что это не работает когда я пытаюсь это сделать в дочерней теме. Собственно дочернюю тему я ради этого изменения и создал(Как написано в гайдах, что бы оригинал не трогать).
Может быть я вообще не правильно расположил файлы дочерней темы в папках? У меня их всего два. Style.css, он лежит в папке с дочерней темой (он пустой, только @import url(“../storefront/style.css”); в нем.) И файл wc-template-functions.php, он лежит в дочерняяТема/woocommerce/includes/.
Файл wc-template-functions.php я полностью скопировал, и удалил строку if ( ! function_exists( 'woocommerce_default_product_tabs' ) ) {}.
Вопросы:
1. Можно ли так вообще (меняя приоритеты) делать? Или это "колхоз" какой то, и в будущем могут проблемы быть из за этого? (Извиняюсь за глупые вопросы WP первый мой сайт (не считая создания хтмл страничек сто лет назад)).
2. Правильно ли я файл расположил? Если да, то почему же когда я изменяю функцию в оригинальной теме, то все работает как надо?
3. Есть другой, альтернативный, правильный :) способ сделать то что я хотел.
P.S.
Не обязательно именно расположение менять, достаточно бы было что бы вкладка "Детали" была изначально активна при открытии страницы товара.
Спасибо.
 

ADv

Гуру
Местный
Здравствуйте! Извиняюсь если с моей проблемой нужно в раздел Вопросы новичков.
Появилась необходимость сделать так, что бы при открытии страницы товара, "по умолчанию" таб "Детали" был бы первым, а не вторым. И у меня это получилось сделать в теме storefront путём изменения функции woocommerce_default_product_tabs в файле wc-template-functions.php.
Я поменял приоритеты у 'Description' и Additional information. Additional information я выставил 10.
Код:
<?php
if ( ! function_exists( 'woocommerce_default_product_tabs' ) ) {
/**
* Add default product tabs to product pages.
*
* @param array $tabs Array of tabs.
* @return array
*/
function woocommerce_default_product_tabs( $tabs = array() ) {
  global $product, $post;
  // Description tab - shows product content.
if ( $post->post_content ) {
$tabs['description'] = array(
'title' => __( 'Description', 'woocommerce' ),
'priority' => 20,
'callback' => 'woocommerce_product_description_tab',
);
  }
  // Additional information tab - shows attributes.
if ( $product && ( $product->has_attributes() || apply_filters( 'wc_product_enable_dimensions_display', $product->has_weight() || $product->has_dimensions() ) ) ) {
$tabs['additional_information'] = array(
'title' => __( 'Additional information', 'woocommerce' ),
'priority' => 10,
'callback' => 'woocommerce_product_additional_information_tab',
);
  }
  // Reviews tab - shows comments.
if ( comments_open() ) {
$tabs['reviews'] = array(
/* translators: %s: reviews count */
'title' => sprintf( __( 'Reviews (%d)', 'woocommerce' ), $product->get_review_count() ),
'priority' => 30,
'callback' => 'comments_template',
);
  }
  return $tabs;
}
}
?>
Проблема в том что это не работает когда я пытаюсь это сделать в дочерней теме. Собственно дочернюю тему я ради этого изменения и создал(Как написано в гайдах, что бы оригинал не трогать).
Может быть я вообще не правильно расположил файлы дочерней темы в папках? У меня их всего два. Style.css, он лежит в папке с дочерней темой (он пустой, только @import url(“../storefront/style.css”); в нем.) И файл wc-template-functions.php, он лежит в дочерняяТема/woocommerce/includes/.
Файл wc-template-functions.php я полностью скопировал, и удалил строку if ( ! function_exists( 'woocommerce_default_product_tabs' ) ) {}.
Вопросы:
1. Можно ли так вообще (меняя приоритеты) делать? Или это "колхоз" какой то, и в будущем могут проблемы быть из за этого? (Извиняюсь за глупые вопросы WP первый мой сайт (не считая создания хтмл страничек сто лет назад)).
2. Правильно ли я файл расположил? Если да, то почему же когда я изменяю функцию в оригинальной теме, то все работает как надо?
3. Есть другой, альтернативный, правильный :) способ сделать то что я хотел.
P.S.
Не обязательно именно расположение менять, достаточно бы было что бы вкладка "Детали" была изначально активна при открытии страницы товара.
Спасибо.
Editing product data tabs - WooCommerce Docs
 
Сверху Снизу