Wordpress - в доп. поле не сохраняются числа с дробью
Есть функция добавления доп. поля в комментарии wordpress:
// ПОЛЕ ЦЕНА В КОММЕНТАРИЯХ
// Добавляем поля в форму комментариев
// Добавляем метаданные комментария
add_action('comment_post', function ($comment_id) {
if (!empty($_POST['price'])) {
$price = intval($_POST['price']);
add_comment_meta($comment_id, 'price', $price);
}
});
// Добавляем новый метабокс на страницу редактирования комментария
add_action('add_meta_boxes_comment', function() {
add_meta_box('title', __('Доп. информация'), 'extend_comment_meta_box', 'comment', 'normal', 'high');
});
// Отображаем наши поля в админке
function extend_comment_meta_box($comment) {
$price = get_comment_meta( $comment->comment_ID, 'price', true );
wp_nonce_field('extend_comment_update', 'extend_comment_update', false);
?>
<p>
<label for="comment-price"><?php _e( 'Цена' ); ?></label>
<input id="comment-price" type="number" name="price" step='0.01' value="<?php echo esc_attr( $price ); ?>" class="widefat" />
</p>
<?php
}
// Редактируем наши поля в админке
add_action('edit_comment', function($comment_id) {
if (!isset($_POST['extend_comment_update']) || ! wp_verify_nonce($_POST['extend_comment_update'], 'extend_comment_update')) return;
if(!empty($_POST['price'])) {
$price = intval($_POST['price']);
update_comment_meta( $comment_id, 'price', $price );
}
else {
delete_comment_meta( $comment_id, 'price');
}
});
// Возвращает среднее щначение цены поста
function get_the_extend_comment_post_price() {
global $wpdb;
$price = 0;
if ( is_singular() ) {
$post_id = (int) get_the_ID();
$price = wp_cache_get( $post_id, 'post_avg_price' );
if ( false === $price ) {
$price = $wpdb->get_var( "
SELECT ROUND(AVG(cm.meta_value),2) as avg
FROM $wpdb->commentmeta as cm
JOIN $wpdb->comments as c
ON cm.comment_id = c.comment_ID
WHERE c.comment_post_ID IN ($post_id) AND cm.meta_key = 'price'
" );
$price = $price ?: 0;
wp_cache_add( $post_id, $price, 'post_avg_price' );
}
}
return $price;
}
Почему не сохраняются цифры с дробью - 4,5 и тд? Подскажите, как исправить?
Ответы (1 шт):
Автор решения: Darth KYL
→ Ссылка
перед сохранением данных вы используете intval которая приводит значение к целому числу, замените ее на floatval
add_action('comment_post', function ($comment_id) {
if (!empty($_POST['price'])) {
$price = floatval($_POST['price']);
add_comment_meta($comment_id, 'price', $price);
}
});
add_action('edit_comment', function($comment_id) {
if (!isset($_POST['extend_comment_update']) || ! wp_verify_nonce($_POST['extend_comment_update'], 'extend_comment_update')) return;
if(!empty($_POST['price'])) {
$price = floatval($_POST['price']);
update_comment_meta( $comment_id, 'price', $price );
} else {
delete_comment_meta( $comment_id, 'price');
}
});