is_admin 대시 보드 인 경우 단축 코드를 등록하지 않는 이유는 무엇입니까?


10

Contact-form-7 , Nextgen-gallery 등의 일부 플러그인은 사실 짧은 코드를 등록하지 않는 흥미로운 기능을 가지고 있음을 알았습니다is_admin() .

문제는 ajax에서 동적 컨텐츠 (짧은 코드가있을 수 있음)를 생성하고이를 수행하는 "올바른"wp 방식 인 admin-ajax.php를 사용하려는 경우 WP_ADMIN이 참이 아닌 것은 불가능하다는 것입니다. admin-ajax.php의 첫 줄을보십시오 :

define( 'DOING_AJAX', true );
if ( ! defined( 'WP_ADMIN' ) ) {
    define( 'WP_ADMIN', true );
}

이제 정의 된 상수 (해키)를 설정 해제 할 수있는 PHP 확장이 있거나 문서화되지 않은 WP_Screen 시스템을 혼란스럽게 $GLOBALS['current_screen']하고 is_admin()함수가 false를 반환 하도록하는 방법이 있습니까 ?? 가장 유용한 해결 방법은 페이지 또는 사이트 루트에 게시하는 것 같습니다.

플러그인 is_admin()이 거짓 일 때 단축 코드를 등록하는 것이 일반적 입니까? 그렇다면 조기 최적화 일 수있는 것 이외의 문서 나 이유를 찾을 수 없었습니다.

답변:


6

나는 contact-form-7과 같은 문제를 잠시 동안 관찰했다.

그러나 짧은 코드를 기반으로 등록하는 is_admin것은 doing_it_wrong입니다 ( gmazzap의 답변 참조 )

첫눈에 합법적으로 보이는 두 가지 이유가 있습니다 (그리고 왜 틀린지).

  1. (아마도) 플러그인 작성자 는 필요할 때 짧은 코드 만 등록하도록 스크립트를 최적화 하려고했습니다 . 이 경우 저자는 단축 코드가 Ajax 요청에 사용될 수 있다고 생각하지 않았습니다.

    잘못된 이유 :이 최적화는 성능 향상을 제공하지 않습니다. 단순히 전역 "등록 된 단축 코드"배열에 값을 추가합니다.

  2. 플러그인 작성자가 Ajax 요청에서 단축 코드에 대한 지원을 의도적으로 비활성화 했습니다. Contact-Form-7의 경우 양식이 "Ajax를 통해 제출"로 설정 될 수 있기 때문에 가능합니다. 그러나이 기능을 사용하려면 단축 코드를 Ajax를 통해 구문 분석하고 javascript를 통해 추가 할 때로드되지 않는 추가 Javascript 파일을로드하는 양식이 필요합니다 enqueue_scripts().

    저자는 "이 기능을 사용하지 마십시오 : 양식이 표시되지만 제출 단추를 클릭해도 작동하지 않습니다. 시간을 완전히 낭비하십시오!"와 같은 버그 보고서를 방지하기 위해 Ajax 지원을 비활성화하기로 결정했습니다.

    따라서 사용자는 보증 된 양식을 보거나 전혀 양식을 볼 수 없습니다.

    이유is_admin 가 잘못되었습니다. 여기서 확인하는 것은 좋지 않습니다. 조건은 상수 DOING_AJAX가 정의되어 있고 참 인지 확인해야 합니다.

대부분의 플러그인은 이러한 종류의 조건을 사용하지 않지만 그러한 제한 있는 소수 는 과거의 문제로 인해 제한을받을 있습니다.

짧은 코드가 단순히 페이지에서 일부 출력을 수행하는 경우 관리자 조건을 추가 할 이유가 없습니다. 그러나 짧은 코드가 js 또는 css 파일을 대기열에 넣을 때 사용을 비 관리 / 비 축적 요청으로 제한하는 것이 합리적입니다.


2
단축 코드를 등록하지 않으면 성능에 거의 영향을 미치지 않습니다. 등록하면 변수가 배열에 추가됩니다. 무엇 가능성이 느린 것은 그것을 등록하지의 단축 코드를 수행하는 것입니다. 따라서 성능 최적화라면 실패한 것입니다. 검사 아약스에 대한 해제 단축 코드에 플러그인 저자하려면 is_admin된다 doing_it_wrong는 아약스 요청을 확인하는 WP 훨씬 더 나은 방법이있어. 마지막으로, 플러그인이 js / css를 큐에 넣는 경우, 제대로 수행하면 ( 'wp_enqueue_scripts'액션 사용 ) 관리 페이지에서 해당 후크가 시작되지 않기 때문에 관리 페이지에 영향을 미치지 않습니다.
gmazzap

@gmazzap 의견에 감사드립니다. 전적으로 동의합니다! 조건이 나쁜 습관임을 분명히하기 위해 답변을 업데이트하고 입력 내용을 추가했습니다.
Philipp

enqueue_scripts가 the_content호출 및 admin-ajax 호출에 영향을 미치지 않아야하므로 # 2가 될 것이라고 생각하지 않습니다 .
NoBugs

3

실제로 관리자에 단축 코드를 등록하지 않아도됩니다.

플러그인 작성자가 플러그인 양식 Ajax를 사용하지 않으려면

if (defined('DOING_AJAX') && DOING_AJAX)

확인하는 대신 admin입니다.

앞으로 Shortcake 가 "기능 플러그인"이기 때문에 코어에 임베드 될 수 있습니다.

이 경우 관리자에 정의되지 않은 단축 코드는 작동하지 않습니다. 이를 통해 관리자에게 단축 코드를 등록 할 이유가 없다는 것을 확인할 수 있습니다. 핵심 개발자조차도 관리자가 사용할 수있는 단축 코드 가 필요한 작업을하고 있습니다.

즉, 가능성이 있어야합니다.

  1. 플러그인 작성자에게 연락하여 문제를 해결할 수 있는지 확인하십시오.
  2. 혼자서 해결책을 찾으십시오

# 2와 관련하여 실제로 사실이 될 수있는 라이브러리가 있습니다 is_admin. 그들은 hackish이기 때문에 나는 생산에 사용하지 않을 것입니다.

예를 들면 Patchwork 입니다.

이를 사용하면 모든 PHP 사용자 정의 함수를 무시할 수 있습니다.

A의 MU 플러그인 당신은 (완전히 테스트되지 않은) 할 수 있습니다 :

add_action('muplugins_loaded', function() {
  if ( defined('DOING_AJAX') && DOING_AJAX ) {
     require 'path/to/Patchwork.php';
     Patchwork\replace("is_admin", function() {
        return FALSE;
     });
  }
});

이것은 is_admin()아약스 요청에서 false를 반환합니다.

그러나 말했듯이 이것은 꽤 해킹이며 예측할 수없는 효과로 다른 플러그인 (및 핵심) 동작에 영향을 미칩니다.

관리자 요청에 플러그인 단축 코드 핸들러를 등록하는 것도 가능합니다.

예를 들어 플러그인 코드가 다음과 같은 경우 :

if (! is_admin()) {
  add_shortcode( 'shortcode' , 'plugin_shortcode_handler' );
}

그런 다음 다른 플러그인을 작성할 있습니다.

if (is_admin()) {
  add_shortcode( 'shortcode' , 'plugin_shortcode_handler' );
}

이 방법으로 단축 코드가 두 경우 모두 추가됩니다.

이것은 다른 플러그인 코드에 따라 단독으로 작동하거나 작동하지 않을 수 있지만 이에 대한 일반적인 대답은 없습니다.


add_shortcode('shortcode', array('their-class', 'their-function') )또는 유사 할 수도 있습니다 .
NoBugs

@nobugs :)
gmazzap

또는 더 나은 "해결 방법"은 사이트의 루트 나 페이지에 게시하는 것입니다.
NoBugs
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.