Я проектировал интернет-магазин, и мне нужно было выполнить простой математический расчет между метаполями пользовательских типов сообщений (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, я вообще не могу заставить их работать правильно.
Шаги по воспроизведению проблемы:
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]
Код: Выделить всё
We replaced [car_replaced_sc] cars out of [car_sold_sc] cars sold. This is a [sc_rat] replacement ratio.
Теперь давайте посмотрим на результаты:
1. Откройте страницу с списком Jet, и вы заметите, что ни один из собственных шорткодов WordPress не отображает присвоенные значения. им. Однако, если вы наведете курсор на динамическое поле, вы увидите, что собственные короткие коды WordPress правильно извлекают данные во всплывающей подсказке, включая последнюю всплывающую подсказку, где короткие коды отображают результаты вычислений:

----->>> Вот изображение в формате gif для лучшего объяснения Вот изображение в формате gif для лучшего объяснения.
Подробнее здесь: https://stackoverflow.com/questions/798 ... pups-seeki
Мобильная версия