Stack Overflow en español Asked by rafael gerardo on December 9, 2021
espero vuestra ayuda. Me he encontrado con una web que posee una estructura que no me es nada familiar. Se trata de una supuestamente tabla, pero me es incomprensible e imposible modificarlo. Por favor, ¿Me pueden decir de qué se trata este código para mirar alguna documentación?. Gracias.
En Wordpress eso se conoce como shortcode (cuya traducción literal sería código corto o código abreviado).
Se trata de una API, como lo define la propia documentación, te pongo aquí parte de la documentación traducida, ya que no existe versión en castellano:
La API Shortcode es un conjunto simple de funciones para crear códigos abreviados de WordPress para usar en publicaciones y páginas. Por ejemplo, el siguiente shortcode (en el cuerpo de una publicación o página) agregaría una galería de fotos de imágenes adjuntas a esa publicación o página:
[gallery]
La API permite a los desarrolladores de complementos crear tipos especiales de contenido (por ejemplo, formularios, generadores de contenido) que los usuarios pueden adjuntar a ciertas páginas agregando el código abreviado correspondiente en el texto de la página.
La API Shortcode facilita la creación de códigos cortos que admiten atributos como este:
[gallery id="123" size="medium"]
La API maneja todo el análisis complicado, eliminando la necesidad de escribir una expresión regular personalizada para cada shortcode. Se incluyen funciones de ayuda para configurar y recuperar atributos predeterminados. La API admite códigos cortos de cierre automático y de cierre.
Como inicio rápido para aquellos que tienen prisa, he aquí un ejemplo mínimo del código PHP requerido para crear un código corto (shortcode):
//[foobar]
function foobar_func( $atts ){
return "foo and bar";
}
add_shortcode( 'foobar', 'foobar_func' );
Esto creará un shortcode [foobar]
que retornará la cadena "foo and bar"
Veamos un ejemplo con atributos:
// [bartag foo="foo-value"]
function bartag_func( $atts ) {
$a = shortcode_atts( array(
'foo' => 'something',
'bar' => 'something else',
), $atts );
return "foo = {$a['foo']}";
}
add_shortcode( 'bartag', 'bartag_func' );
Esto crea un código corto [bartag]
que admite dos atributos: ["foo" y "bar"]
. Ambos atributos son opcionales y tomarán las opciones predeterminadas [foo = "something" bar = "algo más"]
si no se proporcionan. El shortcode retornará foo = {el valor del atributo foo}
.
Los códigos cortos se escriben proporcionando una función de controlador. Los controladores de shortcode son muy similares a los filtros de WordPress: aceptan parámetros (atributos) y devuelven un resultado (la salida de shortcode).
Los nombres de shortcodes deben estar en minúsculas y se pueden usar todas las letras, pero los números y guiones bajos también deberían funcionar bien. Ten cuidado con el uso de guiones (guiones), será mejor que no los uses.
La función add_shortcode
se utiliza para registrar un controlador de shortcode. Toma dos parámetros: el nombre del shortcode (la cadena utilizada en el cuerpo de una publicación) y el nombre de la función de devolución de llamada.
Se pasan tres parámetros a la función de devolución de llamada de shortcode. Puedes elegir usar cualquier número de ellos, incluido ninguno.
$atts
: una matriz asociativa de atributos o una cadena vacía si no se proporcionan atributos$content
: el contenido adjunto (si el shortcode se usa en su forma adjunta)$tag
: la etiqueta de código corto, útil para funciones de devolución de llamada compartidasLa llamada a la API para registrar el controlador de shortcode se vería así:
add_shortcode( 'myshortcode', 'my_shortcode_handler' );
Cuando se muestra the_content
, la API de shortcode analizará cualquier shortcode registrado como "[myshortcode]
", separará y analizará los atributos y el contenido, si corresponde, y les pasará la función correspondiente del controlador de shortcode. Cualquier cadena devuelta (sin echo
) por el controlador de shortcode se insertará en el cuerpo de la publicación en lugar del shortcode mismo.
Los atributos de shortcode se ingresan así:
[myshortcode foo="bar" bar="bing"]
Estos atributos se convertirán en una matriz asociativa como la siguiente, que se pasará a la función del controlador como su parámetro $atts
:
array( 'foo' => 'bar', 'bar' => 'bing' )
Las claves de la matriz son los nombres de los atributos; Los valores de la matriz son los valores de atributo correspondientes. Además, la entrada cero ($atts[0]
) contendrá la cadena que coincide con la expresión regular de código corto, pero SOLO SI es diferente del nombre de devolución de llamada. Vea la discusión de los atributos, a continuación.
La matriz sin procesar $atts
puede incluir cualquier atributo arbitrario especificado por el usuario. (Además, la entrada cero de la matriz puede contener la cadena que fue reconocida por la expresión regular; consulta la nota a continuación).
Para ayudar a establecer los valores predeterminados para los atributos faltantes y eliminar los atributos que tu shortcode no reconoce, la API proporciona una función shortcode_atts()
.
shortcode_atts()
se parece a la función wp_parse_args
, pero tiene algunas diferencias importantes. Sus parámetros son:
shortcode_atts( $defaults_array, $atts );
Se requieren ambos parámetros. $defaults_array
es una matriz asociativa que especifica los nombres de atributos reconocidos y sus valores predeterminados. $atts
es la matriz de atributos sin procesar que se pasa al controlador de shortcode. shortcode_atts()
devolverá una matriz normalizada que contiene todas las claves de $defaults_array
, completadas con valores de la matriz $atts
si está presente. Por ejemplo:
$a = shortcode_atts( array(
'title' => 'My Title',
'foo' => 123,
), $atts );
Si $atts
contuviera una matriz ('foo' => 456, 'bar' => 'something')
, la $a
resultante sería matriz ('title' => 'My Title', 'foo' => 456)
. El valor de $atts['foo']
sobre-escribe el valor predeterminado de 123
. $atts['title']
no está establecido, por lo que se usa el valor predeterminado 'My Title'
. No hay ningún elemento 'bar'
en la matriz predeterminada, por lo que no se incluye en el resultado.
Los nombres de los atributos siempre se convierten en minúsculas antes de pasarlos a la función de controlador. Los valores permanecen intactos. [myshortcode FOO="BAR"]
produce $atts = array ('foo' => 'BAR')
.
Un código de idioma sugerido para declarar valores predeterminados y analizar atributos en un controlador de código corto es el siguiente:
function my_shortcode_handler( $atts, $content = null ) {
$a = shortcode_atts( array(
'attr_1' => 'attribute 1 default',
'attr_2' => 'attribute 2 default',
// ...etc
), $atts );
}
Esto analizará los atributos, establecerá valores predeterminados, eliminará los atributos no compatibles y almacenará los resultados en una variable de matriz local denominada $a
con los atributos como claves: $a['attr_1']
, $a['attr_2']
... En otras palabras, la matriz de valores predeterminados se aproxima a una lista de declaraciones de variables locales.
Ver la documentación oficial para otro tipo de información más avanzado de shortcode...
Creo que con esto ya tienes una idea de la potencialidad de shortcode y cómo funciona.
En el enlace original hay más detalles que deberías leer, sobre todo si vas a trabajar con shortcode (programándolos o modificándolos). Cabe decir que los shortcode no son exclusivos de plugins, puedes programar tus propios shortcodes sin necesidad de ningún plugin. Con que lo registres en functions.php
o en el archivo donde se registran las funciones según tu tema o framework, el shortcode funcionará.
En mi sitio los uso mucho, me han servido por ejemplo para automatizar muchísimo contenido o para crear una pasarela entre mis páginas o posts de Wordpress y mi servidor. Con un shortcode te puedes abrir paso a código de servidor con suma facilidad (recuerdo que cuando empecé con WP tuve que instalar un plugin para poder escribir funciones de PHP en mis plantillas Wordpress ... en esa época ignoraba la existencia de shortcode y estoy encantando de haberlos conocido).
Answered by A. Cedano on December 9, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP