Você poderá chamar wp_enqueue_script()
como parte da saída do Widget.
Editar
Rápido e sujo, usando o exemplo de classe básica da API de Widgets :
<?php
class wpse48337_Widget extends WP_Widget {
public function __construct() {
// widget actual processes
}
public function form( $instance ) {
// outputs the options form on admin
}
public function update( $new_instance, $old_instance ) {
// processes widget options to be saved
}
public function widget( $args, $instance ) {
// outputs the content of the widget
}
}
register_widget( 'wpse48337_Widget' );
?>
Adicione sua wp_enqueue_script()
chamada em linha , na saída do seu Widget - ou seja, dentro do public function widget()
:
<?php
public function widget( $args, $instance ) {
// outputs the content of the widget
// Enqueue a script needed for
// the Widget's output
wp_enqueue_script( 'jquery-pluginname', $path, $deps );
// Rest of widget output goes here...
}
?>
is_active_widget()
não é o mesmo que chamarwp_enqueue_script()
de dentro da saída do Widget . Veja a resposta atualizada.Se o script precisar ir na
<head>
seção:Caso contrário, a solução de Chip Bennett funcionará para enfileirá-la no rodapé.
A
$did_script
variável estática não é necessária, usei-a apenas para evitar chamadas desnecessárias adicionaiswp_enqueue_script
se houver várias instâncias de widget na página ...fonte
is-active_widget()
permite que você saiba se um widget foi ativado (ou seja: arrastado para uma das áreas da barra lateral em Aparência> Widgets), em vez de realmente aparecer em qualquer página .is_active_widget
retornará um sidebar_id, mesmo que essa barra lateral não esteja exibida na página atual. Isso adicionará o script em todas as páginas. (2)wp_enqueue_script
adicionará um script apenas uma vez, mesmo que você o chame várias vezes. não há necessidade deself::$did_script
(3) porque__construct
é chamado em cada solicitação de página, mesmo que o widget não é ainda exibidoPierre,
A maneira como lida com isso é com
wp_enqueue_script
andwp_dequeue_script
, e use uma variável de instância$is_active
na classe Your_WidgetEntão, fazer a
wp_enqueue_script
base emis_active_widget
que enfileira o script em todas as páginas, mas com o conjunto de parâmetros de rodapé para true. Observe que a desenfileiramento é executada com prioridade para garantir que seja executada antes da saída dos scripts.}
Em seguida, na função do widget, indique se o widget está ativo nessa página
Em seguida, no rodapé, desenfileire o script se o widget não estiver ativo nessa página
Essa abordagem de enfileirar e desenfileirar se não for usada também funciona bem para plug-ins que definem códigos de acesso que requerem scripts
fonte
Eu considerei o gancho 'wp_footer' porque esse gancho é executado no rodapé e provavelmente é a melhor maneira de adicionar scripts apenas onde o widget é usado.
fonte
wp_enqueue_script()
por favor. Nenhuma impressão direta de JS.dynamic_sidebar
ação, detectar quando o widget é realmente exibido ou, mais simplesmente, colocar seuenqueue_script()
direito nowidget()
método, como o @ChipBennet recomenda.