Explicación de la función apply_filters y sus variables.

16

Estoy aprendiendo cómo construir formularios html usando PHP tomando un ejemplo del complemento "registro de formulario más simple".

Estoy mirando este código:

$form .= apply_filters('simplr-reg-instructions', __('Please fill out this form to sign up for this site', 'simplr-reg'));

¿Puede explicar qué es lo que está sucediendo aquí? ¿Qué hace la función? ¿Por qué es necesaria la 'simplr-reg-instrucciones' y 'simplr-reg'?

¿Por qué esta línea no puede ser simplemente:

$form .= 'Please fill out this form to sign up for this site' ;

He leído la referencia de función pero aún no puedo entenderlo.

Ceniza
fuente

Respuestas:

22

Esa línea está usando dos funciones diferentes que necesitan dos explicaciones separadas.

__ ()

Esta es una función de traducción. Si la configuración se realiza correctamente, traducirá el primer parámetro de una lista de cadenas pretraducidas. Si una instalación tiene un archivo con una traducción compilada para que esta función la use, la usará. Por supuesto, el complemento tiene que empaquetar su propia traducción, de ahí el segundo parámetro. simplr-regdice __()que la traducción de la cadena 'Please fill out this form to sign up for this site'debe estar en el archivo de traducción asociado 'simplr-reg'(esto se hace anteriormente en el complemento mediante la load_plugin_textdomain()función).

La función luego devuelve la traducción. Si no hay traducción para devolver (por ejemplo, el idioma actual no tiene una traducción compilada, la cadena no tiene una traducción compilada para ese paquete, etc.), se devuelve la entrada original.

Entonces, para un sitio de WordPress en inglés, __( 'This', 'simplr-reg' )es funcionalmente igual que 'This'. Para obtener más información sobre l10n (Localización), léalo en el códice:

http://codex.wordpress.org/I18n_for_WordPress_Developers

apply_filters ()

Esta función le permite filtrar los valores utilizados por el complemento según sea necesario. Este es uno de los conceptos principales para comprender como desarrollador de complementos. WordPress se extiende a través de ganchos, que son básicamente puntos de acceso que le permiten cronometrar la ejecución de las acciones de su complemento y / o manipular información / datos que WordPress usa, etc.

Para manipular datos como el fragmento de código sobre el que ha preguntado, usaría la función add_filter(). Aquí hay un ejemplo básico de cómo funciona esto:

add_filter( 'simplr-reg-instructions', 'wpse16573_my_filter' );

Probablemente reconocerás el primer argumento allí. Es el mismo usado add_filteranteriormente. Este es el nombre del gancho. El segundo argumento es la devolución de llamada del filtro. Debe ser una devolución de llamada válida a una función ( lea más sobre las devoluciones de llamada aquí ). Esa línea de código dice "Cuando 'simplr-reg-instructions'se ejecuta el enlace, ejecute la función con la devolución de llamada que proporcioné". apply_filters()ejecuta el gancho encontrado en su primer argumento, que significa esencialmente "ejecutar todas las funciones registradas para este gancho". apply_filtersluego pasa todos los demás argumentos (en este caso 'Please fill out this form to sign up for this site') a las funciones en ese filtro. Entonces, la devolución de llamada que usé anteriormente debería verse así:

function wpse16573_my_filter( $text ){
  $text = "<strong>$text</strong>";
  return $text;
}

Hay dos tipos de ganchos en WordPress: filtros (el tipo que estamos usando aquí) y acciones. La principal diferencia entre los dos es que los filtros esperan que devuelva algo y las acciones no. Entonces, para este filtro, mi ejemplo anterior agrega un poco de html 'Please fill out this form to sign up for this site'y lo devuelve.

Lea más sobre acciones y ganchos aquí:

http://codex.wordpress.org/Plugin_API

John P Bloch
fuente
John, muchas gracias. ¡Gran respuesta! Pero me parece que no puede encontrar ni siquiera uno "( 'add_filter simplr-REG-instrucciones', ..." en línea de los archivos de plugin ¿Cómo puede la apply_filter plazo que.?
Ash
1
Si no hay filtros agregados a un enlace, solo devuelve la entrada original de vuelta. El filtro no está allí para que lo use el plugin, está ahí para que pueda usarlo si lo necesita / lo desea, de modo que no tenga que modificar el complemento en sí.
John P Bloch
+1 Excelente explicación - Lee como los documentos deberían ;-)
Eddie B
+1 Gran respuesta, exactamente lo que estaba buscando, me estaba confundiendo mucho pero ahora todo está muy claro;)
doz87
5

Tienes dos funciones diferentes aquí apply_filtersy__()

La función apply_filters es la forma en que WordPress le permite cambiar / editar el valor de las variables utilizando sus propias funciones de devolución de llamada y la add_filterfunción. acepta muchos argumentos pero los importantes son los dos primeros:

$something = apply_filters( $tag, $value, $var ... );

$ tag es el nombre del gancho de filtro que se usa, por add_filterejemplo, en :

add_filter($tag,callback_function);

$ value es el valor real que podrá cambiar o editar.

$ var son variables que su función de devolución de llamada puede usar, una o más.

__() La función se utiliza para las traducciones:

__($message,$text_domain);

$ mensaje es el mensaje real para traducir.

$ text_domain es la etiqueta de dominio de texto utilizada para cargar el complemento o la traducción del tema con load_plugin_textdomain()

¿Que hace?

Busca en el módulo de localización la traducción de $ message y pasa la traducción a la declaración de retorno de PHP. Si no se encuentra ninguna traducción para $ message, solo devuelve $ message.

Así que ahora las dos funciones en su caso funcionan de la misma manera, apply_filters enviará a cualquier función de devolución de llamada asociada con el enlace de simplr-reg-instructionsfiltro el valor traducido (si existe) de 'Complete este formulario para registrarse en este sitio' usando el texto- dominio desimplr-reg

Bainternet
fuente
Bainternet, muchas gracias! ¿Cómo es que no puedo encontrar ningún "add_filter ( 'simplr-REG-instrucciones'," líneas en los archivos del plugin?
Ash
Es un gancho que queda para los desarrolladores que desean ampliar o filtrar la funcionalidad de los complementos.
Bainternet
¿Entonces no se espera add_filter aquí? No entiendo por qué. ¿No debería apply_filters ejecutar todas las funciones asociadas con su enlace por las funciones add_filter?
Ash
apply_filterses un add_filtermarcador de posición que le permite conectar sus propias funciones utilizando , por lo que no se espera add_filter a menos que agregue las suyas propias
Bainternet