¿Qué representa el token %1$s en WordPress?
He visto el token %1$s y otros similares con más frecuencia en el código de WordPress últimamente, pero no logro entender qué significa. Aquí un ejemplo:
sprintf( __( '%1$s está obsoleto. Use %2$s en su lugar.' ),
¿Alguien sabe qué significa?

Lee la documentación de PHP sobre sprintf().
%s
es simplemente un marcador de posición para una cadena de texto%d
es simplemente un marcador de posición para un número
Así que un ejemplo de sprintf se vería así:
$variable = sprintf(
'El %s corrió por la %s', // Cadena con marcadores de posición
'perro', // Se coloca en el primer marcador %s
'calle' // Se coloca en el segundo marcador %s
);
Lo cual devolverá una cadena a nuestra variable $variable
:
El perro corrió por la calle
Al numerar los marcadores de posición, es una forma amigable para el desarrollador de identificar rápidamente qué cadena seguirá en cada lugar. También nos permite reutilizar una cadena. Veamos otro ejemplo con marcadores numerados:
$variable = sprintf(
'El %1$s corrió por la %2$s. La %2$s estaba hecha de %3$s', // Cadena con marcadores de posición
'perro', // Siempre se usará en el marcador %1$s
'calle', // Siempre se usará en el marcador %2$s
'grava' // Siempre se usará en el marcador %3$s
);
Lo cual devolverá una cadena a nuestra variable $variable
:
El perro corrió por la calle. La calle estaba hecha de grava
Finalmente, la función __()
nos permite traducir las cadenas que se le pasan. Al pasar marcadores de posición a __()
y luego pasar toda esa cadena a sprintf()
, podemos traducir lo que se pase a la función de traducción, lo que nos permite hacer que nuestra cadena y aplicación sean un poco más dinámicas.

No es algo específico de WordPress, es algo de PHP. %1$s
, %2$s
, etc., son marcadores de posición para variables en una cadena formateada devuelta por sprintf()
(o impresa por printf()
).
El 1$
indica que es la primera variable, 2$
sería la segunda, y así sucesivamente. La s
indica que es una variable de tipo string (cadena de texto). Existen otras opciones (por ejemplo, d
indicaría un número entero).
El ejemplo que das está incompleto: sin duda es algo así en su totalidad:
sprintf( __( '%1$s está obsoleto. Usa %2$s en su lugar.' ),
$string_1,
$string_2 );
