Pregunta:
Digamos que tengo una opción de tema o un área de texto postmeta personalizada. Ahora quiero ejecutar múltiples códigos cortos, textos generales, imágenes, etc.
¿Cuáles serán las mejores prácticas y por qué?
Opción 1:
$content = //my text area data;
echo apply_filters('the_content', $content);
Opcion 2:
$content = //my text area data;
echo do_shortcode($content);
Por favor, explíqueme cuál será la mejor práctica y por qué.
EDITAR
Permítanme describir el escenario en detalle. Desarrollo temas para clientes con sus requerimientos. A veces, necesito agregar meta de publicación en publicaciones / páginas / tipos de publicaciones personalizadas, para que puedan agregar códigos cortos (control deslizante, formulario de contacto, etc.) o simplemente un texto simple. Es un texto archivado.
Para que el shortcode funcione, utilizo la opción 1 . Ahora, escuché de alguien que esta es una forma incorrecta, y debería usar do_shortcode
. Pero no me dieron una explicación de por qué está mal. Por eso pregunto.
Todo este proceso se puede realizar en el editor de texto predeterminado de wp. Pero necesito crear esas opciones para el uso específico de la plantilla, eso es lo que quieren mis clientes.
Respuesta:
PREGUNTA Y RESPUESTA REVISADAS
A veces hay estas preguntas que lo molestan y lo persiguen más adelante en la vida, y esta es una de esas preguntas.
Esta pregunta me hizo pensar en una solución alternativa al problema. Como ya dije, los campos personalizados y los metaboxes están ahí para almacenar pequeños fragmentos de metadatos y no para actuar como una extensión para publicar contenido donde puede ejecutar códigos cortos y funciones. Además, como ya dije, su método es incorrecto y no debe usarse.
Encontré interesante en tu publicación que usaste campos personalizados y metacuadros para mostrar inadvertidamente contenido personalizado de la entrada del usuario. Así que me senté y pensé en una posible manera de hacer que esto funcionara y usar los datos de campo personalizados y los datos de metabox correctamente.
Esta es mi idea:
EL ESCENARIO:
NOTA: Esto se puede modificar para adaptarse a cualquier necesidad.
En una sola publicación, un usuario desea / requiere mostrar contenido personalizado dinámicamente después de la publicación para satisfacer sus necesidades. Esto debería ser dinámico. El contenido debe ser una consulta personalizada y el usuario debe elegir qué mostrar cuando quiera y qué quiere.
LA POSIBLE SOLUCIÓN:
Los códigos cortos no funcionarán aquí, ya que los códigos cortos no se pueden ejecutar en campos personalizados. Tampoco funcionará do_shortcode
, ya que no es dinámico y está codificado, algo que no queremos. Como en su pregunta, vamos a hacer uso de un campo personalizado. Una vez más insisto, no use el campo personalizado para ejecutar una consulta personalizada o códigos cortos.
EL PLAN:
Usaremos el campo personalizado para guardar solo nuestros argumentos de consulta; eso es todo. Entonces, creamos un campo personalizado llamado custom_query_arguments
. En la pantalla del editor de publicaciones, ahora verá su campo personalizado, listo para usar.
El siguiente paso será agregar nuestros argumentos de consulta personalizados a nuestro campo. Digamos que necesitamos mostrar tres publicaciones de la categoría 1 ordenadas por título. Entonces, nuestros argumentos de consulta deberían verse así ( en formato de cadena ):
'posts_per_page=3&cat=1&orderby=title'
Esto es lo que debe ingresar ahora en su campo personalizado. Una vez ingresado, guarde el valor de su campo personalizado.
Lo siguiente será construir la consulta personalizada en su single.php. Necesitamos obtener el valor de nuestro campo personalizado, que en realidad son nuestros argumentos de consulta, y WP_Query
a una nueva instancia de WP_Query
para recuperar las publicaciones. También necesitamos verificar si realmente tenemos o no un valor guardado en ese campo personalizado, si el campo personalizado está vacío, no muestre nada.
EL CÓDIGO:
Puede probar algo como esto en el archivo single.php justo después de la publicación única.
$args = get_post_meta( get_queried_object_id(), 'custom_query_arguments', true );
// Check if the custom field has a value
if( ! empty( $args ) ) {
$q = new WP_Query( $args );
if( $q->have_posts() ) {
while( $q->have_posts() ) {
$q->the_post();
the_title();
}
wp_reset_postdata();
}
}
Si el usuario desea eliminar la consulta personalizada, simplemente puede eliminar el valor del campo personalizado y dejar el campo personalizado en blanco. Si necesita mostrar la misma consulta, pero de la categoría 10 y un total de 5 publicaciones, puede simplemente reemplazar el valor original con lo siguiente:
'posts_per_page=5&cat=10&orderby=title'
ALGUNAS NOTAS:
Es importante utilizar el formato y la sincronización correctos al ingresar información en estos campos personalizados y metaboxes. Los errores de sintaxis o la información incorrecta darán lugar a resultados no deseados o incluso a errores fatales. Es importante que sus clientes conozcan dicha información.
RESPUESTA ORIGINAL
No entiendo lo que está tratando de lograr, pero por lo que puedo decirle, esas son dos cosas separadas.
OPCIÓN 1
apply_filters('the_content', $content);
se utiliza para aplicar los filtros de contenido al contenido de la publicación sin filtrar sin procesar, que generalmente proviene del uso de $post->post_content
. Estos filtros incluyen el famoso filtro wp_autop
que agrega etiquetas p
a the_content()
apply_filters('the_content', $content);
generalmente se usa junto con get_posts
donde se trabaja directamente con los objetos WP_Post
sin usar setup_postdata( $post )
que hace que las etiquetas de plantilla como the_content()
estén disponibles para su uso.
OPCION 2
do_shortcode
se usa para agregar un shortcode en cualquier lugar de los archivos de plantilla fuera del editor de texto en el back-end de la pantalla del editor de página, básicamente filtrando shortcodes a través de sus ganchos.
El uso correcto es el siguiente.
Ejemplo: agregar el código corto de la galería en un archivo de plantilla
echo do_shortcode( '' )
EDITAR 1
Por sus comentarios, entonces no usaría un shortcode en absoluto.
Si no va a agregar un shortcode a través del editor de texto y lo va a agregar directamente (hardcode) a través de do_shortcode
en un archivo de plantilla. Preferiría simplemente agregar la función a la plantilla.
Ejemplo:
Si tiene la siguiente función de código abreviado,
function footag_func( $atts ) {
return "foo = {$atts['foo']}";
}
add_shortcode( 'footag', 'footag_func' );
Simplemente puede llamar a la función directamente en una plantilla como:
echo footag_func();
Es mucho más rápido de esta manera ya que no es necesario analizar el código corto.
EDITAR 2
Para ser honesto, estás haciendo esto completamente mal desde tu edición. Por eso no pude entender tu pregunta inicial.
A veces, necesito agregar meta de publicación en publicaciones / páginas / tipos de publicaciones personalizadas, para que puedan agregar códigos cortos (control deslizante, formulario de contacto, etc.) o simplemente un texto simple. Es un campo de texto.
Para que el shortcode funcione, uso la opción 1 …..
Los campos personalizados no son campos de texto y seguramente no están destinados a ser utilizados para ejecutar códigos cortos y, para el caso, controles deslizantes o formularios de contacto. Los campos personalizados nunca deben usarse para reemplazar el editor de texto en publicaciones y páginas.
Como dije antes, apply_filters('the_content', $content);
está destinado a ser utilizado para aplicar formato al contenido de la publicación sin procesar.
Tu tienes dos opciones aquí
-
Use
do_shortcode
directamente en archivos de plantilla, que no recomendaría ya que usar la función es más rápido ya que no es necesario analizar el shortcode. -
Use el código abreviado directamente en el editor de texto para la página / publicación en particular
Recomendaría seriamente que revisara sus estructuras y lo que quiere lograr. Los campos personalizados no son editores de texto y no pueden ejecutar códigos cortos ni controles deslizantes.
Mi recomendación sería buscar en widgets personalizados o en un sistema que pueda usar con campos personalizados.