Tim Darío
En una pantalla de wordpress, utilicé el esc_html__()
método para escapar de la cadena y agregar variables para un uso seguro en la salida HTML.
Mi código es el siguiente:
<?php
global $product, $post;
$posts_id = $product->get_id();
$reserve_price = get_post_meta($posts_id, '_auction_reserved_price', true);
if ($product->is_reserved() === true && $product->is_reserve_met() === false) : ?>
<p class="reserve hold" data-auction-id="<?php echo esc_attr( $product->get_id() ); ?>">
<?php echo apply_filters('reserve_bid_text', esc_html__('Reserve price has not been met, needed to enter $ %s or more', 'wc_simple_auctions', $reserve_price)); ?>
</p>
<?php endif; ?>
Pero mi variable no muestra el valor final, la cadena de salida que obtengo es esta:
lo intenté antes $reserve_price
es una variable no vacía, pero esc_html__() no muestra la información correcta en la página.
No estoy muy seguro acerca de esta razón.
“Lo intenté antes de que $reserve_price sea una variable no vacía, pero esc_html__() no muestra la información correcta en la página”.
No se puede utilizar marcadores de posición en esc_html__()
función. Solo recupera la traducción de un texto dado y lo escapa para un uso seguro en la salida HTML. Lo que significa que podrías usarlo para:
- Escape de marcas html + traducción
Sin embargo, si necesita:
- Marcas de escape html + traducción + marcador(es) de posición
Entonces podrías usar la combinación de esc_html
, sprintf
y __()
funciones, así:
$test_value="<strong>5.7<strong>";
echo esc_html(
sprintf(
__('This is a test for %s', 'your-text-domain'),
$test_value
)
)
Lo que generará esto:
Y si el texto proporcionado no tiene ninguna etiqueta html, sería algo como esto:
$test_value = 5.7;
echo esc_html(
sprintf(
__('This is a test for %s', 'your-text-domain'),
$test_value
)
)
Ahora, si aplicamos los mismos principios a su fragmento, sería algo como esto:
<p class="reserve hold" data-auction-id='<?php echo esc_attr($product->get_id()); ?>'>
<?php
echo apply_filters(
'reserve_bid_text',
esc_html(
sprintf(
__('Reserve price has not been met, needed to enter $ %s or more', 'wc_simple_auctions'),
$reserve_price
)
)
);
?>
</p>
¡Avísame si pudiste hacerlo funcionar!
-
Gracias, puedo generar el contenido normalmente después de usar sprintf().
– Tim Darío
2 de diciembre de 2021 a las 15:37
Lea siempre la documentación. desarrollador.wordpress.org/reference/functions/esc_html__
– miken32
1 de diciembre de 2021 a las 23:27