Intereting Posts

sql-запрос в shortcode не работает

У меня есть пользовательская таблица 'wp-products' в WordPress со следующими полями

 id (primary key) eg 1 make eg ford model eg mustang price eg 17500.00 id (primary key) eg 2 make eg dodge model eg pheonix price eg 77500.00 

то, что я хочу сделать, это создать короткий код, например [product_price id=2] который возвращает значение цены, связанное с идентификатором номер 2 в этой таблице, например, 77500.00 . Я пробовал несколько способов и закончил с этим (ниже). Я помещаю этот код в functions.php

 function product_price_func( $atts ) { global $wpdb; $output = ''; $product_id = ''; $atts = shortcode_atts( array( 'id' => 'no id found', ), $atts, 'product_price' ); $product_id = $atts['id']; $product_price = $wpdb->get_results("SELECT price FROM wp-products WHERE id={$product_id}", ARRAY_A); foreach ( $product_price as $the_price ) { $output = $the_price->price; } return "Product Price: $" . $output; } add_shortcode( 'product_price', 'product_price_func' ); 

Однако это возвращает пустой результат. Я проверил, что он правильно передает id но не может получить запрос, чтобы вернуть значение, связанное с id=2 .

Я проработал, и вот шаги к тому, что я сделал, чтобы заставить его работать

  1. создал пользовательскую таблицу в базе данных wordpress (называемую ее wp-продуктами)
  2. эта таблица имела следующие поля: id, make, model, price
  3. Создал короткий код для извлечения цены. Shortcode выглядит так [product_price id = 2], где id = 2 – значение цены для пункта 2 в таблице.
  4. написал функцию shortcode для этого и поместил ее в functions.php в каталог тем.
  5. Изменен исходный код
  • добавление префикса $ table_name = $ wpdb->. 'продукты';
  • Изменен запрос: $ product_price = $ wpdb-> get_results ("SELECT price FROM". $ Table_name. "WHERE id = {$ product_id}", ARRAY_A);
  • изменил оператор foreach на $ output = $ the_price ['price'];
  1. добавил короткий код в место расположения страницы, где я хотел отобразить код.

Вот код, который работает, я надеюсь, что это поможет

 function product_price_func ($ atts) {
     глобальный $ wpdb; 

 $table_name = $wpdb->prefix . 'products'; $atts = shortcode_atts( array( 'id' => 'no id found', ), $atts, 'product_price' ); $product_id = $atts['id']; $product_price = $wpdb->get_results("SELECT price FROM " . $table_name ." WHERE id={$product_id}", ARRAY_A); foreach ( $product_price as $the_price ) { $output = $the_price['price']; } return "Product Price: $" . $output; 

}
add_shortcode ('product_price', 'product_price_func');