참고 : 이 답변은 @scribu와 @kaiser 간의 토론을보다 쉽게하기위한 것입니다. 개조 : 삭제하지 마십시오. 사용자 / 독자 : 투표하지 마십시오. 토론을 따르려면 개정 / 편집 로그를보십시오. 토론에 참여하려면 답변을 편집하십시오. 토론에 결과가 있으면 그와 같이 표시됩니다. 감사합니다.
시나리오
플러그인 의존성을 가질 수있는 가중치가 다른 시나리오도 있습니다. (이 예제는 허구 일뿐입니다). "(부모) 플러그인"이라는 단어는 부모의 관점에서 "테마"와 교환 될 수 있습니다.
- (하드) 기능 만 확장하거나 기존 플러그인의 표시 (및 유사)를 변경하여 부모 없이는 존재할 수없는 하위 플러그인입니다. 예 : BuddyPress»BuddyPress-FunkyCommentDisplay
- (정상) 하위 플러그인이 활성화 될 때 기능이 확장 된 플러그인입니다. 예 : jQueryAttachmentCarousel»jQuerySlideDeck
- (소프트) 기능 만 추가하는 플러그인. 예 : DisneyWonderlandTheme»MickeysSocialLinks
다음에서는 "other"플러그인을 업데이트 할 때 발생하는 상황을 스케치하려고하는데 검사가 더 이상 작동하지 않습니다.
- 광고 1) BuddyPress가 활성화되지 않은 상태에서 플러그인을 사용할 수 없습니다»물건이 완전히 파손되었습니다.
- 광고 2) 플러그인은 회전식 메뉴에서 슬라이드 덱으로 전환하는 옵션을 제공 할 수 없습니다»유선으로 표시됩니다 (스타일이 슬라이드 덱으로 수정되었다고 가정합니다).
- Ad 3) MickeysSocialLinks가 사라집니다.
검사
플러그인이 활성화되어 있는지 확인하려는 경우 확인할 세 가지 가능성이 있습니다.
- A. 폴더가 있습니까?
- B. 메인 파일 (옵션)
'active_plugins'
이 존재합니까?
- C. 특정 기능이 존재합니까?
이제 내부 링크 검사기 플러그인 을 예로 들어 공개 API를 제공하지 않고 확장 할 의도가 없다면 요청시 또는 의도대로 내부 함수 이름을 변경하지 않을 이유가 없습니다 (작성자로서). . 따라서 누군가 가이 플러그인을 피기 백하려고하면 업데이트시 기능과 번들링의 견고성에 따라 문제가 발생합니다. 파일 이름도 마찬가지입니다. 파일 이름을 변경하지 않을 실제 이유 (플러그인이 업데이트시 플러그인이 비활성화되는 것을 제외하고)는 없습니다. 폴더 이름을 변경하지 못하게하는 유일한 방법은 공식 리포지토리에서 호스팅되는 경우 파일 이름에 대해 업데이트 확인 및 알림이 실행된다는 것입니다.
따라서 (부모) 플러그인의 가장 약한 (변경하기 쉬운)에서 가장 힘든 (변경에 반대하는) 부분까지는 다음과 같습니다.
기능»메인 파일 이름»폴더
함수 검사가 사용하는 것보다 덜 취약하다고 말했을 때 is_plugin_active()
문제의 함수가 플러그인 작성자가 명시 적으로 권장하는 것으로 가정했습니다. 이것의 궁극적 인 예 wp_pagenavi()
는 WP-PageNavi 플러그인이 제공 하는 템플릿 태그입니다.
종속성을 정의하는 데 어려움은 파일 이름이 포함되지 않은 플러그인을 고유하게 식별하는 표준 방법이 없다는 것입니다.
주제에 대한 더 많은 생각 :
http://wordpress.org/support/topic/plugin-plugin-dependencies-unreliable-plugin-namingidentifying-scheme
지금까지 세 가지 점으로 요약 할 수 있습니다.
- 우리는 약간 다른 주제에 대해 이야기했습니다
- 우리는 내가 생각했던 주제를 해결할 수있는 방탄 방법이 없다는 것에 동의합니다
- 질문에 대한 당신의 이해에서, 당신은 유효한 갈 길을 제안했습니다
내가 생각할 수있는 가장 현명한 방법은 이미 (너무 덜 적은) 플러그인에서 보았습니다.
// inside the plugin file:
add_action( 'plugin_custom_hook', 'plugin_trigger' );
// inside some template:
do_action( 'plugin_custom_hook' );
그것에 대해 너무 자세하게 생각하지 않고 '모든'필터에 대한 확인에 통지를 걸고 후크 에있을 때 트리거되면 현재 필터 내부를 확인할 수 있다고 생각합니다 shutdown
...?
후크를 사용하면 '정상'및 '약한'종속성에 적합합니다. 유일한 단점은 여전히 사용해야 function_exists()
하거나 is_plugin_active()
종속성이 충족되지 않은 경우 중지하려는 경우입니다. 이를 위해 '전체'필터를 사용하면 너무 비싼 IMO가됩니다.
@scibu이 주제는 "귀하의"주제를 대상으로합니다. (나는 이미 내 이야기를 중단했다). :)
따라서 기본적으로 의존성이 필요하고 훌륭한 작성자가 있다면 템플릿 태그 대신 후크를 제공 할 수 있습니다. 플러그인은 후크가 존재하거나 단순히 아무것도하지 않을 경우에만 플러그인에 연결되기 때문입니다. 그리고 다른 한편으로는 플러그인이 없으면 오류가 발생하지 않습니다.
어려운 부분은 다음과 같습니다 (또는 Q 이상). 사용자에게 "»DisneyWonderLinks«를 설치해야합니다"종속성을 알리기 위해 관리자 통지를 작성하려면을 확인하십시오 array_keys( $GLOBALS['wp_filter']['template_tag_like_hook'] )
. 이것이 작동하는지 확실하지 않지만 어레이 (공공 / 관리자) 모두에서 액세스 할 수 있어야합니다.
작동하지 않습니다. 콜백이 후크에 등록되었다고해서 후크가 예상 될 때 트리거되는 것은 아닙니다. 일종의 작업이 될 유일한 것은 앞에서 언급 한 '종료'훅을 사용하는 것입니다.
add_action( 'shutdown', function() {
if ( !did_action( 'template_tag_like_hook' ) )
echo 'Problem.';
} );
물론 이것은 </html>
태그 뒤의 맨 끝에 인쇄됩니다 (템플릿 태그가 일반적으로 사용되는 위치이기 때문에).
메시지를 wp_options에 저장 한 다음 관리 영역에 표시 할 수 있지만 무효화, 플러그인 캐싱 등 완전히 새로운 웜 캔이 열립니다.
function_exists
일반 사용자는 다른 플러그인이 의존하는 플러그인을 설치하지 않았다는 메시지를 받게됩니다. 문제는 사용자가 실제로 있다는 것입니다 것 플러그인을 설치 한 후 바로 이유를 궁금해 작업 넣은 사람은 아니다 . 아, 그리고 난 당신을 위해 투표 하지 않을 것입니다.