플러그인 데이터를 테마와 통합하는 방법


17

테마 통합을 제공하는 WordPress 플러그인 개발을위한 모범 사례에 대한 의견을 갖고 싶습니다.

이 질문을 할 때 이해하기 위해 궁금한 시나리오의 가상적인 예를 시작하겠습니다. "Discography"라는 플러그인을 생성한다고 상상해보십시오. Discography는 "밴드", "앨범"및 "트랙"의 세 가지 사용자 정의 게시물 유형을 등록합니다. 플러그인은 또한 각 게시물 유형에 대한 세부 정보를 제공하는 메타 상자와 각 게시물 유형을 구성하는 사용자 정의 분류법을 제공합니다. 이 게시물 유형은 게시물 2 게시물 플러그인 과 함께 묶여 있습니다. 관리자 내에서 사용자는 앨범과 연관 될 수있는 새 밴드를 추가 할 수 있으며,이 트랙은 트랙과 연관되며 메타 밴드 및 분류법을 통해 다른 많은 데이터가 추가됩니다.

이제이 플러그인이 사용자가이 정보를 입력 할 수 있도록 관리자를 설정하는 것을 원하지 않습니다. 데이터에 대한 기본 디스플레이를 제공하고 싶습니다. 이 관리자 만 있으면 고급 사용자 / 개발자가 좋습니다. 그녀가 그 데이터를 잡고 주제에 사용하는 것은 충분히 쉬울 것이다. 그러나 기본보기가 없으면이 플러그인은 대부분의 사용자에게 쓸모가 없습니다. 이 예에서는 다음과 같은 항목을 표시 할 수 있습니다 (괄호는 템플릿 계층 순서대로 정보를 표시 할 수있는 방법을 나타냄).

  • 밴드 (단일 접두사 -band.php, single.php, index.php, 단축 코드)
  • 앨범 (단일 접두어 -album.php, single.php, index.php, 단축 코드)
  • 트랙 (단일 접두어 -track.php, single.php, index.php, 단축 코드)
  • 밴드리스트 (template-band-list.php, page-band-listing.php, page- {id} .php, page.php, index.php, shortcode)
  • 앨범 목록 (template-album-list.php, page-album-listing.php, page- {id} .php, page.php, index.php, shortcode)
  • 앨범 타임 라인 (template-album-timeline.php, page-album-timeline.php, page- {id} .php, page.php, index.php, shortcode)

기본 템플릿 파일에는 각 게시물 유형에 필요한 모든 정보가 표시되지 않으므로 이러한 게시물 유형에 대한 기본 프레젠테이션이 중요합니다. 예를 들어 기본적으로 Twenty Eleven 테마는 앨범의 이름, 범주, 설명 및 게시 날짜 만 표시합니다. 앨범에는 그다지 유용하지 않습니다. 밴드, 릴리스 날짜, 레코드 레이블, 앨범 버전, 트랙 등을 가져 오는 단일 게시물 템플릿을 제공하고 싶습니다. 플러그인 개발자는 이것이 제공하는 것이 중요하다고 생각합니다. 템플릿이 모든 테마에서 작동하지는 않는다는 것을 알고 있지만 사용자 테마와 더 통합 될 수있는 기본값이 있어야합니다.

이 상황을 처리하는 가장 좋은 방법이 무엇인지 궁금합니다. 나는 당신이 다음 중 하나를 할 수 있다고 생각합니다.

단축

단축 코드는 개발자가 아닌 사람이 사이트의 어느 곳에 나 밴드, 앨범, 트랙, 밴드 목록 등을 추가 할 수있는 매우 유연하고 사용자 친화적 인 방법으로 사용될 수 있습니다. 특정 페이지에 밴드를 표시하거나 각 밴드에 대해 별도의 페이지를 만드는 데 도움이됩니다 (매우 효율적이지는 않지만 일부 사용자는 이런 방식으로 접근합니다). 단축 코드는 HTML을 생성하는데, 이는 원하는 데이터의 멋진 기본보기를 제공하는 제공된 CSS 파일에 연결됩니다. 모든 것은 플러그인 파일에 포함되며 테마로 수행 할 작업은 없습니다.

템플릿 파일

플러그인은 템플릿 파일과 함께 제공 될 수도 있습니다. 멋진 기본보기를 위해 템플릿 파일을 마크 업하고 스타일을 지정할 수 있습니다. 게시물 유형을 볼 때 테마가 올바른 템플릿을 찾도록 사용자가 파일을 테마 폴더로 이동하도록 지시 할 수 있습니다. 사용자가 한 번의 클릭으로 파일을 이동할 수있는 인터페이스를 제공 할 수도 있습니다 (참고 : 파일을 시작하지 않고 테마에 파일을 추가하는 것은 악의적이므로 활성화시 사용자의 테마 폴더에 파일을 만들지 않습니다) .

또한 필터를 사용하여 플러그인 폴더 밖으로 이동하지 않고 이러한 파일을 활용하여 모든 것을 독립적으로 유지할 수 있습니다. 이 목적으로 사용되는 "template_include"및 "{$ type} _template"필터를 보았습니다. 실제로 테마 폴더의 템플릿을 사용할 수 있으며없는 경우 이러한 필터를 사용하여 기본보기를 제공 할 수 있습니다.

질문

제시된 아이디어가 어떤 식 으로든 문제가 있고 내가 포함하지 않은 대안이 있다면 이러한 상황에 대한 모범 사례가 다른 사람들이 어떻게 생각하는지 알고 싶습니다.

감사합니다!


3
WPSE에 대한 모든 질문 만 잘 이해한다면 ... :)
scribu

@ scribu ... 귀하의 플러그인에 대한 링크를 포함했기 때문에;) 진심으로 감사합니다. 나는 이것이 어리석은 질문이 될까봐 걱정했지만 한동안 저를 괴롭 혔습니다.
tollmanz

나에게서 또 하나의 +1. "why"에 대해서는 @scribu comment를 읽으십시오.
카이저

@kaiser & scribu ...이 주제에 대해 당신의 생각을 나누기를 바랍니다. 당신이하는 말을 듣고 싶습니다.
tollmanz

@tollmanz 이미 끝났습니다. 그러나 이러한 강렬한 Q에는 약간의 생각과 시간이 필요합니다.
카이저

답변:


4

Q를 읽는 데 지금까지 충분한 시간이 걸렸기 때문에 요청 한 모든 Q에 대답 할 수는 없지만 무료 오픈 소스 플러그인 개발에 대한 개인적인 경험에 대한 통찰력을 제공하려고합니다.

1. 너무 많이하지 마십시오. 기능은 모든 플러그인의 죽음입니다. 기본 버전을 먼저 구축하고 사용자의 반응을 테스트하십시오. 플러그인에 많은 관심을 기울이면 대부분 요청되는 기능을 통합 할 수 있습니다.

2. 모든 사용 사례를 작성하지 마십시오. 플러그인을 유지해야합니다. WP는 3 개월마다 새로운 버전을 제공합니다. 때로는 모든 플러그인을 따라 가기가 어렵습니다. 예를 들어 : 새로운 버전의 설정 API는 현재 Trac 에서 논의됩니다. 이것이 완료되면 많은 플러그인 또는 테마 개발자가 많은 코드를 변경해야 할 수도 있고 나와 같은 일부 사람들은 API 위에 추상화 계층을 작성했을 수도 있습니다. 따라서 돌아가서 기본 / 추상화 레이어를 다시 작성한 다음 그 일부를 호출하는 모든 것을 다시 작업해야합니다. 나는 이것이 많은 일이라고 약속한다. 그리고 코드에 단단히 묶여 있으면 더욱더 좋습니다. 많은 유스 케이스를 작성하기 시작하면 모니터링해야 할 WP 코어 코드 진화가 많이 있으며 코드를 최신 상태로 유지하는 많은 작업이 있습니다.

3. 많은 코드 예제 (또는 템플릿)를 플러그인이나 테마에 묶어 놓지 마십시오. 개발자 최종 사용자 를 대상으로하는 경우 : 블로그를 사용하여 문서화하십시오. 개발자는 그런 것을 싫어하고 최종 사용자는 결코 만족하지 않습니다 (모든 사용 사례 작성 참조).

4. 코드를 현명하게 단일 파일로 나눕니다. 경험 법칙 : 한 부분에 대해 하나의 파일. 예 : styles.php, scripts.php, taxonomies.php, cpts.php 등 "어머니"(공장) 클래스에서 모든 것을로드하고 물건을 "플러그 가능"하게 유지하십시오. 내용을 다시 작성해야 할 경우 쉽게 찾을 수 있습니다. 개발자가 무언가를 찾고 있다면 쉽게 찾을 수 있습니다. 잘 명명 된 파일이 많이 있어도 해를 끼치 지 않습니다.

5. 기본 스타일 (클래스) 목록이 있으면이를 사용자에게 맡기십시오 . 테마 나 다른 플러그인의 스타일이 정의를 가로 챌 가능성이 너무 높습니다. 가능한 적은 텍스트로 어딘가에 설명하십시오.

6. 플러그인을 좋아하십시오. 당신이 지루하면 가자. :)


이제 간단히 말해서 플러그인 아이디어에 대해 자세히 설명합니다.

A. 템플릿 파일이 잘못되었습니다. 내가 말했듯이 : 블로그에 문서화하고 예제 마크 업과 스타일을 제공하십시오. 당신의 블로그는 이익이 될 것입니다 (그리고 당신은 광고를 가지고 있다면 당신도 마찬가지입니다).

B. 단축 코드는 쿨입니다. 플러그인이 사라지면 (대부분의 경우) 누구에게도 해를 끼치 지 않으며 나중에 사람들이 좋아하는 TinyMCE 버튼으로 확장 / 진화 될 수 있습니다.

C. 플러그인에 다른 플러그인이 필요한지 확인하십시오. 다른 플러그인이 종료되지 않거나 (이 경우 링크) 활성화되지 않은 경우 (활성화 할 때 사용자에게이를 수행 할 수있는 경우)이를 질문하고 admin_notices (register_activation_hook을 통해)에 메모를 추가하십시오. 또한이 플러그인은 신뢰할 수있는 소스에서 제공되며 향후 몇 년 동안 유지 될 것입니다.

참고 : 내가 쓴 것은 내 개인적인 의견 이상이며 내 경험을 반영합니다.


1
TinyMCE (또는 기타) 단축 코드 버튼의 경우 +1로,이 기술은 기술을 잘 모르는 사용자에게 유용하며 전체 테마 통합에 도움이됩니다.
Wyck

1
당신의 생각에 감사드립니다. 여기에는 일반적인 플러그인 지혜가 많이 있습니다. 내 질문에 관해서는, 당신의 방법이 테마 통합 측면에서 거의 제공하지 않는 것 같습니다. 오히려 사용자가 문서를 통해이를 파악하기를 원합니다. 왜 이것이 합리적인 방법인지 알 수 있지만 동시에이 파일을 사용하면 플러그인에 무언가 빠진 것처럼 느껴지는 많은 사용자가 생길 수 있습니다. 예를 들어, 밴드 / 앨범 / 트랙 표시 지원 기능이 내장되어 있지 않으면 사용자가 문제가 있다고 생각합니다.
tollmanz

고집하고 싶다면 실제로 짧은 코드를 사용하여 cpt에 마크 업을 추가하는 것이 좋습니다. 스타일과 관련하여 : 특정 스타일 시트가 child> parent 테마 폴더에 있는지 확인합니다. 예인 경우 : 핵심 스타일 시트를 자동으로 재정의 / 규칙 화합니다. 이 방법으로 최종 사용자로서 두 개발자를 모두 만족시킬 수 있습니다.
카이저

@kaiser ... 거기에 확실한 포인트가 있습니다.
tollmanz

2

어떤 측면에서 플러그인이나 테마를 만드는 것 사이의 균형을 측정해야합니다. 시나리오에 많은 사용자 정의 / 기능이 필요한 경우에는 항상 대신 테마를 만드는 것이 좋습니다. 그렇게하면 사용자는 항상 더 쉬운 모양으로 사용자 정의 할 수 있으며 사용자가 기능을 사용자 정의 할 수있게하고 (모든 곳에서 짧은 코드를 방해함으로써) 더 큰 기능 제어 기능을 가지며 다른 플러그인과 함께 작동합니다.

시중에 나와있는 다양한 테마와 긴밀하게 통합하려는 플러그인은 많은 문제를 야기하고 정직하게 많은 작업을 수행해야합니다.

예를 들어 음악 및 음반 관리에 기반한 매우 통합 된 플러그인을 작성하는 대신 해당 목적에 맞는 테마를 작성하면 사용자 정의 작업이 필요한 틈새 시장에서 점점 더 대중화되고 있습니다. 실제 예는 부동산 기반 테마가 될 것입니다. 이러한 깊은 기능 세트가 있기 때문에 플러그인을 사용할 방법이 없습니다. 테마는 테마를 활용할 수 있기 때문에 처음부터 테마로 생성됩니다. 어쨌든 플러그인의 모든 기능.

또한 마케팅 측면에서 틈새 테마는 프런트 엔드 기능의 균형을 맞추는 데 플러그인보다 낫습니다.


이것을 플러그인 (특히 마케팅 혜택)으로 개념화하는 것이 좋습니다. 이것의 가장 큰 문제는 항상 플러그인과 데이터가 전체 테마로 이어질 필요는 없다는 것입니다. 불행히도 테마가 필요한 사이트의 작은 구성 요소 일 수 있습니다. 그러나 모든 사용자 그룹을 만족시킬 수는 없으며 한 그룹을 목표로하는 것이 좋습니다.
tollmanz

2

가상 페이지

세 번째 기술은 플러그인의 자리 표시 자로 특수 페이지를 할당하고 'the_content'필터를 사용하여 출력 해야하는 모든 것을 출력하는 것입니다.

이런 방식으로, 머리글, 사이드 바, 바닥 글 및 래퍼 div를 다룰 필요가 없기 때문에 테마 구조와 조화를 이루는 템플릿을 만들 수 있습니다.

이에 대한 좋은 예는 bbPress 플러그인에서 찾을 수 있습니다.

http://bbpress.trac.wordpress.org/browser/branches/plugin/bbp-includes/bbp-core-compatibility.php?rev=3434#L931


코드 샘플을 제공 하시겠습니까? 나는 이것이 많은 플러그인 개발자 가보고 싶어하는 것 같아요. (+1).
카이저

새로운 bbPress 플러그인을 살펴볼 수 있습니다.
scribu

이것은 매우 흥미 롭습니다. 판단을 내리기 전에 코드를 살펴 봐야합니다.
tollmanz

@ scribu : 링크를 추가하기 위해 검색했지만 plugins.svn을 통해 찾을 수 없습니다. 후기 독자들을위한 링크를 게시 할 수 있습니까? 감사.
카이저

바로 거기에 있습니다 : wordpress.org/extend/plugins/bbpress :)
scribu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.