ホームページ >CMS チュートリアル >&#&プレス >WordPressを使用したオブジェクト指向開発
オブジェクト指向コードはどこにでもあり、WordPressも例外ではありません。
WordPressのコアは、データベースの操作からサイトのルックアンドフィールまで、すべてを制御するために使用される一連のオブジェクト/クラスの上に構築されています。 このチュートリアルを通して、WordPressのために開発する際に、オブジェクト指向のデザインと、次のような開発時にこれらを実際に使用する方法を検討します。オブジェクト指向のデザインとは何かを正確に理解してください。
オブジェクト指向のデザインを使用する理由について
議論してください。キーテイクアウト
WordPressグループのオブジェクト指向設計(OOD)クラスに関連する機能と情報をクラスに関連付け、コードの組織とメンテナンスを強化します。
oodは、カプセル化によるより良い組織、継承によるスケーラビリティ、コードの再利用と管理を容易にするためのモジュール性などの利点を提供します。チュートリアルは、WordPressでカスタムイベントショーケースを作成し、OOD原則の実装を実証する実用的な例を提供します。 この例の重要な手順には、ディレクトリ構造の設定、クラスファイルの作成、カスタムコンテンツタイプとメタボックスを追加および表示するための関数の実装が含まれます。
このガイドは、手続き上のプログラミング、組織、スケーラビリティ、およびモジュール性を強調するOODの利点を強調しています。手続きコードがうまくいったので、オブジェクト指向のアプローチで開発することのポイントは何だろうと思っているかもしれません。
手続き設計には「間違っている」ものは何もありませんが、よりオブジェクト指向のスタイルで開発することにはいくつかの利点があります。組織
プロジェクトを取り上げて、サイトのさまざまな要素を作成するために使用される関数と変数を見つけるために狩りをしなければならないことほど悪いことはありません(不明な理由で複数のファイルに常に広がられています)。
スケーラビリティオブジェクト指向のアプローチで問題を解決する場合、クラスを作成します。
これらのクラスは、継承を使用して拡張することで拡張またはスケーリングできます。継承すると、新しいクラスへのすべてのプロパティと方法にアクセスできる別のクラスに基づいたクラスを作成できます。
クラスを拡張して追加の機能を実行したり、その方法とプロパティをオーバーライドして状況に応えることさえできます。オブジェクト指向設計の目的は、すべての機能をカプセル化して、クラスへの状況を解決することです。
問題を解決するためのすべてのコードはクラス内にあり、そのクラスは一般に独自のPHPファイル内にあるため、ファイル全体を取り上げて別の場所で使用できます。したがって、それは本質的にモジュール式です。
これの利点は、クラスを十分に書く場合、後でそれらを再利用できるようになり、わずかなカスタマイズを実行する必要があることです。手続きコードをコピーして貼り付けることはできますが、通常はよく整理されておらず、必要な機能を確保するために複数のファイルを使用する必要がある場合があります。
例のシナリオ - シンプルなイベントショーケースの作成このシナリオでは、クライアントがイベントを作成および管理できる場所にある場所を望んでいます。これらのイベントは、今後のトリビアナイト、ビンゴコンペティション、その他の楽しいアクティビティを促進するために使用されます。
最初のステップは、ソリューションを計画できるように、目的の機能を分解することです(ここでうまく計画することで、今後オブジェクト指向のアプローチが役立ちます)。私たちのシナリオでは、次のタスクのセットを見ることができます:すべてを整理する簡単な方法は、子供のテーマ内にディレクトリを含むことを作成することです。このディレクトリには、テーマに含まれる他のコードまたは機能が含まれます/実装(必要なものは何でも呼び出すことができます。目的は、テーマ内に単一のディレクトリを持つことです)。 このディレクトリ内では、別のフォルダーを作成する必要があります。今回はevent_showcaseと呼ばれます。このフォルダー内にあり、このシナリオに該当するすべてのファイルを配置します。 また、JSとCSSフォルダーも必要です。
機能をフォルダーに整理することは、今後、テーマをどのモジュール /機能が実装するかをより簡単に確認できることを意味します。たとえば、テーマに別の機能セットを実装することをお勧めします。新しいフォルダーを追加するだけで、論理的にすべてがきちんと整理されています。例のファイルを作成し、それらを正しいディレクトリに移動しましょう
event_showcase_admin_styles.css
event_showcase_admin_scripts.js
event_showcase_public_styles.css
event_showcase_public_scripts.js
クラスの作成
次のコードをクラスファイルにコピーします。
<span>//Theme functions for child theme </span> <span>//load our event showcase class </span><span>$event_showcase = get_stylesheet_directory() . '/includes/event_showcase/event_showcase_class.php'; </span><span>include($event_showcase);</span>
プロセスフローを理解できるように、メソッドとプロパティを実行しましょう。
add_actionは、以前に見たかもしれないものとは少し異なって見えると思っているかもしれません。あなたは正しいです。
CSSとJSをエンキューするため、ファイルディレクトリURLをアクセスできる変数に保存することは理にかなっています。私たちのディレクトリ構造は /include /event_showcaseですが、構造に合わせてカスタマイズできます。
<span>//Theme functions for child theme </span> <span>//load our event showcase class </span><span>$event_showcase = get_stylesheet_directory() . '/includes/event_showcase/event_showcase_class.php'; </span><span>include($event_showcase);</span>check_flush_rewrite_rules()
書き換えにより、コンテンツタイプがきれいな形式に変換されるようになりますが、この書き換えは高価であり、過度に行われた場合はサイトを遅くすることができます。書き換えはサイトに影響を与える可能性があるため、一般的にテーマ/プラグインのアクティブ化または非アクティブ化でのみ変更されます。
パーマリンクを手動で更新したくない場合があるため、この関数はWordPressに自動的に1回だけ実行するように求めます(新しいコンテンツタイプが追加された後)。
この関数は、テーマオプションを介してWebサイトをフラッシュする必要があるかどうかを確認します。フラッシュが必要な場合は、パーマリンクを更新してから、オプションの値をfalseに設定します(したがって、ページをロードするたびにではなく、1回だけトリガーされます)。enqueue_public_scripts_and_styles()
この関数は、フロントエンドのWebサイトのスクリプトとスタイルのエンキューを処理します。
<span>/* </span><span> * Event Showcase </span><span> * Creates an 'event' content type to showcase upcoming functions and information </span><span> * Uses hooks and filters inside your theme to output relevant information </span><span> */ </span> <span>class event_showcase{ </span> <span>//variables </span> <span>private $directory = ''; </span> <span>private $singular_name = 'event'; </span> <span>private $plural_name = 'events'; </span> <span>private $content_type_name = 'event_showcase'; </span> <span>//magic function, called on creation </span> <span>public function __construct(){} </span> <span>//sets the directory (path) so that we can use this for our enqueuing </span> <span>public function set_directory_value(){} </span> <span>//check if we need to flush rewrite rules </span> <span>public function check_flush_rewrite_rules(){} </span> <span>//enqueue public scripts and styles </span> <span>public function enqueue_public_scripts_and_styles(){} </span> <span>//enqueue admin scripts and styles </span> <span>public function enqueue_admin_scripts_and_styles(){} </span> <span>//adding our new content type </span> <span>public function add_content_type(){} </span> <span>//adding meta box to save additional meta data for the content type </span> <span>public function add_meta_boxes_for_content_type(){} </span> <span>//displays the visual output of the meta box in admin (where we will save our meta data) </span> <span>public function display_function_for_content_type_meta_box($post){} </span> <span>//when saving the custom content type, save additional meta data </span> <span>public function save_custom_content_type($post_id){} </span> <span>//display additional meta information for the content type </span> <span>//@hooked using 'display_additional_meta_data' in theme </span> <span>function display_additional_meta_data(){} </span> <span>} </span> <span>//create new object </span> <span>$event_showcase = new event_showcase;</span>enqueue呼び出しのコンテンツタイプの名前を使用して、他のプラグインとの命名競合がないようにする必要がないようにします(ユニークなものに変換されます。
enqueue_admin_scripts_and_styles()
この関数は、管理者のバックエンドでWebサイトのスクリプトとスタイルのエンキューを処理します。
コンテンツタイプの編集画面または新しい画面に表示されているかどうかを確認してください。wp_enqueue_styleとwp_enqueue_scriptの両方を呼び出して、本質的に私たちのパブリック関数と同じようにリソースをロードします。
この例では、jQuery UI DatePicker(jQuery UIライブラリの一部)とjQuery UI Time Picker(Date Pickerと同様のスタイルを持つように構築されている)の両方を使用しています。上記のリンクからタイムピッカーライブラリをダウンロードして、ディレクトリ内に関連するCSSおよびJSファイルを含めてください。
<span>//variables </span><span>private $directory = ''; </span><span>private $singular_name = 'event'; </span><span>private $plural_name = 'events'; </span><span>private $content_type_name = 'event_showcase';</span>add_content_type()
カスタムコンテンツタイプの登録に関するより詳細なアウトラインについて
ここにコンテンツタイプに必要なメタボックスを追加します。 add_meta_box関数を呼び出して、機能を提供します。短編小説は、これを使用して新しい管理者ボックスを作成して、保存したい新しいフォーム要素を保持することです。
この例では、エンドユーザーに表示するイベントに関する日付、時間、その他の情報を収集しています。
最初に、メタボックスに追加したノンセを確認し、その信ity性を確認します。この後、AutoSaveを実行しておらず、ユーザーが実際にこのページを編集できることを確認します。これらのチェックのすべてが渡された場合、私たちは前進します。 すべての値を変数に収集し、sanitize_text_field関数を使用してそれらを消毒します。この後、データを保存するためにupdate_post_meta関数を呼び出します。
do_action( 'display_content_type_meta')を呼び出すことができます。テーマ内のどこからでも(このコンテンツタイプの単一の投稿にある限り)、メタ情報が表示されます。
この関数は、グローバル$ POSTと$ POST_TYPEを取得し、表示されている現在のアイテムが新しいコンテンツタイプであることを確認します。
この後、関数はメタ情報を収集して表示します(途中でいくつかのクイックチェックを作成します)。
追加ファイル、CSSおよびJS 機能の大部分が完了したので、CSSおよびJSファイルに交換して、いくつかのスタイルとインタラクティブ性をすばやく追加します。
オブジェクト指向のデザインの実用的な例と、開発を強化するのがどれほど簡単であるかを見たので、これらのスキルを適用して、より良いテーマとプラグインを構築できます。
WordPress <span>//Theme functions for child theme
</span>
<span>//load our event showcase class
</span><span>$event_showcase = get_stylesheet_directory() . '/includes/event_showcase/event_showcase_class.php';
</span><span>include($event_showcase);</span>
display_function_for_content_type_meta_box($ post)
この関数を使用して、コンテンツタイプの新しいメタ情報のバックエンドオプションを出力します。
<span>/*
</span><span> * Event Showcase
</span><span> * Creates an 'event' content type to showcase upcoming functions and information
</span><span> * Uses hooks and filters inside your theme to output relevant information
</span><span> */
</span>
<span>class event_showcase{
</span>
<span>//variables
</span> <span>private $directory = '';
</span> <span>private $singular_name = 'event';
</span> <span>private $plural_name = 'events';
</span> <span>private $content_type_name = 'event_showcase';
</span>
<span>//magic function, called on creation
</span> <span>public function __construct(){}
</span> <span>//sets the directory (path) so that we can use this for our enqueuing
</span> <span>public function set_directory_value(){}
</span> <span>//check if we need to flush rewrite rules
</span> <span>public function check_flush_rewrite_rules(){}
</span> <span>//enqueue public scripts and styles
</span> <span>public function enqueue_public_scripts_and_styles(){}
</span> <span>//enqueue admin scripts and styles
</span> <span>public function enqueue_admin_scripts_and_styles(){}
</span> <span>//adding our new content type
</span> <span>public function add_content_type(){}
</span> <span>//adding meta box to save additional meta data for the content type
</span> <span>public function add_meta_boxes_for_content_type(){}
</span> <span>//displays the visual output of the meta box in admin (where we will save our meta data)
</span> <span>public function display_function_for_content_type_meta_box($post){}
</span> <span>//when saving the custom content type, save additional meta data
</span> <span>public function save_custom_content_type($post_id){}
</span> <span>//display additional meta information for the content type
</span> <span>//@hooked using 'display_additional_meta_data' in theme
</span> <span>function display_additional_meta_data(){}
</span> <span>}
</span>
<span>//create new object
</span> <span>$event_showcase = new event_showcase;</span>
このステップがすべて完了したら、新しい空のメタボックスが変換され、新しい情報をすべて保持できるようになりました。
save_custom_content_type($ post_id)<span>//variables
</span><span>private $directory = '';
</span><span>private $singular_name = 'event';
</span><span>private $plural_name = 'events';
</span><span>private $content_type_name = 'event_showcase';</span>
display_additional_meta_data()この関数は、新しいコンテンツタイプ(単一イベント)の単一の投稿の保存されたメタ情報を表示します。
このアクションの2番目の値は、display_additional_meta_dataと呼ばれ、この関数に対応しています。これは、誰かがdo_action( 'display_content_type_meta')を呼び出すときはいつでも;この関数を呼び出して、新しい投稿メタ情報を表示します。<span>//Theme functions for child theme
</span>
<span>//load our event showcase class
</span><span>$event_showcase = get_stylesheet_directory() . '/includes/event_showcase/event_showcase_class.php';
</span><span>include($event_showcase);</span>
event_showcase_public_styles.css event_showcase_admin_scripts.js
<span>/*
</span><span> * Event Showcase
</span><span> * Creates an 'event' content type to showcase upcoming functions and information
</span><span> * Uses hooks and filters inside your theme to output relevant information
</span><span> */
</span>
<span>class event_showcase{
</span>
<span>//variables
</span> <span>private $directory = '';
</span> <span>private $singular_name = 'event';
</span> <span>private $plural_name = 'events';
</span> <span>private $content_type_name = 'event_showcase';
</span>
<span>//magic function, called on creation
</span> <span>public function __construct(){}
</span> <span>//sets the directory (path) so that we can use this for our enqueuing
</span> <span>public function set_directory_value(){}
</span> <span>//check if we need to flush rewrite rules
</span> <span>public function check_flush_rewrite_rules(){}
</span> <span>//enqueue public scripts and styles
</span> <span>public function enqueue_public_scripts_and_styles(){}
</span> <span>//enqueue admin scripts and styles
</span> <span>public function enqueue_admin_scripts_and_styles(){}
</span> <span>//adding our new content type
</span> <span>public function add_content_type(){}
</span> <span>//adding meta box to save additional meta data for the content type
</span> <span>public function add_meta_boxes_for_content_type(){}
</span> <span>//displays the visual output of the meta box in admin (where we will save our meta data)
</span> <span>public function display_function_for_content_type_meta_box($post){}
</span> <span>//when saving the custom content type, save additional meta data
</span> <span>public function save_custom_content_type($post_id){}
</span> <span>//display additional meta information for the content type
</span> <span>//@hooked using 'display_additional_meta_data' in theme
</span> <span>function display_additional_meta_data(){}
</span> <span>}
</span>
<span>//create new object
</span> <span>$event_showcase = new event_showcase;</span>
アクションの完成した機能!
<span>//variables
</span><span>private $directory = '';
</span><span>private $singular_name = 'event';
</span><span>private $plural_name = 'events';
</span><span>private $content_type_name = 'event_showcase';</span>
すべてがまとめられている場合、追加のメタデータを使用して新しい「イベント」を作成できるはずです。イベントを表示するときは、以下のサンプルに何かを表示する必要があります
<span>//magic function, called on creation
</span><span>public function __construct(){
</span>
<span>$this->set_directory_value(); //set the directory url on creation
</span> <span>add_action('init', array($this,'add_content_type')); //add content type
</span> <span>add_action('init', array($this,'check_flush_rewrite_rules')); //flush re-write rules for permalinks (because of content type)
</span> <span>add_action('add_meta_boxes', array($this,'add_meta_boxes_for_content_type')); //add meta boxes
</span> <span>add_action('wp_enqueue_scripts', array($this,'enqueue_public_scripts_and_styles')); //enqueue public facing elements
</span> <span>add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_scripts_and_styles')); //enqueues admin elements
</span> <span>add_action('save_post_' . $this->content_type_name, array($this,'save_custom_content_type')); //handles saving of content type meta info
</span> <span>add_action('display_content_type_meta', array($this,'display_additional_meta_data')); //displays the saved content type meta info
</span><span>}</span>
追加のサブタイトル、日付、時間、チケットデータを見ることができます。
このような基本的な投稿タイプを拡張し、追加の要素を追加することで、よりインタラクティブで簡単なWebサイトを管理するのに役立ちます。ユーザーは、乱雑で使用が困難で一貫性がないコンテンツ領域を介して、そのすべての情報を追加する必要はなくなります。インターフェイスを簡単に管理できるようになりました。
ここからどこへ?
この記事が開発を計画し、オブジェクト指向の方法論が時間と労力の両方を節約する方法を確認するのに役立つことを願っています。
WordPressオブジェクトキャッシュとは?データベースからデータをメモリに保存して、不必要なクエリを防ぐことによるパフォーマンス。これにより、WordPressがデータベースの負荷を減らすとWordPressを大幅に高速化できます。
はい、WordPressプラグインを使用してオブジェクト指向のプログラミングを使用できます。実際、多くのWordPressプラグインはOOP原則を使用して記述されています。これにより、より複雑な機能が可能になり、プラグインコードの管理と保守が容易になります。
以上がWordPressを使用したオブジェクト指向開発の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。