Necesitaba una forma de filtrar el contenido de una página / publicación antes de que se cargara para poder agregar scripts al encabezado si hubiera un shortcode específico. Después de mucho buscar me encontré con esto en http://wpengineer.com
function has_my_shortcode($posts) {
if ( empty($posts) )
return $posts;
$found = false;
foreach ($posts as $post) {
if ( stripos($post->post_content, '[my_shortcode') )
$found = true;
break;
}
if ($found){
$urljs = get_bloginfo( 'template_directory' ).IMP_JS;
wp_register_script('my_script', $urljs.'myscript.js' );
wp_print_scripts('my_script');
}
return $posts;
}
add_action('the_posts', 'has_my_shortcode');
que es absolutamente brillante e hizo exactamente lo que necesitaba.
Ahora necesito extenderlo un poco más y hacer lo mismo para las barras laterales. Puede ser por un tipo de widget en particular, código corto, fragmento de código o cualquier otra cosa que funcione para identificar cuándo se necesita cargar el script.
El problema es que no puedo entender cómo acceder al contenido de las barras laterales antes de cargar la barra lateral (el tema en cuestión tendrá varias barras laterales)
widgets
javascript
sidebar
conditional-content
Ashley G
fuente
fuente
Respuestas:
Puede usar la función is_active_widget . P.ej:
Para cargar el script en la página donde solo se carga el widget, deberá agregar el código is_active_widget () en su clase de widget. Por ejemplo, vea el widget predeterminado de comentarios recientes (wp-includes / default-widgets.php, línea 602):
fuente
Solo quería compartir una solución en la que trabajé que me permitió ser un poco más versátil con mi implementación. En lugar de hacer que la función verifique una variedad de códigos cortos, la modifiqué para buscar un código corto único que haga referencia a una función de secuencia de comandos / estilo que necesita ser puesta en cola. Esto funcionará para ambos métodos en otras clases (como complementos que pueden no hacerlo por sí mismos) y funciones dentro del alcance. Simplemente suelte el código a continuación en functions.php y agregue la siguiente sintaxis a cualquier página / publicación donde desee CSS y JS específicos.
Sintaxis de página / publicación: [loadCSSandJS function = "(class-> method / function name)"]
código de functions.php:
Esto también le permitirá agregar tantos como desee en una página. Tenga en cuenta que necesita un método / función para cargar.
fuente
¡Gracias por compartir este consejo! Me dio un poco de dolor de cabeza, porque al principio no estaba funcionando. Creo que hay un par de errores (quizás errores tipográficos) en el código anterior
has_my_shortcode
y reescribí la función de la siguiente manera:Creo que hubo dos problemas principales: el
break
no estaba en el alcance de la declaración if, y eso causó que el ciclo siempre se rompiera en la primera iteración. El otro problema fue más sutil y difícil de descubrir. El código anterior no funciona si el shortcode es lo primero que se escribe en una publicación. Tuve que usar el===
operador para resolver esto.De todos modos, muchas gracias por compartir esta técnica, me ayudó mucho.
fuente
con Wordpress 4.7 hay otra forma de lograr esto en su
functions.php
archivo,primero registras tu script , que en realidad no se imprime en tu página a menos que lo pongas en cola si se llama a tu shortcode,
el
do_shortcode_tag
fue introducido en WP 4.7 y se pueden encontrar en los nuevos desarrolladores de documentación páginas.fuente