WPBakery Page Builder не отображает шорткоды на страницах категорий продуктов WooCommerce - PullRequest
0 голосов
/ 07 ноября 2018

Я разрабатываю довольно сложную тему, в которой я создал пользовательские типы записей для «Верхних колонтитулов» и «Нижних колонтитулов», для которых я включил WPBakery Page Builder (в настоящее время используется v5.5.5 в Wordpress 4.9.8).

В header.php сообщение верхнего колонтитула извлекается и отображается внутри тега

, а затем в footer.php сообщение нижнего колонтитула извлекается и отображается внутри тега
.

Все работает отлично, за исключением того, что при переходе на страницу категории продукта в WooCommerce верхний и нижний колонтитулы просто отображаются в виде сырых шорткодов компоновщика страниц и не анализируют их. Все остальное с WooCommerce в порядке; Страница магазина, отдельные страницы товара, корзина, оформление заказа, все в порядке. Это просто категории по некоторым причинам.

Вот код в header.php:

<?php

$this_page_id = get_queried_object_id();

$gd_page_header = get_post_meta( $this_page_id, 'gd_page_header' );
if(empty($gd_page_header) || count($gd_page_header) == 0 || $gd_page_header[0] == 'default'){
    $header_id = intval(get_option('default_header'));
}else{
    $header_id = $gd_page_header[0];
}
if(!empty($header_id) && $header_id != '' && $header_id != 'none'){
    $post   = get_post( $header_id );
    $transparent_header = get_post_meta( $post->ID, 'transparent_header', true );
    $sticky_header = get_post_meta( $post->ID, 'sticky_header', true );
    $sticky_desktop_only = get_post_meta( $post->ID, 'sticky_desktop_only', true );
    if($sticky_header == '1'){
        $header_class = 'sticky';
        if($sticky_desktop_only == '1'){
            $header_class .= ' dt_only';
        }
    }elseif($transparent_header == '1'){
        $header_class = 'transparent';
    }else{
        $header_class = '';
    }
    $content = $post->post_content;
    $content_css = visual_composer()->parseShortcodesCustomCss( $content );
    if ( ! empty( $content_css ) ) { ?>
         <style type="text/css" data-type="vc_shortcodes-custom-css">
                     <?php echo strip_tags( $content_css ); ?>
         </style>
    <?php } ?>

    <header class="<?php echo($header_class); ?>">
        <div id="container" class="container clearfix">
            <?php echo apply_filters( 'the_content', $content ); ?>
        </div>
    </header>
<?php } ?>

И вот код в page.php, в который WooCommerce извлекает свой контент:

<?php get_header(); ?>
    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
        <main id="post-<?php the_ID(); ?>">
            <div id="container" class="container clearfix">
                <?php the_content(); ?>
            </div>
        </main>
    <?php endwhile; endif; ?>
<?php get_footer(); ?>

Вот домашняя страница моего тестового сайта: http://sandbox.graphicdetail.co.nz/

Как видите, все там хорошо выглядит. Все также хорошо отображается на странице магазина: http://sandbox.graphicdetail.co.nz/shop/

Но когда мы попадаем на страницу категории, все разваливается: http://sandbox.graphicdetail.co.nz/product-category/toys/

Я знаю, что WPBakery Page Builder все еще активен на этой странице, потому что вы можете видеть в коде header.php, где он имеет:

$content_css = visual_composer()->parseShortcodesCustomCss( $content );
if ( ! empty( $content_css ) ) { ?>
     <style type="text/css" data-type="vc_shortcodes-custom-css">
                 <?php echo strip_tags( $content_css ); ?>
     </style>
<?php } ?>

... Кажется, это работает нормально, потому что, когда я просматриваю страницу с инспектором, я вижу, что CSS заполнен правильно.

Надеюсь, кто-то здесь может иметь представление о том, куда я попал ужасно, ужасно неправильно?

Ответы [ 2 ]

0 голосов
/ 04 мая 2019

Используйте это перед отображением контента:

WPBMap::addAllMappedShortcodes();
echo apply_filters('the_content', the_content());
0 голосов
/ 18 ноября 2018

В интересах всех, кто когда-либо сталкивался с этой проблемой, я наконец-то решил эту головоломку, и все благодаря этой статье (особенно разделу «Файлы шаблонов»):

http://stephanieleary.com/2010/02/using-shortcodes-everywhere/

Итак, у меня был этот код в моем файле header.php:

<?php $content = $post->post_content; ?>

<header class="<?php echo($header_class); ?>">
    <div id="container" class="container clearfix">
        <?php echo apply_filters( 'the_content', $content ); ?>
    </div>
</header>

Я мог бы сказать, что все содержимое корректно загружалось и CSS правильно анализировался и т. Д., Но просто шорткоды WPBakery Page Builder не анализировались по какой-то причине.

Итак, после прочтения статьи Стефани Лири, я решил попробовать это:

<?php
    $content = $post->post_content;
    $content = apply_filters( 'the_content', $content );
?>

<header class="<?php echo($header_class); ?>">
    <div id="container" class="container clearfix">
        <?php echo do_shortcode($content); ?>
    </div>
</header>

Итак, вместо того, чтобы просто пытаться повторить apply_filters, я заполнил переменную $ content с apply_filters, а затем проанализировал $ content как шорткод и что-то! Это сработало!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...