Intereting Posts
db преобразует десятичное число неправильно Почему фильтры / действия требуют подсчета аргументов? Пользовательская таксономия, не показывающая условия в почтовой области Активировать / деактивировать плагин Можем ли мы проверить изменения электронной почты пользователя? Отображение страницы страницы пользовательского типа Есть ли плагин для загрузки файлов, таких как файлы PDF? Экспортировать и перезаписывать страницы при импорте? Создайте страницу пользовательского архива для персонализированного типа сообщения в плагине Изображения указывают на локальный сервер вместо хранения Azure blob Невозможно изменить URL-адрес permalink после нажатия «ok» и «update» Как использовать функцию WP switchEditors.switchto (this) JS в вашем собственном скрипте? Как cdv из пользовательской CMS в WP Перемещение страницы блога Как запустить PHP-программу, отличную от WordPress, на сайте WordPress?

admin-ajax.php не работает должным образом на субдоменах

Я пытаюсь умножить цену продукта (вытащил из базы данных), соответствующий коммутируемому языку, сохраненной в cookie валюте. Для этого я использую скрипт AJAX и несколько методов. Проблема заключается в методе currencyRates();

Хотя в тестовой среде все работает нормально (вместо поддоменов я использую подпапки), на уровне производственного метода currencyRates(); просто возвращает значение 1 (инициализированное в начале метода, когда я var_dump $rate в цикле foreach, оно дает мне ожидаемое значение, но когда я пытаюсь вернуть его, всегда значение инициализируется в начале переменной $rate = 1 ).

Что происходит? Как субдомены могут влиять на этот тип скрипта? Значения из базы данных верны, проблема связана только с currencyRates(); возвращающее начальное значение или ноль, когда возврат используется внутри цикла foreach.

Я попытался переместить весь метод в get_original_price(); но затем ответ AJAX возвращает 0 вместо product_price умноженного на валюту.

Взгляните, если вам нужно больше кода, я могу вставить, но я почти уверен, что все остальное работает нормально (я получаю ответ, только умноженный на 1 из-за $rate = 1 ).

  public function get_original_price() { global $post; $variation_id = $_POST['variation_id']; $original_price = get_post_meta($variation_id, "_regular_price", true); $ratesCurrency = $this->currencyRates(); $priceAfterCurrency = $original_price*$ratesCurrency; echo $priceAfterCurrency; wp_die(); } private function currencyRates() { global $wpdb; $rate = 1; $currency = $_COOKIE['wcumcs_user_currency_session']; $name = 'wcumcs_exchange_rate_'.$currency; $selectRate = $wpdb->get_results("SELECT option_value FROM ".$wpdb->prefix."options WHERE option_name='".$name."' LIMIT 1;"); foreach ($selectRate as $row) { $rate = $row->option_value; } return $rate; } 

Solutions Collecting From Web of "admin-ajax.php не работает должным образом на субдоменах"

Не утруждайте себя сложной ошибкой cookie / ajax, используйте REST API!

Мы будем использовать инъекции зависимостей и API RESTful, чтобы удалить куки и упростить код AJAX.

Прежде всего, сначала включите это в REST API:

 class Stuff { public function __construct() { add_action( 'rest_api_init', function () { register_rest_route( 'soothsayer/v1', '/current_rate/', array( 'methods' => 'GET', 'callback' => [ $this, 'get_original_price' ] ) ); } ); } public function get_original_price( $request ) { $variation_id = $request['variation_id']; $original_price = get_post_meta( $variation_id, "_regular_price", true); $currency = $request['currency']; $ratesCurrency = $this->currencyRates( $currency ); $priceAfterCurrency = $original_price*$ratesCurrency; return $priceAfterCurrency; } private function currencyRates( $currency ) { global $wpdb; $rate = 1; $name = 'wcumcs_exchange_rate_'.$currency; $selectRate = $wpdb->get_results("SELECT option_value FROM ".$wpdb->prefix."options WHERE option_name='".$name."' LIMIT 1;"); foreach ($selectRate as $row) { $rate = $row->option_value; } return $rate; } } 

Теперь у нас есть конечная точка REST! Обратите внимание, как я:

  • Исправлено отступы, или, скорее, мой редактор делал это автоматически без усилий, и так же и ваш!
  • Используемая инъекция зависимости для захвата валюты. currencyRates не нужно знать, откуда взялось валютное значение, оно передается как параметр, теперь он будет работать для любой валюты независимо от того, как она была получена, а не только из набора, установленного в файле cookie
  • Валюта теперь является параметром, javascript может читать файлы cookie в порядке, и теперь ваш запрос на 100% доступен для кэширования. Это на 1000% лучше для производительности
  • Обратите внимание на объект $request переданный в get_original_price , это даст вам все подробности

Как это использовать?

 jQuery.get( 'https://example.com/wp-json/soothsayer/v1/current_rate', { 'variation_id' => 1, 'currency' => 'USD' }, function( data ) { // success? } ); 

Или даже посетив https://example.com/wp-json/soothsayer/v1/current_rate?variation_id=1&currency=USD

Оптимизация

Это не то, как вы выбираете опцию из таблицы опций:

  global $wpdb; $rate = 1; $name = 'wcumcs_exchange_rate_'.$currency; $selectRate = $wpdb->get_results("SELECT option_value FROM ".$wpdb->prefix."options WHERE option_name='".$name."' LIMIT 1;"); 

Вот как вы это делаете:

 $rate = get_option( 'wcumcs_exchange_rate_'.$currency, 1 ); 

Если вам нужно получить несколько опций, вы можете сделать это с помощью get_option без параметров, чтобы захватить массив