verifique el código corto en publicaciones / páginas Y widgets Y archivos de plantilla

2

Para la próxima versión de mi complemento www.mapsmarker.com, me gustaría enviar los archivos css y js de los complementos solamente si se utiliza el shortcode [mapsmarker ...]. Para publicaciones / y páginas ya encontré este código de trabajo:

function lmm_detect_shortcode()
{
    global $post;
    $pattern = get_shortcode_regex();
    preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches );

    if( is_array( $matches ) && array_key_exists( 2, $matches ) && in_array( 'mapsmarker', $matches[2] ) )
    {
        echo 'shortcode is used';
    }
}
add_action( 'wp', 'lmm_detect_shortcode' );

El problema es que los mapas también se pueden incrustar en widgets (por shortcode) o archivo de plantilla directamente usando la función do_shortcode () (http://www.mapsmarker.com/docs/how-to-add-maps-to-your-site-using-template-tags/) y el código anterior no verifica, si esto es cierto, lo que hace que el mapa no se muestre.

Como solución alternativa, podría agregar una opción en la configuración del complemento si los archivos js / css solo se deben agregar cuando el código corto se agrega a una publicación o página y agrega la descripción, para deshabilitar esta configuración si se agrega un mapa a los widgets a través de shortcode o a los archivos de plantilla a través de do_shortcode ().

Como esta no es una solución bastante utilizable (lo que resultaría en algunas solicitudes de soporte a largo plazo), estoy buscando para una solución, donde puedo activar esta función de forma predeterminada y no tengo que agregar una opción a la configuración, porque el código también comprueba si se agrega un shortcode en los widgets o mediante do_shortcode () en uno de los archivos de plantilla, como este:

....
if( ( is_array( $matches ) && array_key_exists( 2, $matches ) && in_array( 'mapsmarker', $matches[2] ) ) || ( CHECK IF SHORTCODE USED IN WIDGETS == TRUE ) || ( CHECK IF SHORTCODE USED IN TEMPLATE FILES == TRUE ) )
{
    echo 'shortcode is used';
}
.....

Mi primer enfoque a este problema fue verificar las variables globales y ver si de alguna manera podría filtrar este código agregado, por ejemplo. por $ wp_filter (array): una matriz multidimensional de todas las funciones que se han agregado a los filtros / enlaces. Desafortunadamente no encontré una solución todavía. Cualquier ayuda es apreciada!

    
pregunta robertharm 31.01.2012 - 08:47

1 respuesta

4

Alguien puede corregirme, pero creo que a partir de la Versión 3.3 puedes poner en cola los scripts y los estilos "en línea" de una publicación.

Significa: puedes agregar tu wp_enqueue_script / style dentro de tu función de shortcode y WordPress los agregará al pie de página ... ya que es demasiado tarde para agregarlos al encabezado.

Medios: simplemente funcionará cuando se llame el código abreviado.

Editar: en respuesta al comentario de Nick a continuación sobre dónde agregar la función de puesta en cola: Hice una prueba rápida con el código abreviado de ejemplo del códice:

function caption_shortcode( $atts, $content = null ) {
    wp_enqueue_script('myscript','nonexistinglocation');
    wp_enqueue_style('mystyle','throwmeanerror');
    return '<span class="caption">' . $content . '</span>';
}

Lo probé en el contenido de la publicación y el widget de texto y funcionó hasta ahora (sin tener en cuenta las URL no válidas) Las funciones deben llamarse antes de la devolución, por supuesto (y sí, hágalo de la manera correcta y registre su script y estilos de antemano [ perezoso ])

    
respondido por el ungestaltbar 31.01.2012 - 11:04

Lea otras preguntas en las etiquetas