Use el método esc_html__() para generar una cadena más una variable de marcador de posición en WordPress

2 minutos de lectura

Avatar de usuario de Tim Darius
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:

precio de reserva

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:

ingrese la descripción de la imagen aquí

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
       )
     )

ingrese la descripción de la imagen aquí


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

¿Ha sido útil esta solución?