执行自定义SQL查询时使用格式打印页面内容

时间:2013-02-21 作者:micadelli

我想这有一个简单的解决方案,但找不到任何解决方案。

我正在试着取3页,并在页脚上显示它们。问题是every page is shown as text without formatting 也就是说shortcodes are printed as text as well.

下面是我使用的代码:

global $wpdb;
$sql            = "SELECT post_title, post_content FROM ...";
$footerElements = $wpdb->get_results( $sql );

foreach ( $footerElements as $footerElement ) {
    echo \'<div class="four columns">\';
    echo \'<h5>\' . $footerElement->post_title . \'</h5>\';
    echo $footerElement->post_content;
    echo \'</div>\';      
}
我使用的原因SQL 而不是WP_Query 我有一个插件pre_get_posts 这是显式设置post_types (不包括page) 在类别或标记页面中显示时。所以我不能用WP_Query 为此。

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

您需要运行post_content 过滤器。这是对当前代码的一行更改。

echo $footerElement->post_content;
。。。应该是。。。

echo apply_filters(\'the_content\',$footerElement->post_content);
这将为您提供与普通帖子相同的格式。

当然,您可以选择要运行的过滤器,而不是全部运行,如果插件通过过滤器(例如,G+按钮)向帖子内容添加了内容,您可能需要这样做。看看default filters 对于the_content 并检查Codex中的各种回调函数。

为了详细说明最后一个想法,过滤器回调基本上是接受输入并返回(通常)该输入的修改版本的函数。这意味着如果需要的话,你可以直接给他们打电话。它们与其他功能一样。例如

从中获取此筛选器default-filters.php :

add_filter( \'the_content\', \'wptexturize\'            );
回调函数为wptexturize. 如果要运行该“过滤器”,并且只运行该过滤器,则可以编写:

echo wptexturize($footerElement->post_content);
我不能保证这适用于所有过滤器,因为有时人们会用过滤器做一些奇怪的事情,但它应该适用于大多数过滤器,尤其是核心过滤器。

你能做的另一件事是remove particular filters 如果你知道哪些是你不想跑的。这可能比键入您想要运行的内容更容易。

remove_filter( \'the_content\', \'wptexturize\' );
// some code maybe
echo apply_filters(\'the_content\',$footerElement->post_content);
// more code maybe
// add the filter back in case it is used later in the page
add_filter(\'the_content\',\'wptexturize\');

结束

相关推荐

会有什么阻止我同时删除wp_head和wp_footer吗?

一些插件依赖于wp\\u head或wp\\u footer或两者来引入自己的样式表和JavaScript。这些脚本需要时间来加载和减慢我的网站。因此,我想手动控制我网站上的所有脚本。我正在考虑完全删除wp\\u head()和wp\\u footer()。如果我这样做,天会塌下来吗?我读过this.