특정 페이지에만 코드를 포함시키는 방법은 무엇입니까?


14

플러그인과 단축 코드에 대해 배우고 있습니다. 플러그인을 활성화하면 코드가 모든 페이지, 심지어 짧은 코드가없는 페이지에도로드됩니다. (콘텐츠와 관리자 페이지를 의미하지는 않습니다). 일부 콘텐츠 페이지에서는 특정 단축 코드를 사용하고 다른 콘텐츠 페이지에서는 사용하지 않지만 플러그인 코드가로드됩니다. 플러그인이 단축 코드가 사용되는 페이지에만 포함되도록하려면 어떻게해야합니까?

자세한 세부 사항:

라이트 박스를 만드는 플러그인이 있다고 가정 해 보겠습니다. 플러그인을 활성화합니다. '쿨 이미지'페이지에서 단축 코드를 사용하여 라이트 박스를 만듭니다. 라이트 박스 단축 코드를 사용하지 않는 "정보"페이지에서 소스보기를 확인하면 라이트 박스 플러그인의 코드가로드 된 것을 볼 수 있습니다. 플러그인을 작성하면 코드가 필요한 페이지에만로드되도록 내 페이지가 더 빨리로드됩니다. 이게 가능해? 그렇지 않으면 페이지에 불필요하게 많은 플러그인을로드하는 코드가 있습니다. 어떤 아이디어?


1
짧은 코드가있는 페이지에서 무언가를 대기열에 넣거나 PHP 스크립트를 실행하려고합니까?
mor7ifer

+1 @ m0r7if3r-또한 이해하고 싶습니다. .. 접근법은 매우 다릅니다
krembo99

@ mrOr7if3r, 메시지 주셔서 감사합니다. 예를 들어 Google Maps 플러그인이 있다고 가정 해 보겠습니다. 플러그인을 모든 페이지, 즉 플러그인을 사용하지 않는 페이지에로드해야합니까? Google지도 단축 코드가없는 '정보'페이지가 있다고 가정 해 보겠습니다. View Source를 보면 플러그인 코드가 해당 페이지에로드 된 것을 볼 수 있습니다 (사용하지 않지만 이벤트). 플러그인 코드가 모든 단일 페이지에로드되어야합니까? 감사.
Laxmidi

WP를 사용하면 언제든지 스크립트를 대기열에 넣을 수 있으므로 imho가 (새로운) 모범 사례로 이어지는 좋은 질문입니다.
Raphael

답변:


9

WP v3.3은 페이지 중간에 wp_enqueue_script를 실행할 수있는 기능을 제공했습니다. 티켓 9346

이로 인해 짧은 코드를 사용할 때 더 세분화 된 JS를 훨씬 더 쉽게 포함시킬 수 있습니다. 여기서 jquery는 단축 코드가 실행될 때만 포함됩니다.

function get_slideshow() {
  // Do some stuff...

  // Load up scripts right from within our shortcode function (requires WP 3.3+)
  wp_enqueue_script( 'jquery', array(), null, true  ); 

  return;
}
add_shortcode( 'cool_slideshow', 'get_slideshow' );

1
이것이 어떻게해야하는지, imo.
Raphael

1
훌륭합니다. 이제 페이지 중간에 wp_enqueue_script를 실행할 수 있다는 것을 깨달았습니다. 필요할 때만 스크립트 / CSS를로드하는 훨씬 깨끗한 방법!
Rick Curran

2

관리 UI 변수 확인

하나의 메뉴 항목은 특별한 경우입니다. 주석은 add_WHATEVER_(submenu)page()API를 사용하여 등록되므로 주석 입니다.

// All need to be stated as beeing global
global $pagenow, $typenow, $hook_suffix, $parent_file, $submenu_file, $post_type_object;
if ( 'THE-OUTPUT.php' === $WHATEVER_YOU_CHOOSE_TO_CHECK )
    // do stuff

이것들은 비 사이트 적이며 wp 코어로 하드 코딩됩니다. 모든 것이 모든 페이지에 설정되는 것은 아닙니다.

페이지 별 관리 UI 후크에 연결

그런 다음에 한 번 봐 걸릴 수, 특수, 페이지 별 후크가있어 admin-footer.phpadmin-header.php:

// Examples:
// Header
"admin_head-$hook_suffix"
"admin_print_styles-$hook_suffix"
"admin_print_scripts-$hook_suffix"
// Footer
"admin_footer-$hook_suffix"

실제 세계의 몇 가지 예 : Post Screen

// Examples how the result looks like
admin_print_styles-post.php
admin_print_styles-post-new.php

그런 다음 $hook_suffix작업을 연결하는 즉시 스크립트를 대기열에 넣을 수 있는지 확인할 수 있습니다.

do_action( 'admin_enqueue_scripts', $hook_suffix );

최신 정보

이 데이터 / 정보에보다 쉽게 ​​(1 클릭) 액세스 할 수 있도록 GitHub에서 제공되는 "(WCM) Current Admin Info" 라는 무료 개발자 친화적 플러그인을 작성했습니다 . 플러그인은 가까운 장래에 공식 wp.org 저장소 에서도 찾을 수 있습니다 .

스크린 샷

이 플러그인으로 얻는 내용을 미리 보려면 :

화면

갈고리

글로벌


0

(header.php에서) 라인을 따라 무언가를 할 수 있습니다 :

<?php
        if ( have_posts() && ( is_page() || is_single() ) ) {
            $content = get_the_content(the_post());
            if ( stripos( $content , '[your-shortcode') ) { function_for_scripts(); } 
        }   
?>

현재로드가 페이지 또는 게시물인지 확인한 다음 컨텐츠를 잡고 단축 코드를 검색합니다. 그것을 찾으면 함수를 실행합니다.


귀하의 메시지에 감사드립니다. 귀하의 솔루션을 사용해 보았지만 불행히도 작동시키지 못했습니다.
Laxmidi

헤더에 추가 되었습니까?
Noel Tock

1
벌써 봤어 get_shortcode_regex()?
카이저

0

가장 간단한 방법은 단축 코드를 확인하는 것입니다.

function your_scripts()
{ 
    global $post;
    wp_register_script('your-script',$the_path_to_your_script,'0.1',true);
    if ( strstr( $post->post_content, '[your-shortcode' ) ) 
    {
        wp_enqueue_script('your-script');
    }
}
add_action( 'wp_enqueue_scripts', 'your_scripts');

1
거기에 있습니다 get_shortcode_regex().
카이저

0

@kaiser는 get_shortcode_regex()이 스레드에서 여러 번 언급했지만 방금 사용 방법에 대한 예제를 제공한다고 생각했습니다. 코드는 get_shortcode_regex()WordPress Code Reference 페이지 에서 가져옵니다 .

function enqueue_script_if_shortcode_is_detected() {
    global $post;

    wp_register_script( 'your-script', $the_path_to_your_script, '1.0', true );

    $pattern = get_shortcode_regex();

    if (   preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches )
        && array_key_exists( 2, $matches )
        && in_array( 'your-shortcode', $matches[2] )
    ) {
        wp_enqueue_script('your-script');
    }
}
add_action( 'wp_enqueue_scripts', 'enqueue_script_if_shortcode_is_detected' );

-3

솔루션을 찾았습니다 .

add_action( 'wp_print_scripts', 'my_deregister_javascript', 100 );

function my_deregister_javascript() {
    wp_deregister_script( 'my_scripts_handle' );
}

3
그러나 솔루션은 모든 페이지에서 스크립트를 제거합니다
Mamaduka
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.