У меня есть форма «Контакт 7» со скрытым полем с надписью «confirmation_number». Мне нужно заполнить это поле SQL-запросом.
Это мой SQL-запрос
select count(*)
from wp_postmeta
where meta_value = "used"
Это код, который я поместил в свои functions.php
add_action( 'wp_footer', 'add_confirmation_number' );
function add_confirmation_number() {
$page_id = get_the_ID();
if ($page_id===11699 || $page_id===11709 || $page_id===11710 ||$page_id===11729 ){
$wpcf7 = WPCF7_ContactForm::get_current();
global $wpdb;
$confirmation_number = $wpdb->get_var(("SELECT count(*) FROM $wpdb->wp_postmeta WHERE meta_value = 'used' "));
return $confirmation_number;
?>
<script type = "text/javascript">
document.getElementById('confirmation-number').value = <?php echo $confirmation_number ?>;
</script>
<?php
}
}
Я получаю сообщение об ошибке Undefined property: wpdb::
Но я пробовал все, чтобы исправить этот синтаксис, и ничего не работает. Я также не уверен, использую ли я
$wpdb правильно. Я начинающий разработчик Wordpress, поэтому буду признателен за любую помощь!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я вижу несколько вещей. Во-первых, ваш скрипт, вероятно, никогда не загружается, потому что у вас есть return $confirmation_number, который остановит распространение функции. Во-вторых, свойства $wpdb->table_name не включают префикс. postmeta стол $wpdb->postmeta. Вы также можете использовать $wpdb->prefix для добавления префикса к таблицам, которые не были добавлены в глобальный $wpdb объект, если вам нужен доступ к ним.
Я также подчистил несколько вещей, но удаления оператора return и замены $wpdb->wp_postmeta на $wpdb->postmeta должно быть достаточно.
add_action( 'wp_footer', 'add_confirmation_number' );
function add_confirmation_number() {
$confirmation_page_ids = array( 11699, 11709, 11710, 11729 );
if ( in_array(get_the_ID(), $confirmation_page_ids) ){
global $wpdb;
$wpcf7 = WPCF7_ContactForm::get_current(); // Is this necessary? No other calls to $wpcf7 below
$sql = "
SELECT count(*)
FROM $wpdb->postmeta
WHERE meta_value = 'used'
";
$confirmation_number = $wpdb->get_var( $sql );
if ( $confirmation_number !== null ){
printf( '<script type = "text/javascript">
document.getElementById("confirmation-number").value = %d;
</script>', absint($confirmation_number) );
}
}
}
Измените эту строку кода:
$confirmation_number = $wpdb->get_var(("SELECT count(*) FROM $wpdb->wp_postmeta WHERE meta_value = 'used' "));
К:
$confirmation_number = $wpdb->get_var(("SELECT count(*) FROM $wpdb->postmeta WHERE meta_value = 'used' "));
Также return $confirmation_number; не должно быть там.
Привет, @Zed! Ваш ответ действительно работает и был бы вполне приемлемым, но обычно люди, задающие такие вопросы, также получают пользу от быстрого объяснения. Вместо «изменить X на Y» вы должны объяснить, почему замена X на Y действительно работает, хотя бы в одном-двух предложениях. Ваше здоровье!
Спасибо за совет. Я обязательно рассмотрю это. 👌
OMG - весь ваш ответ намного читабельнее. СПАСИБО!