プラグインデータをテーマに統合する方法


17

テーマの統合を提供するWordPressプラグインを開発するためのベストプラクティスに関する意見を聞きたいと思います。

この質問をするときに意味をなすために、私が興味を持っているシナリオの仮説的な例から始めましょう。「Discography」というプラグインを作成するとします。ディスコグラフィーは、「バンド」、「アルバム」、「トラック」の3つのカスタム投稿タイプを登録します。プラグインは、各投稿タイプの詳細を提供するメタボックス、および各投稿タイプを整理するためのカスタム分類も提供します。これらの投稿タイプは、Posts 2 Postsプラグインと結びついています。管理者内で、ユーザーは新しいバンドを追加できます。新しいバンドはアルバムに関連付けられ、アルバムはトラックに関連付けられます。すべてのトラックには、メタボックスと分類法を介して他の多くのデータが追加されます。

さて、このプラグインでユーザーがこの情報を入力できるように管理者を設定するだけでは望ましくありません。データのデフォルトの表示を提供したいと思います。より高度なユーザー/開発者であれば、この管理者のみで十分です。彼女がそのデータを取得してテーマで使用するのは簡単です。ただし、一部のデフォルトビューがなければ、このプラグインはほとんどのユーザーにとって役に立たないでしょう。この例では、次のようなものを表示できます(括弧は、テンプレート階層の順に情報を表示する方法を示しています)。

  • バンド(single-prefix-band.php、single.php、index.php、ショートコード)
  • アルバム(single-prefix-album.php、single.php、index.php、ショートコード)
  • トラック(single-prefix-track.php、single.php、index.php、ショートコード)
  • バンドリスト(template-band-list.php、page-band-listing.php、page- {id} .php、page.php、index.php、ショートコード)
  • アルバムリスト(template-album-list.php、page-album-listing.php、page- {id} .php、page.php、index.php、ショートコード)
  • アルバムタイムライン(template-album-timeline.php、page-album-timeline.php、page- {id} .php、page.php、index.php、ショートコード)

デフォルトのテンプレートファイルには、各投稿タイプに必要なすべての情報が表示されないため、これらの投稿タイプにはデフォルトのプレゼンテーションがあることが重要です。たとえば、Twenty Elevenテーマでは、デフォルトで、アルバムの名前、カテゴリ、説明、投稿日のみが表示されます。アルバムにはあまり役立ちません。バンド、リリース日、レコードレーベル、アルバムバージョン、トラックなどを取り込む単一の投稿テンプレートを提供したいと思います。プラグイン開発者として、私はそれを提供することが重要だと感じます。テンプレートはすべてのテーマで機能するとは限りませんが、ユーザーのテーマとさらに統合できるデフォルトが必要です。

繰り返しますが、この状況に対処する最善の方法は何ですか?次のいずれかを実行できると思います。

ショートコード

ショートコードは、非開発者がサイト内のどこにでもバンド、アルバム、トラック、バンドリストなどを追加できるようにする非常に柔軟でユーザーフレンドリーな方法として使用できます。特定のページにバンドを配置したり、バンドごとに個別のページを作成したりするのに役立ちます(あまり効率的ではありませんが、一部のユーザーはこの方法でアプローチします)。ショートコードはHTMLを生成します。HTMLは、目的のデータの見やすいデフォルトビューを提供する提供されたCSSファイルに関連付けられます。すべてがプラグインファイル内に含まれ、テーマで何もする必要はありません。

テンプレートファイル

プラグインには、テンプレートファイルも同梱できます。テンプレートファイルをマークアップして、見やすいデフォルトビュー用にスタイル設定できます。投稿タイプが表示されたときにテーマが適切なテンプレートを見つけるように、ユーザーにファイルをテーマフォルダーに移動する指示を提供できます。ユーザーがシングルクリックでファイルを移動できるインターフェースを提供することさえできます(注:起動時にユーザーのテーマフォルダにファイルを作成することはありません。 。

また、フィルターを使用してこれらのファイルをプラグインフォルダーから移動せずに使用し、すべてを自己完結させたままにすることもできます。この目的で使用される「template_include」および「{$ type} _template」フィルターを見てきました。実際、themesフォルダーのテンプレートを使用できます。テンプレートが存在しない場合は、これらのフィルターを使用してデフォルトビューを提供できます。

質問

提示されたアイデアに何らかの問題がある場合、他の人がこれらの状況のベストプラクティスであると考えるもの、および私が含めていない代替案を知りたいです。

ありがとうございました!


3
WPSEに関するすべての質問が非常によく考えられた場合... :)
scribu

@scribu ...あなたのプラグインへのリンクを含めたので、あなたはそれを言っているだけです;)しかし、真剣に、賛辞をありがとう。これはばかげた質問になるのではないかと心配していましたが、しばらくの間悩んでいました。
トールマンズ

私からの別の+1。「理由」については、@ scribuコメントをお読みください。
カイザー

@kaiser&scribu ...このトピックについて、両方とも考えてください。私はあなたが言わなければならないことを聞きたいです。
トールマンズ

@tollmanzできました。しかし、このような激しいQには少し考えと時間が必要です。
カイザー

回答:


4

Qを読むのにこれまで十分な時間がかかったので、あなたが尋ねたすべてのQに答えることはできません;)

1.やりすぎないでください。機能はすべてのプラグインの死です。最初に基本バージョンをビルドし、ユーザーの反応をテストします。プラグインが多くの注目を集めるようになったら、ほとんどの場合に要求される機能を統合できます。

2.すべてのユースケースを埋めることは避けてください。プラグインを保守する必要があります。WPは3か月ごとに新しいバージョンを提供します。また、すべてのプラグインをフォローするのが難しい場合があります。例:Settings APIの新しいバージョンは現在Tracで議論されています。これが完了すると、多くのプラグインまたはテーマの開発者がコードの大部分を変更する必要があり、一部の人々-私のような-はAPIの上に抽象化レイヤーを作成している可能性があります。そのため、元に戻ってベース/抽象化レイヤーを書き直してから、その一部を呼び出すすべてのものを作り直す必要があります。これは大変な作業であることを約束します。そして、それがあなたのコードに密接に結び付けられていればさらにもっと。多数のユースケースを満たし始めると、監視する必要があるWPコアコードの進化も多くなり、コードを最新の状態に保つために多くの作業が必要になります。

3.多くのコード例(またはテンプレート)をプラグインやテーマにバンドルしようとしないでください。開発者エンドユーザーをターゲットにしたい場合:ドキュメントにブログを使用してください。開発者はそのようなものを嫌い、エンドユーザーは決して満足しません(参照:すべてのユースケースを満たします)。

4.コードを賢明に単一のファイルに分割します。経験則:1つのパーツに1つのファイル。例:styles.php、scripts.php、taxonomies.php、cpts.phpなど。「mother」(工場)クラスからすべてをロードし、「プラグ可能な」ものを保持します。何かを書き換える必要がある場合は、簡単に見つけることができます。開発者が何かを探している場合:彼らはそれを簡単に見つけます。多くの適切な名前のファイルは、害を与えません。

5。基本スタイル(クラス)のリストを取得した場合は、ユーザーに任せます。テーマや他のプラグインのスタイルが定義をインターセプトする可能性が高すぎます(どの程度の特殊性を投入しても)。できるだけテキストを少なくして、どこかで説明してみてください。

6。プラグインが大好きです。しかし、退屈している場合は手放します。:)


今-短い言葉で-プラグインのアイデアについての詳細:

A.テンプレートファイルは不良です。私が言ったように、あなたのブログにそれを文書化し、そこでマークアップとスタイルの例を提供してください。あなたのブログは利益を得るでしょう(そして広告があればあなたも)。

B.ショートコードはクールです。プラグインが(ほとんどの場合)なくなっていても、誰にも害はなく、後でTinyMCEボタン(人々が愛している)に拡張/進化させることができます。

C.プラグインに別のプラグインが必要であることを明確にします。他のプラグインが終了しない場合(この場合はリンクする)またはアクティブ化されていない場合(アクティブ化時にユーザーに対してこれを行うことができます)、これに質問し、admin_noticesに(register_activation_hookを介して)メモを追加します。また、このプラグインは信頼できるソースから提供され、今後数年間維持されることに注意してください。

注:私が書いたものは、私の経験を反映した個人的な意見以上のものではありません。


1
TinyMCE(またはその他の)ショートコードボタンに+1を使用すると、この手法は技術に精通していないユーザーにとって非常に役立ち、テーマの統合全体に役立ちます。
ワイク

1
ご意見ありがとうございます。ここには一般的なプラグインの知恵がたくさんあります。私の質問に関して言えば、あなたの方法はテーマの統合に関してほとんど何も与えないように思えます。むしろ、ユーザーにドキュメントでそれを理解してもらいたいのです。なぜこれが合理的な方法であるかはわかりますが、同時に、このようにファイルすると、多くのユーザーがプラグイン内に何かが欠けていると感じるようになります。私の例では、バンド/アルバム/トラックを表示するためのサポートが組み込まれていないと、ユーザーは何かが壊れているように感じると思います。
トールマンズ

引き続き使用したい場合は、ショートコードを使用してcpt(または他の場所)にマークアップを追加することをお勧めします。スタイルについて:特定のスタイルシートがchild> parent themeフォルダーのどこかに存在するかどうかを確認するだけです。「はい」の場合:コアスタイルシートを静かにオーバーライド/ルールします。このようにして、両方の開発者をエンドユーザーとして満足させることができます。
カイザー

@kaiser ...両方のソリッドポイントがあります。
トールマンズ

2

いくつかの点で、プラグインまたはテーマの作成のバランスを検討する必要があります。シナリオで多くのカスタマイズ/機能が必要な場合、通常は代わりにテーマを作成することをお勧めします。そうすれば、ユーザーは外観の面でカスタマイズすることができます。これは、ユーザーに機能をカスタマイズするよりも簡単です(どこにでもショートコードを詰め込むことで)、より優れた機能制御があり、他のプラグインなどで動作します

市場のすべてのさまざまなテーマと緊密に統合しようとするプラグインは、多くのトラブルを引き起こし、正直なところ多くの作業を引き起こします。

たとえば、音楽とディスコグラフィーの管理に基づいて非常に統合されたプラグインを作成する代わりに、その目的のテーマを作成する代わりに、カスタム作業を必要とするニッチ市場で人気が高まっています。現実世界の例は、不動産ベースのテーマです。テーマに活用できるため、このように深い機能セットがあるため、このためにプラグインを使用する方法はありません。代わりに、テーマとして一から作成されます。とにかくプラグインのすべての機能。

また、マーケティングの観点から、フロントエンド機能のバランスを取る際に、ニッチテーマがプラグインよりも優れている可能性があります。


これをプラグインとして概念化することの良い点(特にマーケティング上のメリット)。これに関する最大の問題は、プラグインとそのデータがテーマ全体につながる必要があるということではないということです。残念ながら、テーマを必要とするサイトの小さなコンポーネントにすぎない場合があります。ただし、ユーザーのすべてのグループを満足させることは不可能であり、1つのグループを狙うほうがよいという、より広いポイントを得ています。
トールマンズ

2

仮想ページ

私が見た3番目の手法は、プラグインのプレースホルダーとして特別なページを割り当て、「the_content」フィルターを使用して出力する必要があるものをすべて出力することでした。

このようにして、ヘッダー、サイドバー、フッター、ラッパーdivを扱う必要がないため、テーマ構造と調和するテンプレートを作成できます。

これのすばらしい例は、bbPressプラグインにあります。

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


コードサンプルを提供しますか?これは多くのプラグイン開発者が見たいものだと思います。(+1)。
カイザー

例については、新しいbbPressプラグインをご覧ください。
スクリブ

これは非常に興味深いです。判断を下す前にコードを確認する必要があります。
トールマンズ

@scribu:リンクを追加するために検索していましたが、plugins.svnで見つけることができません。後の読者のためにリンクを投稿してもらえますか?ありがとう。
カイザー

すぐそこにあります:wordpress.org/extend/plugins/bbpress :)
scribu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.