Как заполнить поле формы через javascript с помощью SQL-запроса таблицы WordPress

У меня есть форма «Контакт 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, поэтому буду признателен за любую помощь!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
221
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я вижу несколько вещей. Во-первых, ваш скрипт, вероятно, никогда не загружается, потому что у вас есть 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) );
        }
    }
}

OMG - весь ваш ответ намного читабельнее. СПАСИБО!

David Lee 17.12.2020 19:53

Измените эту строку кода:

$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 действительно работает, хотя бы в одном-двух предложениях. Ваше здоровье!

Xhynk 17.12.2020 20:09

Спасибо за совет. Я обязательно рассмотрю это. 👌

Zed 17.12.2020 22:06

Другие вопросы по теме