не удается получить телефон для выставления счетов Woocommerce внутри поля ввода с помощью jquery

#javascript #jquery #woocommerce #contact-form-7

#javascript #jquery ( jquery ) #woocommerce woocommerce #контактная форма-7

Вопрос:

У меня есть форма CF7, и мне нужно получить номер телефона для выставления счетов Woocommerce и отобразить его в поле телефона при загрузке страницы с помощью функции jQuery. Я использовал этот код в области заголовка:

 // Get billing_phone_number On Quote Form

jQuery(document).ready(function(){
        jQuery('#mk-order-tel').val("<?php echo get_user_meta( get_current_user_id(), 'billing_phone', true ) ?>");
    });
 

Но он возвращает необработанный php-код ( <?php echo get_user_meta( get_current_user_id(), 'billing_phone', true ) ?> ) вместо номера телефона; когда я использую тот же php-код непосредственно в php-файлах Woocommerce, он работает корректно. Что я должен сделать, чтобы запустить синтаксис php через jQuery?

Редактировать


Чтобы избежать вышеупомянутой проблемы, я попытался получить данные с помощью ajax, но этот метод тоже не работает:

в functions.php :

 /* Get Customer Phone Number */

function my_ajax_handler(){
    global $woocommerce;
    $phone = get_user_meta( get_current_user_id(), 'billing_phone', true );
     ?>
    <script type="text/javascript">
    jQuery( function($){
    jQuery('#mk-order-tel').val("<?php echo json_encode($phone); ?>");
    });
    </script>
    <?php
}

add_action( 'wp_ajax_call_my_ajax_handler', 'my_ajax_handler' );
add_action( 'wp_ajax_nopriv_call_my_ajax_handler', 'my_ajax_handler' );


function my_quote_scripts() {
  wp_enqueue_script( 'my-ajax-script', get_stylesheet_directory_uri() . '/js/quote.js', array('jquery') );
  wp_localize_script( 'my-ajax-script', 'my_ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
}
add_action( 'wp_enqueue_scripts', 'my_quote_scripts' );
 

в quote.js :

 jQuery.ajax({
    
    type:"POST",
    url: my_ajax_object.ajax_url,
    data: { 'action': 'call_my_ajax_handler' }
    
})
 

Что еще я могу сделать ?

Комментарии:

1. Что <?php echo get_user_meta( get_current_user_id(), 'billing_phone', true ) ?> выводит? Вы убедились, что он выводит номер телефона? Что делать, если if на самом деле выводит что-то еще, например, ошибку? — Нет никаких проблем с JS, которые вы опубликовали.

2. @LouysPatriceBessette я использовал echo get_user_meta( get_current_user_id(), 'billing_phone', true ) непосредственно в php-файле той же страницы, и он работает правильно. Я поместил jQuery в заголовок сайта.

Ответ №1:

Это должно сработать, вы получаете исключение из-за кавычек

 const tel = <?php echo get_user_meta( get_current_user_id(), 'billing_phone', true ) ?>;
jQuery(document).ready(function(){
   jQuery('#tel').val(tel);
});
 

Или вы можете просто заменить одинарные кавычки на двойные

 jQuery(document).ready(function(){
        jQuery('#tel').val("<?php echo get_user_meta( get_current_user_id(), 'billing_phone', true ) ?>");
    });
 

Комментарии:

1. оба отображают <?php echo get_user_meta( get_current_user_id(), 'billing_phone', true ) ?> внутреннее поле вместо номера телефона; похоже, код php нуждается в некоторых модификациях.

2. Пожалуйста, проверьте, делаете ли вы все это в файле с .php расширением

3. Я использовал echo get_user_meta( get_current_user_id(), 'billing_phone', true ) непосредственно в php-файле той же страницы, и он работает правильно. Я поместил jQuery в заголовок сайта.

Ответ №2:

Просто используя этот код в functions.php дочерняя тема может извлекать телефон клиента и отображать внутри текстового поля ввода :

 /* Get Customer Phone Number On Quote Form */

function my_jquery_var() {
    if ( $yourtel = get_user_meta( get_current_user_id(), 'billing_phone', true ) ) { 
        
        echo '<script type="text/javascript">
        var yourTel = "' . $yourtel . '";
        document.getElementById("mk-order-tel").value = yourTel;
        </script>' . "n";
        
    }
}
add_action( 'wp_footer', 'my_jquery_var' );
 

Примечание: JavaScript должен быть в области нижнего колонтитула.