无法在RSS模板内部调用WPDB

时间:2016-07-25 作者:Lee

我正在尝试创建一个自定义RSS提要,它将列出和显示我创建的自定义表中的信息,我在WP站点的其他地方使用该表。桌子和所有的标志都很好。

然而,即使我尝试使用简单的RSS模板(已设置并可浏览):

<?php /* Template Name: Custom RSS Template - beforeAfters  */
header(\'Content-Type: \'.feed_content_type(\'rss-http\').\'; charset=\'.get_option(\'blog_charset\'), true);
echo \'<?xml version="1.0" encoding="\'.get_option(\'blog_charset\').\'"?\'.\'>\';
?>
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
>
<channel>
<?php
global $wpdb;
$beforeAfter = $wpdb->get_row(\'SELECT * FROM wp_before_after WHERE `gallery_display` = 1\');
foreach($beforeAfter as $imageSet) { ?>
<item>
<title><?php echo get_the_title($imageSet->ID); ?></title>
</item>
<?php } ?>
</channel>
</rss>
我收到以下错误:

此页面包含以下错误:第51列第11行的错误:下面未定义的实体“trade”是第一个错误之前的页面呈现。

将显示空白页(因为未呈现任何内容)。但是,如果我删除以下行$beforeAfter 设置后,错误消失,我开始在浏览器中看到RSS提要的输出(尽管它显示有关foreach 行无效。。这很好。

但我的问题是,为什么$wpdb 调用,导致错误消息,如何让变量拉动数据库行工作,以便在RSS模板中使用变量?

**美元前后转储**

<pre class="xdebug-var-dump" dir="ltr">
<small>
C:\\wamp64\\www\\bellavou\\wp-content\\themes\\bellavou\\rss-beforeAfters.php:17:
</small>
<b>object</b>
(
<i>stdClass</i>
)[
<i>4196</i>
]
<i>public</i>
\'id\'
<font color="#888a85">=></font>
<small>string</small>
<font color="#cc0000">\'1\'</font>
<i>(length=1)</i>
<i>public</i>
\'created\'
<font color="#888a85">=></font>
<font color="#3465a4">null</font>
<i>public</i>
\'before_date\'
<font color="#888a85">=></font>
<font color="#3465a4">null</font>
<i>public</i>
\'after_date\'
<font color="#888a85">=></font>
<font color="#3465a4">null</font>
<i>public</i>
\'patientID\'
<font color="#888a85">=></font>
<small>string</small>
<font color="#cc0000">\'2137\'</font>
<i>(length=4)</i>
<i>public</i>
\'procedureID\'
<font color="#888a85">=></font>
<small>string</small>
<font color="#cc0000">\'238\'</font>
<i>(length=3)</i>
<i>public</i>
\'patient_display\'
<font color="#888a85">=></font>
<small>string</small>
<font color="#cc0000">\'1\'</font>
<i>(length=1)</i>
<i>public</i>
\'procedure_display\'
<font color="#888a85">=></font>
<small>string</small>
<font color="#cc0000">\'1\'</font>
<i>(length=1)</i>
<i>public</i>
\'gallery_display\'
<font color="#888a85">=></font>
<small>string</small>
<font color="#cc0000">\'1\'</font>
<i>(length=1)</i>
<i>public</i>
\'before_img\'
<font color="#888a85">=></font>
<small>string</small>
<font color="#cc0000">\'face-lift_1_b.jpg\'</font>
<i>(length=17)</i>
<i>public</i>
\'after_img\'
<font color="#888a85">=></font>
<small>string</small>
<font color="#cc0000">\'face-lift_1_a.jpg\'</font>
<i>(length=17)</i>
<i>public</i>
\'period_taken\'
<font color="#888a85">=></font>
<small>string</small>
<font color="#cc0000">\'1week\'</font>
<i>(length=5)</i>
<i>public</i>
\'notes\'
<font color="#888a85">=></font>
<small>string</small>
<font color="#cc0000">\'\'</font>
<i>(length=0)</i>
</pre>

1 个回复
最合适的回答,由SO网友:Andy Macaulay-Brook 整理而成

经过讨论,我们发现问题不是直接调用$wpdb->get\\u row,而是它返回的数据与foreach循环中的处理不匹配。

对于单行数据,替换。。。

foreach($beforeAfter as $imageSet) { ?>
    <item>
        <title><?php echo get_the_title($imageSet->ID); ?></title>
    </item>
<?php }
。。。具有

<item>
    <title><?php echo get_the_title($imageSet->ID); ?></title>
</item>
。。。停止进给错误。

或者对于多行,您可以调整查询。