WordPress에 jquery-ui 효과를 올바르게 포함시키는 방법


25

내 워드 프레스 테마에 jquery ui 효과 (특히 흔들림 효과)를 포함하려고했습니다. 지금까지 jQuery 스크립트 만 포함 할 수 있었지만 실제로는 ui 스크립트를 배치 할 위치와이를 큐에 넣는 방법에 대한 실마리는 없습니다.

이것은 내가 가진 코드입니다. 분명히 작동하지 않습니다.

    <?php wp_enqueue_script("jquery"); ?>
<?php wp_enqueue_script("jquery-ui-core"); ?>
<?php wp_head(); ?>
<link rel="stylesheet" type="text/css" href="<?php bloginfo('stylesheet_url'); ?>" />
<script type="text/javascript">
    var $j = jQuery.noConflict();
    $j(document).ready(function() {
        $j("#manita-imagen").mouseover(function(){
            //$j(this).animate({ opacity: "hide" })
            // alert('asd');
            $j(this).effect("shake", { times:3 }, 300);
        });
    });

 </script>

당신의 도움을 주셔서 감사합니다!


5
참고 사항 : jquery는 이미 jquery-ui-core의 종속성으로 나열되어 있으므로 jquery를 대기열에 넣을 필요가 없습니다.
goldenapples

답변:


36

WordPress에는 jQuery UI 라이브러리가 포함되어 있지만 UI / Effects 라이브러리는 포함되어 있지 않습니다. 해당 라이브러리는 분리되어 있으며 독립형입니다. effects.core.js 파일의 사본을 포함하고 별도로 대기열에 포함시켜야합니다.

일관성을 유지하려면 대기열에 넣을 때 이름을 jquery-effects-core로 지정해야합니다.

다음과 같이 포함시킬 수 있습니다.

wp_enqueue_script("jquery-effects-core",'http://example.com/whatever/effects.core.js', array('jquery'), '1.8.8');

편집 :이 답변은 WordPress 3.3 이전에 작성되었으며 다양한 효과 라이브러리를 핵심의 일부로 포함합니다. 지금 사용해야하는 효과 라이브러리를 큐에 넣을 수 있습니다.

이러한 파일에 대한 슬러그 목록은 wp-includes / script-loader.php에서 찾을 수 있지만 코어의 슬러그는 jquery-effects-core입니다.

wp_enqueue_script("jquery-effects-core");

1
실제 효과 (블라인드, 바운스, 페이드 등)를 위해서는 그 효과를 명시 적으로 포함시켜야합니다. '페이드'를 좋아하는 경우 :wp_enqueue_script( 'jquery-effects-fade' );
SunnyRed

사용자는 자신의 Javascript를 별도의 파일에 배치 한 다음 해당 파일을 큐에 넣고 필요한 종속성을 나열해야합니다. 이런 식으로 WordPress (및 성능 플러그인)는 이러한 스크립트를로드하는 데 필요한 순서를 알고 페이지에서 올바른 순서로 배치합니다.
Dave Hilditch

8

@dabito,

스크립트를 올바르게로드하지 않습니다 ... wp_enqueue_script()테마 템플릿 파일 내부를 호출하지 마십시오 (이것은 것처럼 보입니다 header.php). 별도의 후크에서이 함수를 호출해야합니다.

테마 functions.php파일에 다음 코드를 배치하십시오.

function my_add_frontend_scripts() {
        wp_enqueue_script('jquery');
        wp_enqueue_script('jquery-ui-core');
}
add_action('wp_enqueue_scripts', 'my_add_frontend_scripts');

두 스크립트가 모두 올바르게 등록되면 <script />헤더에 적절한 태그를 추가하여 제대로로드해야합니다 . 그러면 다른 JavaScript 코드가 작동합니다.

관리자 쪽에 스크립트를 추가하려면 admin_enqueue_scripts대신 작업을 추가하십시오 .


1
사실이 아닙니다. 그가 wp_head () 호출 전에 그들을 호출하는 한 잘 작동합니다. 그들은 연결될 필요가 없으며, 어쨌든 초기화하기 위해 연결되어서는 안됩니다. 어딘가에 연결하려면 'wp_enqueue_scripts'작업 후크에 연결하십시오. 그것이 거기에있는 것입니다.
Otto

1
@Otto 말한 내용이 논리적으로 들립니다. 그러나 왜 코덱스에서 @EAMann이 썼는지- "init 함수를 사용하여이 함수를 호출하는"이유를 설명하고 있습니까? 그리고 그의 예는 거기에서 가져옵니다 ... codex.wordpress.org/Function_Reference/wp_enqueue_script
Lea Cohen

코덱은 장소에 우연이 있습니다. 이를 위해 최선의 조치는 프론트 엔드의 경우 wp_enqueue_scripts 또는 백엔드의 경우 'admin_enqueue_scripts'입니다. init에 연결하면 작동하지만 전체 사이트에서 스크립트를 불필요하게 대기열에 넣습니다.
Otto

이에 따라 코드 스 니펫을 업데이트했습니다. 원래 Codex 참조를 기반으로 한 빠른 반응이었습니다 ... 사용 wp_enqueue_scripts하는 것이 더 좋은 방법이며 추가 is_admin()검사가 필요하지 않습니다.
EAMann

이것은 또한 잘못된 방법입니다-성능 플러그인은 종속성을 알아야합니다. 작성자는 자신의 .js 파일을 작성하고이를 큐에 넣고 종속성의 이름을 지정해야합니다. WordPress가 나머지를 처리합니다.
Dave Hilditch

7

또한 전체 jQuery UI를 Google에서 직접 대기열에 넣을 수도 있습니다. 이것이 내가하는 방법입니다.

wp_enqueue_script('jquery-ui', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js', array('jquery'), '1.8.6');

또한 jQuery는 jQuery UI에 대한 종속성으로 나열되므로 수동으로 대기열에 넣을 필요가 없습니다. WordPress가 자동으로 처리합니다.


3
자신의 사이트 대신 Google CDN에서 모든 jQuery 라이브러리를로드 할 수도 있습니다.
Jan Fabry

외국 소스에서 스크립트를로드하지 않는 것이 좋습니다. 나는 꽤 오랫동안 그것을했고 호스트가 다운 된 경우는 거의 없었으므로 여러 고객이 한 번에 페이지에 문제를 겪었습니다.
Julian F. Weinert

1
@JulianF. Weinert는 양날의 칼이며, 좋은 cdn을 사용하면 지연 시간은 짧지 만 실패하면 제어력이 부족합니다. 즉, 구글 cdn이 절반으로 떨어지면 인터넷이 실패하므로 유일한 것이 아닙니다. 그러나 사용자 브라우저에서 다운되고 캐시되지 않을 가능성은 적습니다. 대부분의 경우 cdn을 사용하는 것이 좋습니다.
Alex

참된. 나는 완전히 사용 된 CDN에 대해 이야기하지 않았습니다. 물론 정확히 그 용도로 설계되었으므로 여기에서 절대적으로 좋습니다. 어떤 john-doe.com IST 조금 위험한 생각에서로드 스크립트, 나는 생각
줄리안 F. Weinert에게

3

이 jQuery 라이브러리 (전체 목록 here )에 대한 기본로드가없는 것 같으므로 스크립트를 대기열에 추가하기 전에 등록 해야합니다.


1
나는 당신이 옳을 수도 있다고 생각했지만 (때때로 WP 레지스터 스크립트의 이름이 사용 된 표준 이름과 다를 수도 있습니다.)이 경우 'jquery-ui-core'를 등록하면 작동합니다. core.trac.wordpress.org/browser/branches/3.0/wp-includes/…에
goldenapples

좋은 지적! 나는 그가 jQuery 라이브러리 로드하고 싶다고 가정했는데 ,이 경우 나머지를로드하는 것은 약간의 번거 로움입니다.
편집자

3

약간의 팁. 스크립트를 대기열에 넣을 때 관리자 패널을 포함한 전체 사이트를 대기열에 넣습니다. 관리자 패널에서 스크립트를 원하지 않으면 프런트 엔드 사이트에 스크립트 만 포함 할 수 있습니다.

function my_add_frontend_scripts() {
    wp_enqueue_script('jquery');
    wp_enqueue_script('jquery-ui-core');
}

add_action( 'wp_enqueue_scripts', 'my_add_frontend_scripts');

4
대기열에 init 훅을 사용해서는 안됩니다. 프론트 엔드에만 wp_enqueue_scripts 후크를 사용하거나 백엔드에는 admin_enqueue_scripts 후크를 사용하십시오.
Otto

wp_enqueue_scripts행동은 프론트 엔드 전용 이라는 것을 몰랐습니다 . 감사합니다 :)
Tareq

0

여기에있는 모든 대답은 작동하는 동안 기술적으로 잘못되었습니다.

jquery-ui 및 기타 라이브러리를 포함하는 올바른 방법은 스크립트를 자신의 스크립트의 종속성 으로 포함시키는 것 입니다.

성능 도구가 이러한 종속성을 검사하여 사이트의 최적화를 위해 스크립트의로드 순서를 변경하기 때문에 중요합니다.

따라서 jquery 및 jquery-ui를 사용하려면 자신의 .js 스크립트 파일을 작성하고 종속성을 나열하여 다음과 같이 큐에 넣으십시오. 사용하는 각 라이브러리에 대해 별도의 큐에 명령이 필요하지 않습니다.

wp_enqueue_script('your-script-handle', 
 plugins_url('your-script-file.js', __FILE__), 
 array('jquery', 'jquery-effects-core', 'jquery-ui-core')
);

https://developer.wordpress.org/reference/functions/wp_enqueue_script/에서 종속성으로 추가 할 수있는 모든 사용 가능한 스크립트 목록을 찾을 수 있습니다.


1
당신은 옳습니다. 자신의 wp_enqueue_script 호출에서 종속성을 사용하는 것이 jquery / jquery-ui / etc를 포함하는 올바른 방법입니다. 별도로 큐에 넣을 필요가 없습니다.
Michae Pavlos Michael

스크립트가 스크립트에 의존 할 때 개별적으로 대기열에 포함 시키면 스크립트가 하나의 스크립트로 결합되어 로딩 속도가 빨라지거나 지연되거나 최소화되는 경우 (예 : minifcation에 따라 다름) 순서는 바뀔 수 있습니다). 스크립트가 다른 스크립트에 의존한다고 WordPress에 알리지 않은 경우 스크립트가로드되는 순서를 보장 할 수 없습니다.
데이브 힐 디치
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.