我正在研究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 :(得分: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甚至有值之前触发。
答案 1 :(得分: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无法应用任何内部操作和过滤器(例如双线换行自动段落,短码执行)。