Вопрос или проблема
У меня есть свой тип записи, который имеет несколько полей, принимающих значения. Каждое значение можно редактировать. Я хотел бы отобразить общую сумму этих значений в другом не редактируемом поле на той же странице администрирования пользовательского типа записи.
Это возможно?
Вы можете создать плагин, чтобы добавить JavaScript (и таблицы стилей) на целевые страницы администрирования. Судя по описанию, я думаю, что лучше всего будет вставить поле общей суммы вместе с существующими полями. Или вы можете создать метабокс для его отображения. И используйте Stack Overflow для всех ваших нужд по jQuery.
<?php
/* Название плагина: Мой плагин */
# Запускать только на /wp-admin/post.php
add_action( 'admin_print_scripts-post.php', function()
{
global $typenow;
// Запускать только для типов Записи и Фильмы
if( !in_array( $typenow, array( 'post', 'movie' ) ) )
return;
# codex.wordpress.org/Function_Reference/wp_enqueue_script
wp_enqueue_script(
'my-custom-posts',
plugins_url( '/my-custom-posts.js', __FILE__ ),
array(), // зависимости
false, // версия
true // в подвале
);
# codex.wordpress.org/Function_Reference/wp_localize_script
wp_localize_script(
'my-custom-posts',
'my_vars',
array( 'typenow' => $typenow )
);
});
А файл my-custom-posts.js
в той же папке, что и ваш плагин:
jQuery(document).ready(function($)
{
alert( my_vars.typenow );
// делайте ваши вещи
});
Ответ или решение
Да, добавление пользовательской бизнес-логики на страницу редактирования пользовательского поста в админке WordPress вполне возможно. В вашем случае, когда требуется отобразить общую сумму значений из нескольких полей в отдельном не редактируемом поле, задача решаема с использованием как JavaScript, так и PHP.
Основные шаги
-
Создание плагина: Для начала создадим плагин, который будет отвечать за внесение изменений на странице редактора поста.
-
Регистрация скрипта: Плагин будет включать пользовательский JavaScript файл, который будет отслеживать изменения в полях с суммами и вычислять их сумму.
-
Создание метабокса: Мы создадим метабокс для отображения общей суммы, который будет обновляться при каждом изменении значений в полях.
Пример реализации
Шаг 1: Создание плагина
Создайте новую папку в каталоге wp-content/plugins
и назовите её, например, custom-post-sum
. Внутри этой папки создайте файл custom-post-sum.php
со следующим содержимым:
<?php
/*
Plugin Name: Custom Post Sum
Description: Изменяет страницу редактирования пользовательского поста, добавляя поле с общей суммой.
Version: 1.0
Author: Ваше Имя
*/
// Подключаем скрипты только на странице редактирования нужного пользовательского типа постов
add_action('admin_enqueue_scripts', function() {
global $typenow;
if ($typenow === 'your_custom_post_type') { // Замените на ваш тип поста
wp_enqueue_script('custom-post-sum-script', plugins_url('custom-post-sum.js', __FILE__), array('jquery'), null, true);
wp_localize_script('custom-post-sum-script', 'custom_vars', array('typenow' => $typenow));
}
});
// Добавляем метабокс для отображения общей суммы
add_action('add_meta_boxes', function() {
add_meta_box('total_amount_meta_box', 'Общая сумма', 'display_total_amount_meta_box', 'your_custom_post_type', 'side');
});
function display_total_amount_meta_box($post) {
// Отобразите поле с общей суммой (не редактируемое)
echo '<input type="text" id="total_amount" name="total_amount" value="" readonly />';
}
Шаг 2: JavaScript для вычисления суммы
В той же папке создайте файл custom-post-sum.js
со следующим содержимым:
jQuery(document).ready(function($) {
function calculateTotal() {
let total = 0;
$('.amount_field_class').each(function() { // Замените .amount_field_class на класс ваших полей
const value = parseFloat($(this).val()) || 0;
total += value;
});
$('#total_amount').val(total); // Обновляем значение поля с общей суммой
}
// Обработчик событий при изменении полей с суммами
$(document).on('input', '.amount_field_class', function() {
calculateTotal();
});
});
Дополнительные нюансы
-
Безопасность данных: Убедитесь, что вы правильно обрабатываете и проверяете данные, которые отправляются. Это можно сделать через функции валидации и верификации, чтобы избежать потенциальных уязвимостей.
-
Внешний вид и стилизация: Вы можете добавлять стили к вашему метабоксу и не редактируемому полю, чтобы они вписывались в общий вид админки.
Заключение
Таким образом, вы можете добавлять пользовательскую бизнес-логистику на страницу редактирования пользовательского поста. С помощью PHP и JavaScript вы получите не редактируемое поле с общей суммой, которое будет автоматически обновляться при изменении значений в полях с суммами. Этот подход подходит не только для суммирования, но и для любых других интерактивных задач, которые могут потребоваться на странице редактирования.