SergeyMakhnov
@SergeyMakhnov
PHP Developers

Почему не работает $wpdb, если используешь переменную?

Здравствуйте. Какой-то треш происходит, уже всю голову сломал над тем, почему код не работает.

Суть проблемы. Имеется данный код, размещенный в functions.php:

function create_post( $post_id, $post, $update ) {
	if ($update == false && get_post_type($post_id) == 'task') {
		global $wpdb;
		$gettaskurl = $wpdb->get_var( "SELECT `meta_value` FROM `wp_postmeta` WHERE `post_id` LIKE '$post_id' AND `meta_key` LIKE 'task_url'" );
		$fp = fopen("file.txt", "w" );
		fwrite($fp, $gettaskurl);
		fclose($fp);
	}
}
add_action( 'save_post', 'create_post', 20, 3 );


Данный код должен при создании поста с типом task получать значение поля 'meta_value' с ключом 'task_url' для создаваемого поста из таблицы 'wp_postmeta' и затем записывать его в файл file.txt, но он не работает.

1) Думал что $post_id не передается, но если изменить
fwrite($fp, $gettaskurl);
на
fwrite($fp, $post_id);
то id текущего поста нормально записывается в файл.
2) Сам wpdb работает, если в тут
$gettaskurl = $wpdb->get_var( "SELECT `meta_value` FROM `wp_postmeta` WHERE `post_id` LIKE '$post_id' AND `meta_key` LIKE 'task_url'" );

вместо $post_id написать напрямую любое число, например
$gettaskurl = $wpdb->get_var( "SELECT `meta_value` FROM `wp_postmeta` WHERE `post_id` LIKE '100' AND `meta_key` LIKE 'task_url'" );

То остальной код выполняется.

Вообще не пойму в чем проблема. Как будто я какую-то мелочь упускаю, но как так вообще возможно, что если используешь $post_id в запросе, то ничего не работает, а если руками id любого поста вписываешь - то все работает При том что сам $post_id передается, но именно в $wpdb->get_var не хочет работать. Также вместо $wpdb->get_var пробовал использовать $wpdb->get_row, $wpdb->query и т.д., но ничего не работает.
  • Вопрос задан
  • 395 просмотров
Решения вопроса 1
SergeyMakhnov
@SergeyMakhnov Автор вопроса
PHP Developers
В общем проблема решилась тем, что перевесил функцию с хука save_post на acf/save_post. Не знаю почему она упорно не хотела работать с save_post.
Возможно кто знающий наткнется на эту тему и объяснит.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Kozack
@Kozack Куратор тега WordPress
Thinking about a11y
Почитайте больше о том как использовать этот апи
$wpdb->get_var($wpdb->prepare(
	"SELECT `meta_value` FROM $wpdb->postmeta WHERE `post_id` LIKE %s AND `meta_key` LIKE 'task_url'", $post_id
));
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы