Отображение страницы Elementor для клиента в моей учетной записи Woocommerce

У меня есть 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, к сожалению, мало что выдают.

Любая помощь будет оценена по достоинству.


person Josh    schedule 23.02.2019    source источник


Ответы (1)


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

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

$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 помещает other [] в содержимое).

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;
}

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

person Josh    schedule 25.02.2019