PHP没有在正确的地方回响

时间:2014-03-18 00:06:55

标签: php html mysql wordpress

我在我的WordPress网站上运行一些PHP代码,当PHP运行以回显一些信息时,它不会在正确的位置回显它。代码的缩写版本是:

<div class="description cms">
    <div id="home_left_middle">
        <h2>Search By Category</h2>
        [xyz-ips snippet="Category-List"]
     </div>
</div>

短代码用于插件XYZ PHP代码,这基本上只是在WordPress帖子中使用“包含”的一种方式。我在WP数据库中设置了一些自定义,但它只是基本的数据库调用。所有信息都是从数据库成功返回的,因此没有问题。我在那里使用的PHP代码是:

$sql = "SELECT * FROM wp_categories_table";
$result = $wpdb->get_results($sql);

echo "<ul class='category_list'>";

foreach( $result as $results ) {
    $category = $results->category; 
    $number = $results->number_of;
    $category_html = htmlentities($category);

    echo "<li><a href='?search-class=DB_CustomSearch_Widget-db_customsearch_widget&widget_number=preset-default&cs-all-0=&cs-post_cat-1=".$category_html."&search=Search'>".$category." (".$number.")</a></li>";
}

echo "</ul>";

当PHP代码运行时,它会在div.description之后(在div#home_left_middle之前)回复它,并且只有H2保留在home_left_middle div中。这不是代码运行的地方。

这个奇怪的是我在另一个网站上使用完全相同的代码(我复制了这个网站,因为我们只是更换服务器,虽然完全相同的内容),并且它在其他服务器上工作正常。这是一个VPS所以我想知道是否有某种PHP扩展我没有正确安装在服务器上可能导致这种情况?我知道这有点广泛,但我很困惑为什么完全相同的代码,在相同版本的WordPress和使用相同的主题和CSS文件将导致两个不同的网站上不同的结果。我看到的唯一区别可能是服务器,除非我忽略了一些小错误?

修改

对于那些询问输出缓冲问题的人,我最近从最后一个服务器复制了php.ini文件,输出缓冲代码如下所示:

; output_buffering
;   Default Value: Off
;   Development Value: 4096
;   Production Value: 4096

所以它似乎被注释掉了。

2 个答案:

答案 0 :(得分:4)

与评论中建议的maioran84一样,这可能是输出缓冲区的一些问题。我建议你将php.ini文件从工作站点复制到非工作站点服务器。

查看PHP配置文件,有一些设置可能导致在wordpress准备就绪之前显示输出。

; Implicit flush tells PHP to tell the output layer to flush itself
; automatically after every output block.  This is equivalent to calling the
; PHP function flush() after each and every call to print() or echo() and each
; and every HTML block.  Turning this option on has serious performance
; implications and is generally recommended for debugging purposes only.
; http://php.net/implicit-flush
; Note: This directive is hardcoded to On for the CLI SAPI
implicit_flush = Off

output_buffering = 4096

查看add_shortcode()的WordPress文档,以下文本块非常突出。您可以轻松更改所有echo语句以将值附加到字符串,然后将字符串作为整体返回。

  

请注意,短代码调用的函数永远不会产生任何类型的输出。短代码函数应返回用于替换短代码的文本。直接生成输出将导致意外结果。这类似于过滤器函数应该表现的方式,因为它们不应该产生预期的调用副作用,因为你无法控制调用它们的时间和地点。

https://codex.wordpress.org/Function_Reference/add_shortcode

希望这可以帮助你解决这个问题,但我从来没有听说过这样的错误。

答案 1 :(得分:1)

我知道这个问题已经过时并且已经解决了,但我遇到了同样的问题并设法以不同的方式解决它,所以我想我会分享:)

我使用的是与你相同的wordpress插件,XYZ php代码,它输出正在被调用的div之上。我切换到另一个名为'PHP Code for posts'的插件,其工作方式完全相同作为XYZ,期望使用更好的代码编辑器,并且输出完全符合预期。

这很奇怪,因为我通常在我的WP版本中使用XYZ并且它总能正常工作,所以我能猜到的是插件交互不好。显然,插件的工作方式有所不同,但我今天感觉不够强大,无法弄清楚是什么;)。