Отображение страницы Elementor для клиента в Моем аккаунте Woocommerce - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть Woocommerce (подписки) и Elementor.Я пытаюсь добавить страницу / контент в область Myaccount в Woocommerce - новый пункт меню навигации.

Создание бита конечной точки и меню навигации работает без проблем.Проблема, с которой я сталкиваюсь, заключается в отображении страницы, созданной в elementor.Одна страница (также созданная в elementor) работает без проблем, в то время как другая - нет.

Страница, созданная в elementor, довольно проста, по сути, создает 4 столбца и 10 строк.В каждой строке есть кнопка, которая использует шорткоды для получения текста кнопки и URL-адреса для перехода при нажатии.Все это проверено и работает без проблем при непосредственном доступе к странице.

Если я использую этот код

$post = get_post(1114); 
$content = apply_filters('the_content', $post->post_content); 
echo $content;

в конечной точке для отображения страницы, вывод - это просто список строктекст, показывающий ячейки таблицы слева направо.Это только показывает текст кнопки (без знака URL) и не форматируется так или иначе, как страница в редакторе элемента (или если к ней обращаются напрямую), например, если таблица имеет вид

H1    H2    H3    H4
R1a   R1b   R1c   R1d
R2a   R2b   R2d   R2d

Отображение

H1
H2
H3
R1a
R1b
R1c
R1d
R2a
R2b
R2c
R2d

Если я использую приведенный ниже код

$content = \Elementor\Plugin::$instance->frontend->get_builder_content_for_display( 1119);
echo $content;

, таблица в основном отображается правильно со всем форматированием и т. Д. Единственное, что не работает, это текст кнопки.Вместо отображения текста, возвращенного шорткодом, он просто отображает шорткод.

Я уверен, что мне просто не хватает чего-то, что нужно где-то обработать, но я понятия не имею, что это такое, и страницы Elementor неК сожалению, очень много.

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 25 февраля 2019

РЕДАКТИРОВАТЬ: правильный ответ заключается в том, что рядом с текстовым полем есть динамическая кнопка / раскрывающийся список, который я раньше не замечал.Используя это, вы можете выбрать шорткод и ввести данные шорткода, и он будет отображаться правильно, без необходимости обработки вручную.

Не уверен, почему он не загружается правильно, как указано выше, но я обошел егонижеприведенное.Не уверен, что это правильный способ сделать это, но он работает.

$content = \Elementor\Plugin::$instance->frontend->get_builder_content_for_display( 1013 );
    $content = process_subswitch_content_for_shortcodes( $content );
    echo $content;

Ниже приведен поиск содержимого, возвращаемого функцией get_builder_content_for_display для '[subswitch', который является началом рассматриваемых шорткодов(невозможно просто найти], так как elementor помещает другие [] в содержимое).

function process_subswitch_content_for_shortcodes( $content ) {

    $keepprocessing = true;
    $searchstart_pos = 0;
    do {

        $startchar_pos = strpos( $content, "[subswitch", $searchstart_pos );
        if ( $startchar_pos == false ) {
            $keepprocessing = false;
        }

        $endchar_pos = strpos( $content, "]", $startchar_pos );
        $shortcode_request = substr( $content, $startchar_pos, $endchar_pos );
        if ( $shortcode_request == false ) {
            $keepprocessing = false;
        }

        $shortcode_content = do_shortcode( $shortcode_request );
        $content = str_replace( $shortcode_request, $shortcode_content, $content );

        $searchstart_pos = $endchar_pos;

    } while ( $keepprocessing ); 

    return $content;
}

Я, конечно, все же хотел бы узнать, как загрузить это напрямую, чтобы оно отображалось без обработкитак сказать шорткоды вручную.

...