WordPress. показывать шорткоды в плагине лайтбокса

Я работаю над темой WordPress. Я использую плагин для отображения изображений на странице (для каждого сообщения 1 изображение). При нажатии на одно из этих изображений следующий код регистрирует это и открывает лайтбокс с содержанием сообщения в нем:

<?php
if($_REQUEST['popup']!=''){

$postObj = get_post( $_REQUEST['pid'] );echo '<div class="ostContent">'.$postObj->post_content.'</div>';

exit;
?>

Это все отлично работает.

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

Сначала я подумал, что нужно включить шорткоды. Итак, я изменил это:

echo '<div class="ostContent">'.$postObj->post_content.'</div>';

с этим:

echo '<div class="ostContent">'.do_shortcode( $postObj->post_content ).'</div>';

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

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

0

Решение

По образцу здесь: http://codex.wordpress.org/Function_Reference/do_shortcode

Похоже, вам нужно изменить: echo '<div class="ostContent">'.do_shortcode( $postObj->post_content ).'</div>';

чтобы:

echo '<div class="ostContent">'.do_shortcode([shortcode_in_brackets]).'</div>';

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

В противном случае, так, как вы в настоящее время делаете это, PHP запускается до того, как post_content даже получит значение.

0

Другие решения

Я думаю, что понимаю вашу проблему.

Следующее должно работать, предполагая, что рассматриваемые посты имеют post_type из post:

<?php

// Check for existence of 'popup' & 'pid' query vars
if ( $_REQUEST['popup'] && $_REQUEST['pid'] ) {

// Select single post by ID (using value of the 'pid' query var)
$query = new WP_Query( array ( 'p' => $_REQUEST['pid'] ) );

// Check that the query has returned something
if ($query->have_posts()) {

/* Loop through query until we run out of posts
(should only happen once in this case!) */
while ($query->have_posts()) {

// Setup post, so we can use the_content() and stuff
the_post();

echo '<div class="ostContent">';

/* The part we've been waiting for! the_content() will
display your post content as expected */
the_content();

echo '</div>';

}

}

}

?>

WP_Query это путь, который требуется в большинстве случаев для получения сообщений: http://codex.wordpress.org/Class_Reference/WP_Query

Ваш код извлекал и отображал данные практически непосредственно из таблицы сообщений WordPress, что не давало WordPress возможности применить какие-либо внутренние действия и фильтры (например, автоматические абзацы из двойных разрывов строк, выполнение шорткода).

0

По вопросам рекламы [email protected]