$price = $wpdb->get_row($wpdb->prepare("SELECT salePrice FROM ' . $wpdb->gm_ads_products . ' WHERE post_id = ' . $post->ID . '")); // this seems to be the issue
Yes, that’s right.
-
First, because
$wpdb->prepare()requires at least two parameters, one is the SQL query with placeholders like%d(for numbers) and the other is the replacement values that correspond to the placeholders used in the query. -
$wpdb->get_row()by default returns an object, hence you can’t simply use the$pricewhen outputting thesalePricevalue, i.e.echo $price;is likeecho <object>;and that will cause a fatal error in PHP! So you should have used$price->salePrice, e.g.$price->salePrice . '<br/>'and not$price . '<br/>'. -
$postis not defined in your function, hence that$post->IDwill not going to give you anything and instead, it would even throw a PHP notice saying you’re trying to access a property of (and undefined and) a non-object variable. -
The generated SQL query is actually malformed which gives you something like this:
SELECT salePrice FROM ' . table_name . ' WHERE post_id = ' . 1 . '🙁 And that’s because you used single quotes (') instead of double quotes (") when concatenating or generating the query.
How to fix the issue
-
Define the
$postvariable by adding$post = get_post();at the top in your function:function featuredtoRSS($content) { // global $post; // Yes, this works. $post = get_post(); // But I prefer using get_post(). :) // ... the rest of your code here. } -
Then use this to query the
salePricevalue:$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;Alternatively, you can use
$wpdb->get_var()which then enables you to doecho $price;, i.e. no need for the$price->salePrice:$id = (int) $post->ID; $price = $wpdb->get_var( "SELECT salePrice FROM " . $wpdb->gm_ads_products . " WHERE post_id = $id" );Note that in the above query, I didn’t use
$wpdb->prepare(), but I used the$idvariable and I made sure that it’s value is a number.
Also, make sure the $wpdb->gm_ads_products is actually defined and that it contains the correct table name — but it’s not, try using gm_ads_products in place of $wpdb->gm_ads_products.