显示RSS提要中自定义帖子中的自定义域

时间:2021-02-07 作者:Gadgets Mall

我已经为此挣扎了几天,但仍然不知道该怎么做。我想做的是在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/>&#9734;&#9734;&#9734;&#9734;&#9734; \' . 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

1 个回复
最合适的回答,由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.

    相关推荐

    使用$wpdb或其他PHP脚本方法在WP数据库中查找/替换

    我希望为我的网站使用的自定义WordPress插件推出一个bug修复程序。该插件使用各种属性注册一个短代码。但是,有一个错误,其中一个属性被错误地调用,因此它永远不会在HTML中呈现。因为我有很多用户使用这个插件,所以他们可能会在生产页面的短代码中不知不觉地设置了这个属性,这意味着推动修复可能会导致这些页面呈现不正确。我基本上想运行一个脚本;重置(&Q);将shortcode属性的所有实例设置为默认值(\'\', 在这种情况下)。我希望regex查找以下所有实例:\\[shortcode_name(.*?