PHP语法有助于在字符串中连接函数

时间:2012-03-15 12:15:48

标签: php wordpress syntax

我在wordpress中使用具有自定义功能的主题来构建日历页面。这允许我创建一个包含介绍性文本的页面,然后是下面的事件列表。

列表允许用户查看'上一页'或者'下一步'几个月的事件,但这样做会导致介绍性文本消失,尽管URL没有变化。

我在主题文件中找到了该功能,并尝试按以下方式进行编辑:

  if($action_identifier == 'get_cal'){
    $monthdata = explode('/', $thedata);
    $month = $monthdata[0];
    $year = $monthdata[1];
    $content = '<div id="post" class="page">';
    $content .='<div class="introduction">';   /* these */
    $content .= the_content();                 /* lines */
    $content .='</div>';                       /* added */
    $content .= '<div class="calmonth clear darkbox">';
    $content .= prevlink($month , $year);
    $content .= '</div>';
    $content .= '</div><div class="calentries">';
    $content .= get_the_calendar($month,$year) . '</div>';  
    $output = $content; 

}

我在这里尝试的是创建&#39;介绍&#39; div然后使用wordpress函数&#39; get_content&#39;在div中显示页面内容。

这种半成品的作用是它引入了&#39;介绍&#39; div我想要它,但不显示内容(当我输入内容而不是&#39; the_content()&#39;时它会显示文本。我认为这可能是一个语法问题,因为我是一个完全新手 - 有人能给我任何建议吗?

提前致谢。

4 个答案:

答案 0 :(得分:2)

the_content()打印内容。使用get_the_content()

$content .= get_the_content();                 /* lines */

答案 1 :(得分:0)

Wordpress在这些事情上很奇怪;它将echo来自函数内部的内容,因此字符串连接通常是不可能的。 大多数的函数也有一个以get_开头的对应项。这也是the_content功能的情况,因此用$content .= get_the_content();替换您的来电可以解决您的问题。

那就是说,作为我原来答案的延伸;如果你遇到一个没有get_替代的函数,你可能想使用输出缓冲来确保函数不输出所有内容:

<?php
function the_content( ) {
   echo "Foo";
}

ob_start( );
the_content( );
$content = ob_get_clean( );

doSomethingWith( $content ); // $content is now "Foo".

答案 2 :(得分:0)

使用输出缓冲区。

ob_start();
the_content();
$buffered_content = ob_get_clean();

if($action_identifier == 'get_cal'){
    $monthdata = explode('/', $thedata);
    $month = $monthdata[0];
    $year = $monthdata[1];
    $content = '<div id="post" class="page">';
    $content .='<div class="introduction">';   /* these */
    $content .= $buffered_content              /* lines */
    $content .='</div>';                       /* added */
    $content .= '<div class="calmonth clear darkbox">';
    $content .= prevlink($month , $year);
    $content .= '</div>';
    $content .= '</div><div class="calentries">';
    $content .= get_the_calendar($month,$year) . '</div>';  
    $output = $content; 
}

答案 3 :(得分:0)

听起来$ post对象超出了该函数的范围。如果是,则必须将该对象传递给该函数,或者传递一个ID,然后从中获取post对象,或者全局化$ post。如果它在该函数的范围内,请尝试使用

$post->post_content

另一件事是日历可能正在使用AJAX。如果是这种情况,那么你无法全球化$ post。你必须传递ID和$ post oject。