このシリーズでは、WordPress バックエンドの特定の管理ページに表示されるカスタム メッセージをプログラムで定義できるシステムを実装する方法を学びました。
これまでこのシリーズをご覧になっている方ならご存知でしょう:
前のチュートリアルで述べたように:
しかし、私のこれまでのチュートリアルを読んだことがある方なら、私が重複したコードを好まないことをご存知でしょう。また、1 つのクラスで多くのことを行うのは好きではありません。残念ながら、それがまさに私たちがやっていることなのです。
この問題は最後のチュートリアルで解決します。最終的には、いくつかの中間オブジェクト指向原則 (継承など) を使用する完全なリファクタリング ソリューションが完成します。また、プログラムで使用できる方法、または WordPress フック システムに登録できる方法もいくつか紹介します。
この時点で、ローカル開発環境で何が必要なのかを正確に知る必要があります。具体的には、次のものが必要です:
今後行われるすべての変更を段階的に実行できるため、ソース コードの最新バージョンもお勧めします。お持ちでない場合でも問題ありませんが、続行する前に前のチュートリアルを読むことをお勧めします。
覚えているかもしれません (または上記のコメントからわかるように)、前のチュートリアルでは、作業が多すぎるクラスが残されました。
これを理解する 1 つの方法は、クラスが何を行っているかを説明しようとすると、1 つの答えを与えることはできないということです。代わりに、成功メッセージ、警告メッセージ、エラー メッセージを処理し、すべてのメッセージを互いに独立して表示する責任があると言わなければなりません。
「カスタム メッセージを管理する」と言っても、そのクラスがどれほど冗長であるかは必ずしも説明できません。これがこのチュートリアルで解決したいことです。
具体的には、次のことを検討します:
作業は完了したので、上記のすべての実行を開始しましょう。
作業をリファクタリングするとき、何をしたいのかを正確に知ることが役立ちます。私たちの場合、圧縮できる重複コードが多数あることに気付きました。
さらに、3 つの異なるタイプのメッセージを、表示方法を除いてまったく同じ方法で管理します。この場合、HTML クラスの属性に問題があります。
したがって、特定の タイプ に焦点を当てるようにこのコードを一般化することができ、その を識別する方法を一般化することで、成功メッセージを追加したりエラー メッセージを取得したりするメソッドの多くを統合できます。 「メソッド」>「」と入力します。
最終的にはこれをやります。しかし、その前に、いくつかのハウスキーピングを行う必要があります。
###1。古い設定を削除します。 というクラスを使用してきました。これまでのところ、その目的は果たしていますが、チュートリアルの残りの部分でこのクラスをリファクタリングします。
このタイプのリファクタリングになると、クラスを削除して最初からやり直したくなりがちです。それが適切な場合もありますが、これはそうではありません。代わりに、コースを受講して、すでにあるものをリファクタリングします。
これはすべて説明のためです。ファイルを削除せずに、新しいファイルを使用し始めてください。代わりに、このチュートリアルで行ったことを記録してください。
###2。新しい設定メッセージ クラス最初に、
任意の タイプのセットアップ メッセージを表します。つまり、成功メッセージ、エラー メッセージ、警告メッセージを管理します。
これを行うには、クラスを定義し、プロパティを導入し、コンストラクターでそれをインスタンス化します。このコードをチェックしてください。以下で詳しく説明します:
リーリー
$messages
を作成したことに注意してください。このクラスをインスタンス化するときに、多次元配列を作成します。success、
error、または
warning で識別される各インデックスは、対応するメッセージを保存する独自の配列を参照します。
接下来,我们需要能够添加消息、获取消息以及获取所有消息。我将立即更详细地讨论其中的每一个。
首先,让我们看看如何添加消息:
<?php public function add_message( $type, $message ) { $message = sanitize_text_field( $message ); if ( in_array( $message, $this->messages[ $type ] ) ) { return; } array_push( $this->messages[ $type ], $message ); }
该消息首先获取传入的字符串并清理数据。然后它检查它是否已存在于成功消息中。如果是这样,它就会返回。毕竟,我们不想要重复的消息。
否则,它会将消息添加到集合中。
检索消息有两种形式:
请记住,有时我们可能只想显示警告消息。其他时候,我们可能想要显示所有消息。由于有两种方法可以做到这一点,我们可以利用其中一种方法,然后在其他函数中利用它。
听起来很混乱?请耐心等待,我会解释这一切。我们要关注的第一部分是如何按类型呈现消息(例如成功、错误或警告)。这是执行此操作的代码(看起来应该很熟悉):
<?php public function get_messages( $type ) { if ( empty( $this->messages[ $type ] ) ) { return; } $html = "<div class='notice notice-$type is-dismissible'>"; $html .= '<ul>'; foreach ( $this->messages[ $type ] as $message ) { $html .= "<li>$message</li>"; } $html .= '</ul>'; $html .= '</div><!-- .notice-$type -->'; $allowed_html = array( 'div' => array( 'class' => array(), ), 'ul' => array(), 'li' => array(), ); echo wp_kses( $html, $allowed_html ); }
请注意,我们使用了上一教程中大部分相同的代码;但是,我们对其进行了概括,以便它查看传入的 $type
并将其动态应用到标记。
这使我们能够使用单个函数来呈现消息。但这还不是全部。有时我们想要获取所有消息怎么办?这可能是在页面上呈现或以编程方式获取它们以进行其他处理。
为此,我们可以引入另一个函数:
<?php public function get_all_messages() { foreach ( $this->messages as $type => $message ) { $this->get_messages( $type ); } }
此消息应该很容易理解。它只是循环遍历我们集合中的所有消息,并调用我们上面概述的 get_messages
函数。
它仍然将它们全部渲染在一起(我们很快就会在自定义钩子的实现中看到它们的一种使用)。如果您想将它们用于其他目的,您可以将结果附加到字符串中并将其返回给调用者,或者执行一些其他编程功能。
这只是一个实现。
这适用于实际的 Settings_Message
类。但我们如何与它沟通呢?当然,我们可以直接与它对话,但是如果有一个中间类,我们可以对返回给我们的内容进行一些控制,而无需向 Settings_Message
类添加更多责任,对吗?
输入Settings_Messenger
。这个类负责允许我们读取和写入设置消息。我认为您可以根据其职责将其分为两个类,因为它既可以读取也可以写入,但是就像发送和接收的信使一样,这就是此类的目的。
该类的初始设置很简单。
Settings_Message
类的实例,我们可以使用它来发送和接收消息。tutsplus_settings_messages
挂钩关联起来。看一下前几个方法:
<?php class Settings_Messenger { private $message; public function __construct() { $this->message = new Settings_Message(); } public function init() { add_action( 'tutsplus_settings_messages', array( $this, 'get_all_messages' ) ); } }
请记住,在本教程的前面,我们在视图中定义了钩子,可以在 settings.php
中找到。为了完整起见,将其列在这里:
<div class="wrap"> <h1><?php echo esc_html( get_admin_page_title() ); ?></h1> <?php do_action( 'tutsplus_settings_messages' ); ?> <p class="description"> We aren't actually going to display options on this page. Instead, we're going to use this page to demonstration how to hook into our custom messenger. </p><!-- .description --> </div><!-- .wrap -->
但是请注意,这个特定的钩子利用了 get_all_messages
方法,我们稍后会回顾一下。不一定非要用这个方法。相反,它可以用于简单地呈现成功消息或您想要使用的任何其他方法。
创建添加消息的函数很简单,因为这些函数需要类型和消息本身。请记住,Settings_Message
负责清理信息,以便我们可以简单地传入传入消息。
请参阅下面我们添加成功、警告和错误消息的位置:
<?php public function add_success_message( $message ) { $this->add_message( 'success', $message ); } public function add_warning_message( $message ) { $this->add_message( 'warning', $message ); } public function add_error_message( $message ) { $this->add_message( 'error', $message ); }
很简单,不是吗?
检索消息没有太大不同,只是我们只需要提供要检索的消息类型:
<?php public function get_success_messages() { echo $this->get_messages( 'success' ); } public function get_warning_messages() { echo $this->get_messages( 'warning' ); } public function get_error_messages() { echo $this->get_messages( 'error' ); }
完成了,对吧?
请注意,上面的消息均引用了我们尚未实际介绍的另外两种方法。这些私人消息可以帮助我们简化上述通话。
查看以下私有方法,它们负责直接从信使对象上维护的 Settings_Message
实例添加和检索消息:
<?php private function add_message( $type, $message ) { $this->message->add_message( $type, $message ); } private function get_messages( $type ) { return $this->message->get_messages( $type ); }
完成了新的 Settings_Messenger
类。所有这些都简单得多,不是吗?
不过,它确实提出了一个问题:既然我们已经完成了所有这些更改,我们如何启动插件?
查看下面的整个函数:
<?php add_action( 'plugins_loaded', 'tutsplus_custom_messaging_start' ); /** * Starts the plugin. * * @since 1.0.0 */ function tutsplus_custom_messaging_start() { $plugin = new Submenu( new Submenu_Page() ); $plugin->init(); $messenger = new Settings_Messenger(); $messenger->init(); $messenger->add_success_message( 'Nice shot kid, that was one in a million!' ); $messenger->add_warning_message( 'Do not go gently into that good night.' ); $messenger->add_error_message( 'Danger Will Robinson.' ); }
就是这样。
需要注意的几点:
で init を呼び出さない場合は、設定ページにメッセージが表示されることを心配する必要はありません。
に追加しますが、init メソッドを使用しているため、実際にはメッセージを取得しません。
李>
メッセージを取得したい場合は、上で概説した方法を使用できます。 ###結論は###
すぐに使える完全なソース コードを含むこのチュートリアルの完全な動作バージョンを入手するには、右側のサイドバーでこの記事に添付されているソース コードをダウンロードしてください。
カスタムメニュー
WordPress を使用してカスタム管理ページを作成する
以上がパーソナライズされた WordPress コミュニケーション プラットフォームの設計、パート 4の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。