apply_filters ('the_content', $ content) vs do_shortcode ($ content)

21

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ál será la mejor práctica 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 detalles. Desarrollo temas para clientes con sus requerimientos. A veces, necesito agregar metadatos 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, uso la opción 1 . Ahora, escuché de alguien que esta es una manera incorrecta, y debería usarla do_shortcode. Pero no me dieron una explicación de por qué está mal. Por eso estoy preguntando.

Todo este proceso se puede hacer 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.

тнє Sufi
fuente

Respuestas:

16

PREGUNTA Y RESPUESTA REVISADA

A veces hay estas preguntas que te molestan y te persiguen más tarde en la vida nuevamente, 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 meta cuadros están allí para almacenar pequeñas piezas de metadatos, y no para actuar como una extensión para publicar contenido donde puede ejecutar shortcode y funciones. Además, como ya dije, su método es incorrecto y no debe usarse

Lo que encontré interesante en tu publicación es que usaste campos personalizados y meta cuadros para mostrar inadvertidamente contenido personalizado de la entrada del usuario. Así que me senté y pensé en una posible forma de hacer que esto funcione y usar los datos de campo personalizados y los datos de meta box correctamente

Esta es mi idea:

EL ESCENARIO:

NOTA: Esto se puede modificar para adaptarse a cualquier necesidad.

En una sola publicación, un usuario quiere / 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é quiera

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 do_shortcodefuncionará, ya que no es dinámico y está codificado, algo que no queremos. Como en su pregunta, vamos a hacer uso de campos personalizados. Una vez más, enfatizo, 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, lo que hacemos es crear 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 3 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 ahora debe ingresar 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. Lo que se necesita aquí, necesitamos obtener el valor de nuestro campo personalizado, que en realidad son nuestros argumentos de consulta, y alimentarlo a una nueva instancia WP_Querypara recuperar las publicaciones. También debemos verificar si realmente tenemos un valor guardado en ese campo personalizado, si el campo personalizado está vacío, no mostrar nada

EL CÓDIGO:

Puedes probar algo como esto en single.php justo después de la publicación individual.

$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 reemplazar el valor original con lo siguiente

'posts_per_page=5&cat=10&orderby=title'

POCAS NOTAS:

Es importante usar la sincronización y el formato correctos al ingresar información en estos campos y meta cuadros personalizados. Los errores de sintaxis o información incorrecta conducirán 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ás tratando de lograr, pero por lo que puedo decirte, 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_autopque agrega etiquetas p athe_content()

apply_filters('the_content', $content); se usa generalmente en conjunción con get_postsdonde uno trabaja directamente con los WP_Postobjetos sin usar, lo setup_postdata( $post )que hace que las etiquetas de plantilla the_content() estén disponibles para su uso

OPCION 2

do_shortcode se usa para agregar un código corto en cualquier parte de los archivos de plantilla fuera del editor de texto en la parte posterior de la pantalla del editor de página, básicamente filtrando códigos cortos a través de sus ganchos.

El uso correcto es el siguiente

Ejemplo: agregar el shortcode de la galería en un archivo de plantilla

echo do_shortcode( '[gallery]' )

EDITAR 1

Por sus comentarios, 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 do_shortcodede un archivo de plantilla, prefiero simplemente agregar la función a la plantilla

Ejemplo:

Si tiene la siguiente función de shortcode

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 shortcode

EDITAR 2

Para ser honesto aquí, estás haciendo esto completamente mal desde tu edición. Por eso no pude entender tu pregunta inicial

A veces, necesito agregar meta meta 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, 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, de hecho, 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 aplicarse para aplicar formato al contenido de la publicación sin formato.

Tu tienes dos opciones aquí

  • Úselo do_shortcodedirectamente en archivos de plantilla, lo cual no recomendaría ya que usar la función es más rápido ya que no es necesario analizar el shortcode

  • Use el shortcode directamente en el editor de texto para la página / publicación en particular

Le recomendaría seriamente que eche un nuevo vistazo a sus estructuras y lo que desea lograr. Los campos personalizados no son editores de texto y no pueden ejecutar códigos cortos o controles deslizantes.

Mi recomendación sería buscar quizás widgets personalizados o un sistema que pueda usar con campos personalizados

Pieter Goosen
fuente
1
Pieter gracias por la explicación. Eso ya lo se. Pero estaba preguntando, qué opción será más precisa si el objetivo es solo generar códigos cortos desde las áreas de meta / tema de publicación. Estoy usando la opción 1 para obtener el contenido filtrado, y se convirtió en un hábito mío. Y usando la opción 1 incluso para imprimir un código corto desde un archivo de texto. Entonces estaba preguntando.
Jueves Sufi
Vi la edición. Tengo tu punto. Pero mi escenario es diferente. Es como, hay un texto archivado / área, y varios códigos cortos. Ahora el usuario puede poner cualquiera de los shortcode / s en esa área. Entonces no puedo usar directamente una función. Necesito mantener esa parte dinámica.
тнє Sufi
¿Dónde está ese campo de texto? ¿Es el mismo que en la pantalla del editor de la página de fondo
Pieter Goosen
Puede ser un post meta. O puede ser una opción de tema. Yo uso el filtro de contenido para ambos.
тнє Sufi
Lo siento, pero nada de esto tiene sentido. ¿Por qué querrías usar códigos cortos en campos personalizados? ¿Por qué incluso usaría shortcodes entonces?
Pieter Goosen el