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.