functions.php에 자바 스크립트를 올바르게 추가하는 방법


11

WooCommerce의 장바구니 버튼에 표준으로 표시되는 못생긴 화살표를 제거하고 싶습니다. 이를 달성하기 위해 문서가로드 될 때 화살표를 제거 해야하는 다음 코드를 추가하는 팁을 찾았습니다.

나는 그것을 functions.php에 넣을 것이라고 가정한다. 정확히 어떻게해야합니까?

$(document).ready(function() {
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace(" →", "");
    });
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace("← ", "");
    });
});

편집하다

괜찮아. 나는이 접근법을 시도했다 :

'removeArrows.js'라는 파일을 만들어 내 플러그인 폴더에 넣었습니다. 이것은 jQuery 대신 $를 제외하고 원래 코드와 동일한 내용을 갖습니다. 그런 다음 functions.php에 다음을 추가했습니다.

function wpb_adding_scripts() {
      wp_register_script('my_amazing_script', plugins_url('removeArrows.js', FILE), array('jquery'),'1.1', true);
     wp_enqueue_script('my_amazing_script');
 } 

add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts' ); 

코드를 올바르게 표시하는 방법을 알 수 없습니다. 이것은 작동하지 않았다. 이 작업을 수행하기위한 제안 사항이 있습니까?

jQuery 스 니펫 소스


미친 짓입니다. 화살표를 생성하는 코드에서 화살표를 편집 할 수 없습니까? (또는 외부 소스에서 다운로드 한 것입니까?) 어떤 경우에도 장바구니 블록 내부의 모든 HTML을 두 번 읽고 쓰지 않도록 단일 기능으로 두 교체를 모두 수행 할 수 있습니다. functions.php에서 직접 페이지에 삽입하는 방법을 모르지만 별도의 스크립트 파일 (아직 추가 할 수없는 파일이 있으면 추가 할 수 있음)에 저장할 수 있습니다 wp-enqueue-script. 또한 $s 를 변경 jQuery해야합니다 (7 페이지 참조)
Rup

아니요, 삽입하기 전에 제거 할 수 없습니다. 가능하다면 할 방법을 찾지 못했습니다. 단일 함수에 추가하는 것이 좋습니다. 이렇게 보일까요? $ (document) .ready (function () {$ ( ". woocommerce-cart"). html (function (i, val) {return val.replace ( "→", ""); return val.replace ( "← "," ");});}); 대기열에 넣은 스크립트를 살펴 보겠습니다. 그래도 조금 복잡해 보입니다 .. 감사합니다!
user2806026 2016 년

괜찮아. 나는이 접근법을 시도했다; 'removeArrows.js'라는 파일을 만들어 내 플러그인 폴더에 넣었습니다. 이것은 jQuery 대신 $를 제외하고 원래 코드와 동일한 내용을 갖습니다. 그런 다음 functions.php에 다음을 추가했습니다. `function wpb_adding_scripts () {wp_register_script ( 'my_amazing_script', plugins_url ( 'removeArrows.js', FILE ), array ( 'jquery'), '1.1', true); wp_enqueue_script ( 'my_amazing_script'); } add_action ( 'wp_enqueue_scripts', 'wpb_adding_scripts'); (죄송합니다, 코드를 올바르게 표시하는 방법을 알 수 없습니다) 이것은 작동하지 않습니다. 문제 해결에 도움을 줄 수 있습니까?
user2806026

1
파일하시기 바랍니다 편집 및 모든 관련 정보를 추가 질문에 직접 코드를 추가 코멘트 섹션을 사용하지 마십시오
피터 구센

답변:


11

귀하 $scrwp_register_script()기능이 잘못되었습니다. functions.php가 플러그인 안에 있고 removeArrows.js가 플러그인의 루트에 있다고 가정 $scr하면 다음과 같이 보일 것입니다

plugins_url( '/removeArrows.js' , __FILE__ )

또 다른 요점은 항상 스크립트와 스타일을 마지막에로드하는 것이 좋습니다. 이렇게하면 다른 스크립트와 스타일로 재정의되지 않습니다. 이렇게하려면 우선 순위 매개 변수 ( $priority)에 매우 낮은 우선 순위 (매우 높은 숫자)를 추가하십시오 add_action.

 add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999 ); 

그리고 액션 후크 를 통해 스크립트와 스타일을 항상 로드 / 큐에 넣습니다. wp_enqueue_scripts이것이 적절한 후크이기 때문입니다. 스크립트와 스타일을 직접 또는에 로드 하지 마십시오wp_headwp_footer

편집하다

테마의 경우 이제 모든 것을 테마로 옮겼 음을 표시 했으므로 다음과 같이 $scr변경됩니다.

 get_template_directory_uri() . '/removeArrows.js'

부모 테마와 이것에 대한

get_stylesheet_directory_uri() . '/removeArrows.js'

어린이 테마. 완성 된 코드는 다음과 같아야합니다

function wpb_adding_scripts() {
    wp_register_script('my_amazing_script', get_template_directory_uri() . '/removeArrows.js', array('jquery'),'1.1', true);
    wp_enqueue_script('my_amazing_script');
} 

add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999 ); 

훌륭한 조언에 감사드립니다. 이것은 사용하는 접근법처럼 보입니다. 하나의 질문; functions.php는 내 테마 폴더에 있습니다. js 파일이 동일한 테마 루트 폴더에 있다면 어떻게 연결합니까?
user2806026 2016 년

플러그인이나 테마에 모든 것을 보관해야합니다. 당신이 테마에 있다면, 당신 $scrget_template_directory_uri() . '/removeArrows.js'부모 테마와 자녀 테마를 get_templatestylesheet_directory_uri() . '/removeArrows.js'위한 것입니다
Pieter Goosen

이번에는 테마 폴더에 removeArrows.js를 직접 추가하고 functions.php에서 다음을 사용하여 다시 시도했습니다. 함수 wpb_adding_scripts () {wp_register_script ( 'my_amazing_script', get_template_directory_uri (). '/removeArrows.js', FILE ), array ( 'jquery'), '1.1', true); wp_enqueue_script ( 'my_amazing_script'); } add_action ( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999); wp_register_script 줄에 구문 분석 오류 : 예기치 않은 ','가 표시됩니다.
user2806026 2016 년

get_template_directory_uri() . '/removeArrows.js', FILE)단지해야get_template_directory_uri() . '/removeArrows.js'
피터 구센

아니. 원래 게시물의 맨 아래에 편집 한 코드를 완전히 사용했습니다. 컨텐츠를 볼 때 카트 페이지를 고정시키는 것만입니다. 나는 단지 포기하겠다고 생각한다 :-) 하나의 마지막 수단; get_template_directory_uri ()는 부모 테마 용이고 마지막 완전한 코드에서는 자식 테마 용이라는 것을 언급하면서 시작했습니다. 무엇 이니? 내 테마는 부모 :-)
user2806026 2016 년

4

다른 외부 js 파일을 추가하지 않을 것입니다. 가져올 여분의 불필요한 리소스이며 페이지 로딩 시간 측면에서 줄이고 싶습니다.

wp_head후크를 사용하여 웹 사이트 헤드 에이 jQuery 스 니펫을 추가합니다 . 테마 또는 플러그인 함수 파일에 다음을 붙여 넣습니다. 또한 아래에서 볼 수 있듯이 jQuery가 충돌하지 않는 모드인지 확인했습니다.

add_action('wp_head','woocommerce_js');

function woocommerce_js()
{ // break out of php ?>

jQuery(document).ready(function($) {
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace(" →", "");
    });
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace("← ", "");
    });
});
<?php } // break back into php

이 작업을 수행하고 페이지를 새로 고치면 페이지 소스를 확인하여이 jQuery 스 니펫이 실제로 페이지에로드되는지 확인하십시오. 그렇다면 실제 jQuery 스 니펫에서 무언가가 아닌 한 작동하지 않아야합니다.


그러나 그것은 자바 스크립트를로드하는 WordPress 방법이 아닙니다. 자세한 내용 wp_enqueue_script()은 참조하십시오.
Pat J

2
안녕하세요 @PatJ, 모든 Javascript 함수가 포함 된 외부 JS 라이브러리 또는 JS 파일을로드 한 것에 동의합니다. 그렇습니다. 그렇습니다. 정확한 방법입니다. 그러나 Javascript 스 니펫을로드하는 경우 완전히 새로운 JS 파일을 작성하고 이에 대한 추가 HTTP 요청을 추가하는 것은 의미가 없습니다. 예를 들어 테마 또는 사용자 정의 빌드의 99 %에서 Google Analytics를 사용하면 테마 옵션 또는 함수 파일을 통해 JS가 머리글 또는 바닥 글에 추가됩니다. 이 방법으로 JS 또는 CSS 스 니펫을 포함시키는 것이 일반적입니다.
Matt Royal

1
그러나 "공통 관행"은 정확하지 않습니다. wp_enqueue_script()문서는 심지어 상태 이것은 워드 프레스 생성 된 페이지에 자바 스크립트를 연결하는 방법을 사용하는 것이 좋습니다 .
Pat J

WordPress 기본 스물 넷 테마를 사용하면 header.php에 html5.js가로드됩니다. 브라우저를 확인하는 것이 IE <9 인 조건을 충족시키는 이유 때문에이 방법으로 doe를 부여했지만 내 요점은 이해할 수 있고 큐잉이 권장되고 선호되는 방법이지만 다른 모든 변수 / 환경에 따라 다릅니다. 그것을 달성하려고 노력하는 것이 항상 가장 실용적이지는 않을 수 있으며 일부 재량을 사용해야한다고 생각합니다. 봐, 나도이 견해에서 완전히 잘못 될 수 있습니다, 나는 정말 경험이 풍부한 사람 중 일부가 말을 듣고 싶어요 :-)
Matt Royal

당신의 큰 제안에 감사드립니다. 그래도 작동하지 않습니다. functions.php의 <? php 태그 안에 코드를 추가하면 '구문 오류 : 구문 오류, 예기치 않은'< '/somepath.../functions.php in 1146 행'이 표시됩니다. <? php 외부에 추가하면 페이지 상단에 주어진 코드를 에코하는 것 같습니다. 내가 여기서 무엇을 놓치고 있습니까?
user2806026 2016 년

0

대답이 이미 받아 들였으므로 여러 번 수행 한 바닥 글에 자바 스크립트 코드를 대기열에 넣는 다른 방법이 있다고 말하고 싶습니다.

functions.php 파일에서 :

function load_script_to_remove_arrow(){
?>
<script>
$(document).ready(function() {
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace(" →", "");
    });
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace("← ", "");
    });
});
</script>
<?php
}
add_action( 'wp_footer', 'load_script_to_remove_arrow' );

조건을 사용해서 만이 스크립트를 특정 페이지 템플리트에로드 할 수 있습니다

if( is_page_template( 'page-template.php' ) ):

//put above code (or just add_action part) inside this condition to load file only if the condition is true 

endif;

page-template.php가 디렉토리에 있다면 (테마의 루트 디렉토리에있는 템플릿 디렉토리) 다음과 같이 쓸 수 있습니다 :

is_page_template( 'templates/page-template.php' );

JavaScript를 바닥 글에 "베이킹"하는 것은 권장하지 않습니다. 플러그인 및 테마 개발에 매우 ​​중요한 후크 해제 또는 수정 (적어도, 쉽게)되는 것을 방지합니다. 당신이 사이트의 최종 사용자이고 빠른 스크립트 나 무언가가 필요하다면 그것을 찾으십시오. 그러나 여전히 wp_enqueue_script()거의 항상 보편적으로 더 좋고 유연합니다.
Xhynk

-1

질문에 대답하기 위해서는 먼저 자바 스크립트와 JQuery를 구분해야합니다.

간단한 방식으로 설명하려면 :

  • 자바 스크립트는 ECMAScript를 기반으로합니다
  • JQuery는 자바 스크립트 라이브러리입니다

실제로 두 가지 다른 질문을합니다.

  • 귀하의 제목은 자바 스크립트 구현을위한 솔루션에 대해 말합니다
  • 귀하의 질문은 JQuery를 구현하기위한 솔루션에 대해 말합니다.

Google 검색 결과는 제목과 페이지의 모든 콘텐츠가 JQuery에 대해 이야기하므로 자바 스크립트 솔루션을 찾는 사람들에게는 매우 실망 스러울 수 있습니다.

이제 JQuery 솔루션의 경우 :

wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array ( 'jquery' ), 1.1, true);

그리고 자바 스크립트 솔루션 :

wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array(), '1.0.0', true );

이 코드는 functions.php에 추가 할 수 있습니다. 두 경우 모두 스크립트의 위치는 wp-content/themes/theme-name/js/script.js

행복한 코딩!


OP가 게시 될 무렵, 개발자들은 jquery와 javascript를 서로 바꿔서 사용했습니다. 전혀 정확하지는 않지만 jquery의 인기와 기능이 누락 된 자바 스크립트의 양이었습니다.
Rocky Kev
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.