다음과 같은 조건에서 WordPress 위젯에 대한 스크립트 및 스타일을로드하려고했습니다.
- 스크립트는 HEAD에로드되어야합니다 (그렇지 않으면 중단).
- 위젯은 실제로 위젯이 표시 될 때만로드해야합니다 (매우 무겁습니다).
나는 많은 검색을 해왔으며 이것은 일반적인 (해결되지 않은) 문제 인 것 같습니다 ... 그러나 여기 누군가가 성공적으로 해결 방법을 구현하기를 바랍니다.
이것은 내가 지금까지 얻은 것 중 최고입니다 ...
다음은 텍스트를 사이드 바에 인쇄하는 간단한 위젯입니다. 바닥 글에서만 항상 jQuery를 조건부로로드합니다 (위젯이 실제로 표시되는 경우)! (참고 : 이 핵 은 이전 버전과의 호환성을 제공 할 수는 있지만 WordPress 3.3에서만 작동 할 수 있습니다 ).
class BasicWidget extends WP_Widget
{
function __construct() {
parent::__construct(__CLASS__, 'BasicWidget', array(
'classname' => __CLASS__,
'description' => "This is a basic widget template that outputs text to the sidebar"
));
}
function form($instance) {
$instance = wp_parse_args( (array) $instance, array( 'title' => '' ) );
$title = $instance['title'];
?>
<p><label for="<?php echo $this->get_field_id('title'); ?>">Title: <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>" /></label></p>
<?php
}
function update($new_instance, $old_instance) {
$instance = $old_instance;
$instance['title'] = $new_instance['title'];
return $instance;
}
function widget($args, $instance) {
extract($args, EXTR_SKIP);
echo $before_widget;
$title = empty($instance['title']) ? ' ' : apply_filters('widget_title', $instance['title']);
if (!empty($title))
echo $before_title . $title . $after_title;;
echo "<h1>This is a basic widget!</h1>";
echo $after_widget;
// if we're echoing out content, enqueue jquery.
if (!empty($after_widget)) {
wp_enqueue_script('jquery');
}
}
}
add_action( 'widgets_init', create_function('', 'return register_widget("BasicWidget");') );
WordPress가 위젯 처리를 시작하면 대기열에 넣기에는 너무 늦습니다 (또는 이전에 대기열에 넣은 항목을 등록 취소하기도합니다).
어떤 아이디어라도 대단히 감사하겠습니다!
표.