Собственные шорткоды WP не отображаются в списках и всплывающих окнах JetEngine — нужна помощь =)Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Собственные шорткоды WP не отображаются в списках и всплывающих окнах JetEngine — нужна помощь =)

Сообщение Anonymous »

Проблема:
Я проектировал интернет-магазин, и мне нужно было выполнить простой математический расчет между метаполями пользовательских типов сообщений (CPT). Поскольку нет четкой документации о том, как это сделать с помощью встроенных инструментов JetEngine, встроенных в ваш плагин Elementor, я прибегнул к старомодному способу, добавив собственный код PHP. В данном случае я изменил файл function.php темы. Затем я присвоил необходимые переменные собственным шорткодам WordPress и попытался отобразить их в JetEngine списках, всплывающих окнах и пользовательских сообщениях. Вот где начинается проблема:
  • Если значение, которое я пытаюсь отобразить с помощью короткого кода WordPress, является статическим и не извлекается из CPT с помощью $var = jet_engine()->listings->data->get_meta($var2), это в некоторой степени работает для всех перечисленных элементов, хотя и не без проблем.
  • Однако, если я попытаюсь получить данные с помощью $var = jet_engine()->listings->data->get_meta($var2); и выполнить вычисления или просто назначить полученные данные собственному короткому коду WordPress, а затем попытаться отобразить это значение в списках JetEngine, всплывающих окнах или пользовательских сообщениях, короткие коды будут работать только правильно. для персонализированных публикаций. Что касается списков и всплывающих окон Jet, я вообще не могу заставить их работать правильно.
Я создал отдельный тестовый сайт WP, чтобы показать проблему, которую я не могу решить, чтобы она выглядела более понятной для вас.
Шаги по воспроизведению проблемы:
1. Создайте CPT с несколькими метаполями (показано на скриншоте):
Изображение

Изображение

Изображение

2. Создайте несколько сообщений для этого CPT (я создал 5 сообщений для лучшей видимости). Затем добавьте 5 виджетов динамических полей с соответствующим текстом в резервную область. Также добавьте всплывающие подсказки к каждому динамическому полю с одним и тем же текстом (последняя всплывающая подсказка имеет другой текст для отображения нескольких коротких кодов). Добавьте кнопку всплывающего окна Jet для каждого сообщения. Я приложил скриншоты:
Изображение

Изображение

Изображение

Изображение

3. Создайте листинг согласно скриншоту (не забудьте сделать его кликабельным, чтобы пользователи перенаправлялись на основной пост, кликнув на элемент листинга). Добавьте 5 виджетов динамических полей с соответствующим текстом в резервную область и добавьте кнопку для всплывающего окна Jet. Также добавьте подсказки к каждому динамическому полю с одинаковым текстом (последняя подсказка имеет другой текст для отображения нескольких коротких кодов):
Изображение

Изображение

4. Создайте всплывающее окно, как показано на скриншоте, и добавьте 5 виджетов динамических полей с соответствующим текстом в резервном варианте. Не забудьте также добавить подсказки, как мы уже сделали для публикаций и списков:
Изображение

5. Скопируйте следующий код, который я написал для этого примера, в functions.php собственной темы Elementor или в область фрагмента PHP и обновите его:

Код: Выделить всё

// SC code for jetengine croco test

add_shortcode("sc_rat", function () {

$purchased_field = 'sold';  // The ID of the "sold" field
$replaced_field = 'replaced';   // The ID of the "replaced" field

// Fetch the values of the "sold" and "replaced" fields from the current post
$purchased_value = jet_engine()->listings->data->get_meta( $purchased_field );
$replaced_value = jet_engine()->listings->data->get_meta( $replaced_field );

// Initialize the percentage result
$percentage = 0;

// Ensure that the "sold" value is greater than 0 to avoid division by zero
if ( $purchased_value > 0 ) {
// Calculate the percentage of replaced items relative to sold items
$percentage = ( $replaced_value / $purchased_value ) * 100;
}

$percentage_display = number_format_i18n($percentage, 2);

return "$percentage_display %";

});

// SC code for jetengine - test % - car model

add_shortcode("car_model_sc", function () {
$carmodelvalue = 'car_model'; // Define the car model key

// Fetch the car model value using JetEngine's dynamic meta handling
$carmodel_var = jet_engine()->listings->data->get_meta($carmodelvalue);

// Ensure the car model value is not empty before returning it
if ($carmodel_var) {
return $carmodel_var; // Return the car model value
} else {
return 'No data'; // Return a fallback message if no value is found
}
});

// SC code for jetengine - test % - price

add_shortcode("car_price_sc", function () {
$car_price_value = 'price'; // Define the car model key
// Fetch the value of the "car_model" field using JetEngine
$car_price_var = jet_engine()->listings->data->get_meta($car_price_value);

// Ensure the car model value is not empty before returning it
if ($car_price_var) {
return $car_price_var; // Return the car model value
} else {
return 'No data'; // Return a fallback message if no value is found
}
});

// SC code for JetEngine - Car Sold

add_shortcode("car_sold_sc", function () {
$car_sold_key = 'sold'; // Define the key for the "sold" field
// Fetch the value of the "sold" field using JetEngine
$car_sold_var = jet_engine()->listings->data->get_meta($car_sold_key);

// Ensure the car sold value is not empty before returning it
if ($car_sold_var) {
return $car_sold_var; // Return the car sold value
} else {
return 'No data'; // Return a fallback message if no value is found
}
});

// SC code for JetEngine - Car Replaced

add_shortcode("car_replaced_sc", function () {
$car_replaced_key = 'replaced'; // Define the key for the "replaced" field
// Fetch the value of the "replaced" field using JetEngine
$car_replaced_var = jet_engine()->listings->data->get_meta($car_replaced_key);

// Ensure the car replaced value is not empty before returning it
if ($car_replaced_var) {
return $car_replaced_var; // Return the car replaced value
} else {
return 'No data';  // Return a fallback message if no value is found
}
});

// SC code for JetEngine - end of the test code for croco
Вот текст для метаполей, чтобы вам не пришлось писать его вручную — просто скопируйте и вставьте его:
Модели автомобилей:

Код: Выделить всё

06 LCI, F7x 1 Series, i5 (G60E), i4 (G26E), i3
Текст виджета динамического поля для вставки в резервное поле:

Код: Выделить всё

Car model: [car_model_sc]

Car price: [car_price_sc]

Car sold: [car_sold_sc]

Car replaced: [car_replaced_sc]

Replaced ratio: [sc_rat]
Для текста в последней подсказке (текст подсказки для первых 4 полей такой же, как текст для резервного поля):

Код: Выделить всё

We replaced [car_replaced_sc] cars out of [car_sold_sc] cars sold. This is a [sc_rat] replacement ratio.
6. Не забудьте очистить кэш Elementor и синхронизировать библиотеку.
Теперь давайте посмотрим на результаты:
1. Откройте страницу с списком Jet, и вы заметите, что ни один из собственных шорткодов WordPress не отображает присвоенные значения. им. Однако, если вы наведете курсор на динамическое поле, вы увидите, что собственные короткие коды WordPress правильно извлекают данные во всплывающей подсказке, включая последнюю всплывающую подсказку, где короткие коды отображают результаты вычислений:
Изображение

----->>> Вот изображение в формате gif для лучшего объяснения Вот изображение в формате gif для лучшего объяснения.

Подробнее здесь: https://stackoverflow.com/questions/798 ... pups-seeki
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»