web-dev-qa-db-ja.com

より柔軟なサイドバーとウィジェット管理

柔軟なサイドバー/ウィジェット管理のためのプラグインが欲しいのですが。実際、私はユーザーにどのサイドバーをページ/投稿ごとに表示するかを選択する可能性を与えたいと思います。

私はそこにたくさんのサイドバープラグインがあることを知っています。残念なことに、私は私の願いをすべてカバーするものを見つけていない。だから私はこれを自分でコーディングしたいのです。次のうちどれが最も柔軟で柔軟性がありますか。それとも他にアプローチがありますか?

可能性

  1. Register_sidebar呼び出しをplugin/functions.phpでハードコーディングし、post_edit.phppost_new.php画面用のメタボックスを追加します。

    • それほど柔軟ではありません。ユーザーが100ページあり、各ページに異なるサイドバーがある場合は、追加のサイドバーを手動で登録する必要があります。
  2. Nr.1と同じですが、コンディショナルタグ付きの汎用サイドバーテンプレートを使用してウィジェットを表示します。バックエンドでよりきめ細かいフィルタリングを行うために、プラグイン ウィジェットロジック を使用することもできます。

    • プログラマーや経験豊富なWordPressユーザーには向いていますが、普通のユーザーには向いていません。条件付きタグは、わかりやすい方法でマッピングする必要があります。また、is_page(id)は、異なる言語の投稿が別のIDで保存されている多言語サイトで問題を引き起こす可能性があります。
  3. Aフレキシブルサイドバーカスタム投稿タイプ。このCPTのすべての投稿は、与えられたコンテンツを表示するための一般的なサイドバーテンプレートで使用されています。サイドバーもカスタムメタボックス内で選択されます。ユーザーは大きなプラスであるデフォルトのWYSIWYGエディタでサイドバーにコンテンツを追加することができます。

    • 「本当の」サイドバーではありません。そのため、管理パネルのウィジェットサブページにウィジェットを追加できなくなりました。ウィジェット割り当て用に独自のメタボックスを作成する必要があります。
  4. 管理パネルのウィジェットサブページを修正して、WordPressであなた自身のサイドバーを作成/登録します。デフォルトのWYSIWYGエディタを使って汎用ウィジェットも作成します。添付ファイル付きのコンテンツを簡単にウィジェットに追加して、新しく作成したサイドバーにドラッグすることができます。ユーザーは、投稿/ページ管理画面のカスタムメタボックスのドロップダウンフィールドでこのサイドバーを選択できます。サイドバーを表示するには、汎用のサイドバーテンプレートも必要です。

結論

私の観点からは、Nr.4がうまくいくはずです。他に可能性はありますか?それともこれはすでにプラグインに存在しますか?

お返事をありがとうございます

2
rofflox

"Widget Logic"という拡張子があります。それはあなたがあなたが最も必要とする可能性があるものをアーカイブするのに使用できるphpコードの一部を追加できるadminセクションのすべてのサイドバーウィジェットにフィールドを追加します。

ちょっと面倒ですがうまくいきます。たとえば、多言語サイトでは、次のように関数に配列を渡すこともできるので、 "is_page"を使用できます。is_page(array(94,71,3))..論理演算子を使用して/ xor)をあなたと組み合わせて任意の組み合わせをアーカイブできます。

1
rasjani

これに似たものを扱うカスタムのものをいくつか作成しました。ここに、私が学んだことに基づいたいくつかの指針があります。

  • 最初に、要件がWP 5.xを許可する場合、サイドバーを完全に回避し、ユーザーにGutenbergブロックを与えることができるかどうかを確認します。コーディングと管理の悪夢のほとんどは、その内容が既にコアごとに作成されているため、なくなります。いくつかの作業を終えたら、書くのはそれほど難しくありません。
  • ユーザーがカスタムサイドバーを必要とする可能性があると思われる投稿タイプにメタボックスを添付しても問題はありません。そのページに必要なサイドバーの名前を入力させることもできます(または、select-existingまたはcreate-newのラジオオプション)。結果を_optionsテーブル(update_option()を使用)に保存し、ページの読み込み時に読み戻します。私はこれをやったが、それは比較的簡単だ。
  • おそらく遭遇する最大の問題は、ユーザーの複雑さです。開発者としては、1対多および多対多の関係が自然です。多くのユーザーは、このためにメタボックスが必要な理由を理解しません。これが、グーテンベルクブロックが非常に簡単な理由です。
  • WPコア関数のパイピングを変更するものについては、すべてに適切なデフォルトが設定されていることを確認してください。コンテンツ管理者がwouldこれを必要とする(または投稿タイプごとの画面オプションのデフォルトを変更する)投稿タイプを選択できる設定画面を作成することもできます。私は、適用された投稿を表示する管理画面上のテーブル、それらに関する情報、およびいくつかの簡単なadmin_ajax管理オプションを非常によく使いました。私のユーザーのほとんどはこれらに触れることはありませんが、私自身の管理とデバッグには非常に貴重です。
  • 優れた管理ツールを使用しても、これはおそらくすぐに管理の悪夢になります。サイトにカスタムサイドバーのある15ページがある場合、[外観]> [ウィジェット]ページはひどい混乱のように見えます(さらに、そこにはかなりのJSがあり、遅延します)。
  • これに対処する別の合理的な方法は、ページテンプレートを使用することです。これはpageにのみ適用されますが、UIはすでに存在します。異なる種類のアイテムが数種類しかない場合は、追加のテンプレートを使用してテーマまたは子テーマに追加することを検討してください。これにより、多くのコード、デバッグ、メンテナンスを節約できます。
  • 要件が要求しているために複雑になる場合は、「WPウェイ」に対してより侵襲性の低いアプローチを検討してください。 (たとえば)dynamic_sidebar()にはフィルターとアクションがあり、これらをフックして既存のサイドバーの動作を多少変えることができます。 CPTを使用してウィジェットフレームワークを書き換えると、多くのコア開発者が苦労するでしょう。それにもかかわらず、あなたがWPで十分長い間働いているなら、おそらくある時点でこのようなことをしたでしょう。
  • (あなたが尋ねたものに基づいて)あなたが本当に欲しいものが異なるサイドバーであることは完全にはわかりません。ウィジェット、コンテキスト認識のように。 get_option()get_user_meta()、および$_GET[]は、ウィジェットのレンダリングで使用できます。 i8nの場合は、カスタムウィジェットで位置認識コンテンツを使用し、単一のサイドバーで単一のコンテキスト認識ウィジェットを使用する方が適切な場合があります。私はこれをショートコードでも見ましたが、開発者としては、状況が許せば、一般的にウィジェットの管理決定論に満足しています。ウィジェットとショートコードは、ショートコードウィジェットとウィジェットショートコードでそれほど違いがないことに注意してください。
  • 最後に、表示されないウィジェットを作成したり、スタイル(またはカスタムスタイルシート)内の既存のウィジェットのCSSを変更することはそれほど難しくないことを覚えておいてください。 WP_TermタグはCSSクラスに表示されます(分類構造は既存のプラグインを使用して任意の投稿タイプに対してかなり簡単に有効にできます)。可能な限りシステムを検討してくださいウィジェットは設定されたとおりにサイドバーにありますが、ページの読み込みごとに適用できないウィジェットは非表示になり、投稿のタグ付け方法に基づいている可能性があります。これは若干互換性が劣りますが、要件にモダンブラウザ専用の許容値がある場合、その非互換性は洗い流されます。

あなたは思考の質問をしたので、私はあなたに思考の答えを与えました。これらのアイデアのいずれかがあなたが行きたい方向のように思えるなら、私はより具体的な例のために引き出すことができるかなりの量のコードを持っています。

1
Stephan Samuel