조건부 / 관리자 전용 / 로그 오류에 대한 WP_DEBUG 정의 (모든 링크에 대해 쿼리 인수 추가?)


20

클라이언트가 액세스 할 수있는 서버의 사이트를 개발 중이며 WP_DEBUG관리자 가 수행하려는 작업 만 표시하고 있습니다. 이 문제에 대한 Yoast의 기사 참조 :

if ( isset($_GET['debug']) && $_GET['debug'] == 'true')
    define('WP_DEBUG', true);

에 연결된 WP_DEBUGURL에 대해서만 표시 됩니다.?debug=truehttp://domain.com/?debug=true

Debug Bar 가 기본적 으로이 정보 중 일부를 보유 하고 있다고 생각하고 있었지만 ( WP_DEBUG켜져 있는지 여부에 관계없이 ), 나는 그것이 사실이라고 생각하지 않기 때문에 미친 듯이 생각하고있었습니다.

그래서 내가 생각한 것은 유용 할 것입니다. 현재 사용자를 확인하는 것입니다 ( manage_options기능을 가지고 다음을 통해 링크를 실행하십시오) add_query_arg().

function zs_admin_debug() {
    if (!current_user_can('manage_options')) {
        add_query_arg('debug','true');
    }
}

그러나 내가 확실하지 않은 것은-이 사이트의 모든 링크에 영향을 줄 수있는 후크가 있습니까? 이런 식으로 관리자는 항상 내가 유용하다고 생각한 디버그를 봅니다. 항상 도움을 주셔서 감사합니다!


이 (Yoast의) 해결 방법은 즉시 디버깅에 매우 유용합니다. 나는 또한 잘 작동하는 로깅을 활성화했습니다. 나는 코드를 약간 수정했다. if ( isset( $_GET['bug'] ) ) 그래서 나는 디버그를보기 위해 link /? bug를 방문한다 :)
Jarmerson

답변:


18

범용 URL 후크가 있다고 생각하지 않습니다. 갈고리가 많고 놓쳤을 수도 있지만, 갈고리가 없다고 생각합니다. adambrown.info 에서 후크를 살펴볼 수 있습니다 . URL 후크는 많지만 보편적 인 것은 아닙니다.

다른 해결책을 제안 할 수있는 경우 : 오류를 파일에 기록하십시오.

/**
 * This will log all errors notices and warnings to a file called debug.log in
 * wp-content (if Apache does not have write permission, you may need to create
 * the file first and set the appropriate permissions (i.e. use 666) ) 
 */
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors',0);

이 코드는 wp-config.php 파일에 대한 Codex와 동일합니다 . 그렇게 $_GET하면 관리자가 아닌 사람을 저글링 하거나 분류하는 것에 대해 걱정할 필요 가 없습니다.

편집하다:

가능한 해결책을 잊었습니다. 자바 스크립트로이 작업을 수행 할 수 있습니다. 짧은 스크립트는 매개 변수를 페이지의 모든 URL에 첨부 할 수 있으며 관리자 만 스크립트를 쉽게로드 할 수 있습니다.

모든 사람의 오류가 기록되므로 여전히 '로그'솔루션을 제안합니다. 사람들이 내 것과 같고 " 이봐,이 양식을 작성할 때 사이트가 망가졌다 "와 같은 오류 '보고서'를 보내면 로그에 감사 할 것입니다. :)


나는 화면에서 그것들을 보는 데 망쳐 놓았다고 생각합니다 :) 그러나 로그 파일은 여기에서 더 의미가 있습니다. 내 목표에 대해 더 많은 연구를 할 것이지만 이것은 지금까지 내가 본 최고의 솔루션 인 것으로 보입니다. 감사!
Zach

5
기본 로깅은 웹 액세스 가능 파일에 기록하도록 하드 코딩되어 있으므로 프로덕션 환경에는 적합하지 않습니다. 라이브 사이트 용 PHP 수단을 통해 개인 (웹 폴더 외부) 로그 파일 위치를 구성하는 것이 좋습니다.
Rarst

9

내 첫 번째 접근 방식은 쓰레기통에 대한 것이었지만 s_ha_dums 답변은 깨끗하고 아마도 가장 좋은 방법은 하나 더 작동하는 시나리오를 제공하겠습니다.

다음은 관리자가 시스템에 로그인 할 때 다음 24 시간 (86400 초) 동안 유효한 쿠키를 설정합니다. 에서는 WP-config.php를 상수는 WP_DEBUG조건부로 존재하고, 상기 쿠키의 값에 따라 정의된다.

주의 사항 : 그런 다음 같은 날 같은 컴퓨터의 동일한 브라우저에서 로그인하는 모든 사람이 WP_DEBUG로 설정됩니다 true.

에서 functions.php (또는 플러그인 등) :

function wpse_69549_admin_debug( $user_login, $user )
{
    if ( in_array( 'administrator', $user->roles ) ) {
        setcookie( 'wp_debug', 'on', time() + 86400, '/', get_site_option( 'siteurl' ) );
    }
}
add_action( 'wp_login', 'wpse_69549_admin_debug', 10, 2 );

참조 : 코덱> 조치 참조> wp_login

WP-config.php를 :

if ( isset( $_COOKIE['wp_debug'] ) && 'on' === $_COOKIE['wp_debug'] ) {
    define( 'WP_DEBUG', true );
} else {
    define( 'WP_DEBUG', false );
}

Andrew Nacin 은 그 기사에 대해 언급하기 init에 너무 늦어서 아무런 효과가 없습니다. 나는 또한 이것을 시도했지만 작동하지 않았다.
Zach

상수는 재정의 할 수 없습니다. 상수를 건드리지 않고 오류보고 수준을 수정할 수는 있지만 완벽하지는 않습니다. 또한 그 전에 init관심이 있는 일이 많이 있습니다.
Rarst

그럼에도 불구하고 완성 된 답변을 위해이 대답이 가장 실용적인 해결책으로 남아 있다고 생각합니다.이 새로운 접근법은 화면 디버그 알림으로 작업을 수행해야합니다.
Johannes Pille

아아 정말 멋진 해결 방법-확실히이 샷을 줄 것이다
Zach

1
@ s_ha_dum : 모든 답변을 기억하는 것과는 다릅니다. 적어도 나는하지 않습니다 (나는 전에 내 자신의 답변을 봤습니다). 그래도 나는 이것을 기억합니다. 나는 처음으로 대답했고 절대 쓰레기를 썼다. 전혀 적용되지 않았습니다. 나는 적어도 99.5 %의 자격이 있다고 확신하지 않는 한 정책에 따른다. 그것은 몇 시간 후, 이것이 받아 들여진 대답을 얻은 후에도 여전히 이것에 대해 생각하고 위의 내용을 생각해 냈습니다. 나도 그것이 매끄럽다 고 생각합니다.
Johannes Pille

3

귀하의 질문에 정확하게 답변하지는 않지만 개인적인 경험을 통해 URL 대신 IP 주소를 일치시켜 디버그 모드를 활성화하는 것이 좋습니다.

이를 위해서는 링크를 수정해야하며 WP가 필요한 사용자 기능을로드하기 전에 관리자를 식별하는 방법을 해결합니다.


나는 실제로이 아이디어를 좋아합니다. 그래서 pastebin.com/m22KNakh 와 같은 것을했다면 이론적으로 작동 할 수 있습니까? localhost에서 예상되는 echo $_SERVER['REMOTE_ADDR']수율 ::1을 실행 중 입니까? 솔직히 별도의 로그 파일처럼 들리며이 방법 (가정용 IP가 항상 변경되는 것처럼 보임)이 좋습니다.
Zach

@Zach 예,의 ::1IPv6 버전입니다 127.0.0.1. 동적 IP는 덜 편리하지만 어쨌든 나는 이것을 라이브 문제에 대한 일시적인 문제 해결 기술로 취급합니다. 적절한 로컬 디버그 설정을 대체하지 않습니다.
Rarst

아 알려 줘서 고마워 분명히 두 옵션 모두와 마찬가지로 @s_ha_dum answer (내가 올려 놓은 의견 외에도)와 함께 갈 것입니다. 다시 한 번 감사드립니다. 정말 감사합니다.
Zach

1

이것은 또한 가능한 트릭이지만 거기에 정의 된 wp-config.php이후 에 이것을 넣어야합니다 WP_DEBUG.

if ( isset( $_GET['debugsecret'] ) && 'debugsecret' == $_GET['debugsecret'] ) {
      define( 'WP_DEBUG', true );         
}

?debugsecret=debugsecret디버깅하려는 페이지 URL에 추가 하십시오.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.