我在我的 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 Code,它基本上只是在 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 文件会在两个不同的网站上导致不同的结果。我看到的唯一区别可能是服务器,除非我忽略了一些小错误?
EDIT
对于那些询问输出缓冲问题的人,我最近从最后一个服务器复制了 php.ini 文件,输出缓冲代码如下所示:
; output_buffering
; Default Value: Off
; Development Value: 4096
; Production Value: 4096
所以它似乎被注释掉了。
就像 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
查看 WordPress 文档add_shortcode()
,下面的文本块确实很引人注目。您可以轻松更改您的所有echo
语句将值附加到字符串,然后返回整个字符串。
请注意,短代码调用的函数不应产生任何类型的输出。短代码函数应返回用于替换短代码的文本。直接产生输出将导致意想不到的结果。这类似于过滤器函数的行为方式,因为它们不应该从调用中产生预期的副作用,因为您无法控制调用它们的时间和位置。
https://codex.wordpress.org/Function_Reference/add_shortcode https://codex.wordpress.org/Function_Reference/add_shortcode
希望这能帮助您解决这个问题,但我以前从未听说过发生过类似的错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)