На днях на Wordpress сайте потребовалось создать посадочную страницу со списком карточек товаров, выводимых шорткодом [product_page]
Этот шорткод выводит детальную карточку товара на любой странице или записи Wordpress. И вот с каким недочетом столкнулись - шорткод [product_page] выводит карточку товара с заголовком h1 у названия товара. Поскольку на странице размещается несколько таких карточек, то и заголовков h1 тоже получается несколько. При этом у самого лендинга уже имеется свой собственный заголовок h1. Использование нескольких заголовков h1 на странице не приветствуется SEO специалистами, поэтому исправляем этот недочёт.
Логика подсказывает, что нам нужно в случае показа карточки товара в шорткоде, а не на странице товара поменять вывод названия в тегах h2 вместо h1.
Но, в документации Woocommerce информации о том как проверить выводится ли товар в шорткоде нет.
Пробуем вывести код изменяющий тег заголовка
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_title', 5 );
add_action( 'woocommerce_single_product_summary', 'test_template_single_title', 5 );
function test_template_single_title() {
the_title( '<h2 class="product_title entry-title">','</h2>' );
}
с разными проверками:
если id страницы
if (is_page() {
//..
}
не использует ли отображаемая страница (с размещенным шорткодом) шаблон WooCommerce:
if( !is_woocommerce() ){
// ...
}
не является ли страница детальной страницей товара
if ( !is_product() ) {
// ...
}
Все эти условия не рабочие. Всё что применяется к шаблонам страниц woocommerce, также применяется и к шорткоду. А изменения на не woocommerce страницах - никак не отражаются на шорткодах.
Но, рабочее решение изменения вывода шорткода нашлось. Суть его в том, что функция с хуком изменения заголовка woocommerce вложена в функцию проверки страницы. А функция проверки использует хук wordpress wp или более поздний. Заметим, что хук init в данном случае не сработает.
Итак, рабочий код изменения вывода шорткода на определенных условием страницах:
add_action( 'wp', 'proverka' );//здесь применяем хук wp, init - не сработает
function proverka(){
global $post;//это нужно, если требуется проверка наличия родительской страницы
if (is_page() && $post->post_parent = '11106') {//здесь дополнительно проверяется, что страница, имеет родителя с id 11106
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_title', 5 );
add_action( 'woocommerce_single_product_summary', 'tag_template_single_title', 5 );
function tag_template_single_title() {//эта функция изменяет тег заголовка на h2
the_title( '<h2 class="product_title entry-title">', '</h2>' );
}
}
}