我已经为此挣扎了几天,但仍然不知道该怎么做。我想做的是在RSS提要中添加一个自定义表字段,所以我使用代码片段来解决这个问题。下面是我的nw,但我相信我已经尝试了所有可能的组合,我可以在WP site.
function featuredtoRSS($content) {
if ( has_post_thumbnail( $post->ID ) && get_post_type() == \'product\'){
global $wpdb;
$price = $wpdb->get_row($wpdb->prepare("SELECT salePrice FROM \' . $wpdb->gm_ads_products . \' WHERE post_id = \' . $post->ID . \'")); // this seems to be the issue
// $permalink_encoded = urlencode(get_post_permalink( $post->ID ));
$content = \'<div>\' . get_the_post_thumbnail( $post->ID, \'large\', array( \'style\' => \'margin-bottom: 15px;\' ) ) . \'</div><br/>☆☆☆☆☆ \' . wp_trim_words( get_the_title(), 10) . \'<br/>\' . $price . \'<br/>\' . wp_trim_words( get_the_content(), 55) . \'<br/><a href="\' . get_post_permalink( $post->ID ) . \'"><button style="max-width:90% !important;display:block;position:relative;margin:0 auto;border: none; background: url(//4.bp.blogspot.com/-2EO8_Ohre5o/WlxIkEZmQfI/AAAAAAAAjQI/J6vLPjS2qxULn9W-NG9czoA2gfPspeS7gCLcBGAs/s320/get-it-now.jpg) no-repeat center left; padding: auto auto; border-radius:20px;width:320px;height:72px;cursor:pointer;"></button></a>\' . $price;
}
return $content;
}
add_filter(\'the_excerpt_rss\', \'featuredtoRSS\');
add_filter(\'the_content_feed\', \'featuredtoRSS\');
有什么想法吗?正如你已经猜到的,这是一个购物网站。不是Woo。在上面的代码中,除了feed中没有显示的$价格之外,其他一切都正常工作。我想在提要中显示的字段是salePrice,来自gm\\U ads\\U products表。它在执行mysql查询时显示结果,例如从gm\\U ads\\U products中选择salePrice,其中post\\u id=244
最合适的回答,由SO网友:Sally CJ 整理而成
$price = $wpdb->get_row($wpdb->prepare("SELECT salePrice FROM \' . $wpdb->gm_ads_products . \' WHERE post_id = \' . $post->ID . \'")); // this seems to be the issue
是的,没错。
首先,因为$wpdb->prepare()
至少需要两个参数,一个是带有占位符的SQL查询,如%d
(对于数字),另一个是与查询中使用的占位符相对应的替换值。
$wpdb->get_row()
默认情况下,返回一个对象,因此不能简单地使用$price
输出时salePrice
价值,即。echo $price;
就像echo <object>;
这将导致PHP中出现致命错误!所以你应该用$price->salePrice
, e、 g。$price->salePrice . \'<br/>\'
而不是$price . \'<br/>\'
.$post
未在函数中定义,因此$post->ID
不会给您任何东西,相反,它甚至会抛出一个PHP通知,说明您正在尝试访问非对象变量的属性(未定义和)。生成的SQL查询实际上格式不正确,这会给您提供如下信息:SELECT salePrice FROM \' . table_name . \' WHERE post_id = \' . 1 . \'
:(这是因为您使用了单引号(\'
) 而不是双引号("
) 连接或生成查询时。如何解决问题定义$post
通过添加变量$post = get_post();
在功能的顶部:
function featuredtoRSS($content) {
// global $post; // Yes, this works.
$post = get_post(); // But I prefer using get_post(). :)
// ... the rest of your code here.
}
然后使用此查询salePrice
值:$price = $wpdb->get_row( $wpdb->prepare(
"SELECT salePrice FROM " . $wpdb->gm_ads_products . " WHERE post_id = %d",
$post->ID // this will replace the placeholder %d above
) );
$price = $price->salePrice;
或者,您可以使用$wpdb->get_var()
这样您就可以echo $price;
, i、 e.无需$price->salePrice
:$id = (int) $post->ID;
$price = $wpdb->get_var(
"SELECT salePrice FROM " . $wpdb->gm_ads_products . " WHERE post_id = $id"
);
注意,在上面的查询中,我没有使用$wpdb->prepare()
, 但我用了$id
变量,我确保它的值是一个数字。此外,请确保
$wpdb->gm_ads_products
是实际定义的,并且它包含正确的表名-但不是,请尝试使用
gm_ads_products
代替
$wpdb->gm_ads_products
.