我在我的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
所以它似乎被注释掉了。
答案 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并且它总能正常工作,所以我能猜到的是插件交互不好。显然,插件的工作方式有所不同,但我今天感觉不够强大,无法弄清楚是什么;)。