tl; dr: mi complemento quiere traducir cadenas del núcleo u otros complementos que utilicen _n_noop (). ¿Cómo?
Esta pregunta está relacionada con este complemento y es una especie de seguimiento hasta esta pregunta .
Mi complemento agrega "{estado} (n)" (por ejemplo, "Borradores (10)") a los menús de administración para cualquier tipo de publicación. Admite cualquier estado de publicación agregado con register_post_status()
porque captura todos los estados con la función get_post_stati()
(no el get_post_statuses()
similarmente irritante).
Cuando alguien registra un estado de publicación con register_post_status()
, uno incluye un valor label_count
en el $args
que es perfecto para lo que necesito. Siempre me gustaría mostrar el recuento de etiquetas plural en el menú y usar sprintf()
para eliminar el valor del recuento.
Aquí hay un extracto truncado del código del complemento actual (ese primer sprintf()
es lo que estoy buscando cambiar):
<?php
// an array of all the statuses
$ps_statuses = get_post_stati( array( 'show_in_admin_status_list' => true ), 'objects' );
// a filter for the list of statuses for anything people want to do that's plugin specific
$ps_statuses = apply_filters( 'psmi_statuses', $ps_statuses );
// Get status counts of all post types
$ps_status_counts = wp_count_posts( $ps_type_id );
foreach( $ps_statuses as $status ) {
$ps_status_id = $status->name;
$ps_status_count = $ps_status_counts -> $ps_status_id;
// If a status has any posts, show it
if( $ps_status_count > 0 ) {
// Get the plural post status label
$ps_status_label = $status->label_count['plural'];
$submenu[$menu][] = array(
sprintf(
$ps_status_label,
$ps_status_count
),
'read',
sprintf(
'%1$sedit.php?post_status=%2$s&post_type=%3$s',
get_admin_url(),
$ps_status_id,
$ps_type_id
)
);
}
}
Esto funciona bien, pero no es traducible.
Puedo ver que cuando WordPress registra la publicación stati en el núcleo (en /wp-includes/post.php
) , utiliza la función _n_noop()
para permitir traducciones plurales:
register_post_status( 'draft', array(
'label' => _x( 'Draft', 'post' ),
'protected' => true,
'_builtin' => true, /* internal use only. */
'label_count' => _n_noop( 'Draft <span class="count">(%s)</span>', 'Drafts <span class="count">(%s)</span>' ),
) );
Sin embargo, no he podido averiguar cómo hacer funcionar la cadena traducida. Creo que necesito usar translate_nooped_plural()
, pero no he podido hacer que eso funcione (y realmente, solo quiero usar la cadena plural incluso si solo hay una publicación en un estado). En segundo lugar, realmente pierdo el dominio de texto que debo usar porque los estados podrían provenir de Core, una llamada personalizada o register_post_status()
, o un flujo de edición similar a un plugin.