Trabajar con números en ACF (Advanced Custom Fields) en WordPress puede ser un dolor de cabeza cuando necesitamos mostrar los valores con un formato específico. Dependiendo del contexto, es posible que queramos agregar separadores de miles, definir la cantidad de decimales o incluso eliminar los ceros innecesarios. Afortunadamente, aprender a formatear números en ACF y WordPress con PHP nos brinda la solución para personalizar cómo se presentan estos valores en nuestro sitio web. En este artículo, te mostraré cuatro formas de hacerlo, para que puedas elegir la que mejor se adapte a tu proyecto.
Formatear números con punto como separador de miles
<pre class="wp-block-syntaxhighlighter-code">
add_filter('acf/format_value/type=number', 'format_all_acf_numbers', 10, 3);
add_filter('acf/format_value/type=range', 'format_all_acf_numbers', 10, 3); // Optional: Include range fields if needed
function format_all_acf_numbers($value, $post_id, $field) {
// Check if the value is numeric
if (is_numeric($value)) {
// Format the number with . as the thousands separator and no decimals
return number_format($value, 0, ',', '.');
}
// Return the original value if it's not a number
return $value;
}
</pre>
Este código utiliza el filtro acf/format_value/type=number
para modificar la forma en que ACF muestra los valores numéricos. La función number_format()
se encarga de aplicar el formato, agregando un punto como separador de miles y eliminando los decimales. Así, un número como 10000
se mostrará como 10.000
.
Formatear números con punto para miles y coma para decimales (máximo 3 decimales)
<pre class="wp-block-syntaxhighlighter-code">
add_filter('acf/format_value/type=number', 'format_all_acf_numbers', 10, 3);
add_filter('acf/format_value/type=range', 'format_all_acf_numbers', 10, 3); // Optional: Include range fields if needed
function format_all_acf_numbers($value, $post_id, $field) {
// Check if the value is numeric
if (is_numeric($value)) {
// Format the number with . as the thousands separator and , for decimals
return number_format($value, 3, ',', '.');
}
// Return the original value if it's not a number
return $value;
}
</pre>
Este código usa la función number_format()
para formatear los números en ACF, colocando un punto como separador de miles y una coma para los decimales, con un máximo de tres decimales. Así, un número como 1234.5678
se mostrará como 1.234,568
.
Eliminar los decimales si son cero
<pre class="wp-block-syntaxhighlighter-code">
add_filter('acf/format_value/type=number', 'format_all_acf_numbers', 10, 3);
add_filter('acf/format_value/type=range', 'format_all_acf_numbers', 10, 3); // Optional: Include range fields if needed
function format_all_acf_numbers($value, $post_id, $field) {
// Check if the value is numeric
if (is_numeric($value)) {
// Si el número es entero, lo mostramos sin decimales
if (floor($value) == $value) {
return number_format($value, 0, ',', '.');
} else {
// Si tiene decimales, mostramos hasta 3 y usamos , para decimales y . para miles
return number_format($value, 3, ',', '.');
}
}
// Return the original value if it's not a number
return $value;
}
</pre>
Este código verifica si el número es entero o tiene decimales. Si el número no tiene decimales (floor($value) == $value
), se muestra sin decimales y con punto como separador de miles. Si tiene decimales, se muestran hasta 3, usando la coma como separador decimal y el punto para miles. Por ejemplo:
1000.00
se mostrará como1.000
1234.567
se mostrará como1.234,567
Eliminar dinámicamente los ceros decimales innecesarios
<pre class="wp-block-syntaxhighlighter-code">
add_filter('acf/format_value/type=number', 'format_all_acf_numbers', 10, 3);
add_filter('acf/format_value/type=range', 'format_all_acf_numbers', 10, 3); // Optional: Include range fields if needed
function format_all_acf_numbers($value, $post_id, $field) {
// Check if the value is numeric
if (is_numeric($value)) {
// Redondear a 3 decimales máximo
$formattedValue = number_format($value, 3, ',', '.');
// Eliminar ceros innecesarios después de la coma
$formattedValue = rtrim($formattedValue, '0'); // Quita ceros al final
$formattedValue = rtrim($formattedValue, ','); // Si queda una coma al final, la elimina
return $formattedValue;
}
// Return the original value if it's not a number
return $value;
}
</pre>
Este código formatea el número con un máximo de 3 decimales y utiliza la coma como separador decimal y el punto para los miles. Luego, elimina dinámicamente los ceros innecesarios a la derecha de los decimales. Si todos los decimales son ceros, se elimina la coma también.
Ejemplos:
1000.000
se mostrará como1.000
1234.500
se mostrará como1.234,5
9876.543
se mostrará como9.876,543
Conclusión
Y así es como podemos formatear números en ACF y WordPress con PHP de diversas formas, adaptándolos a nuestras necesidades de presentación. Con unos simples ajustes en el código, puedes personalizar completamente cómo se muestran los valores numéricos en tu sitio web.
Recuerda que todo este proceso está basado en PHP, lo que te permite tener un control total sobre cómo se manejan los datos en tu sitio WordPress. Si te ha gustado este tutorial y quieres aprender más sobre cómo optimizar tu trabajo con ACF, PHP y otras herramientas útiles en WordPress, te invito a visitar mi blog en elchimo.com y seguirme en mis redes sociales. ¡Sigue aprendiendo y mejorando tu desarrollo web!
¡Nos vemos en el próximo artículo! 🚀