ホームページ > バックエンド開発 > PHPチュートリアル > パーソナライズされた WordPress コミュニケーション プラットフォームの設計、パート 4

パーソナライズされた WordPress コミュニケーション プラットフォームの設計、パート 4

WBOY
リリース: 2023-08-31 14:14:01
オリジナル
893 人が閲覧しました

设计个性化 WordPress 通信平台,第 4 部分

このシリーズでは、WordPress バックエンドの特定の管理ページに表示されるカスタム メッセージをプログラムで定義できるシステムを実装する方法を学びました。

これまでこのシリーズをご覧になっている方ならご存知でしょう:

  • 私たちはこのシリーズで使用されるプラグインの基礎を築き、さらにそれを開発しました。
  • セットアップ メッセージのレンダリングに使用できるカスタム フックを定義して使用しました。
  • 特定の設定ページの上部に表示できる成功、警告、エラー メッセージのサポートが追加されました。

前のチュートリアルで述べたように:

しかし、私のこれまでのチュートリアルを読んだことがある方なら、私が重複したコードを好まないことをご存知でしょう。また、1 つのクラスで多くのことを行うのは好きではありません。残念ながら、それがまさに私たちがやっていることなのです。

この問題は最後のチュートリアルで解決します。最終的には、いくつかの中間オブジェクト指向原則 (継承など) を使用する完全なリファクタリング ソリューションが完成します。また、プログラムで使用できる方法、または WordPress フック システムに登録できる方法もいくつか紹介します。

最終スタート

この時点で、ローカル開発環境で何が必要なのかを正確に知る必要があります。具体的には、次のものが必要です:

  • PHP 5.6.25 および MySQL 5.6.28
  • Apache または Nginx
  • WordPress 4.6.1
  • お好みの IDE またはエディタ

今後行われるすべての変更を段階的に実行できるため、ソース コードの最新バージョンもお勧めします。お持ちでない場合でも問題ありませんが、続行する前に前のチュートリアルを読むことをお勧めします。

前のチュートリアルで

覚えているかもしれません (または上記のコメントからわかるように)、前のチュートリアルでは、作業が多すぎるクラスが残されました。

これを理解する 1 つの方法は、クラスが何を行っているかを説明しようとすると、1 つの答えを与えることはできないということです。代わりに、成功メッセージ、警告メッセージ、エラー メッセージを処理し、すべてのメッセージを互いに独立して表示する責任があると言わなければなりません。

「カスタム メッセージを管理する」と言っても、そのクラスがどれほど冗長であるかは必ずしも説明できません。これがこのチュートリアルで解決したいことです。

最後のチュートリアルで

具体的には、次のことを検討します:

  • 古い設定メッセンジャー クラスを削除します
  • 新しい、より一般的な設定メッセージ クラスを追加します
  • 通信用のセットアップメッセンジャークラスを追加
  • WordPress に依存せずに使用できる方法を紹介します
  • WordPress がメッセージをレンダリングする方法を簡素化する

作業は完了したので、上記のすべての実行を開始しましょう。

私たちの仕事を再構築する

作業をリファクタリングするとき、何をしたいのかを正確に知ることが役立ちます。私たちの場合、圧縮できる重複コードが多数あることに気付きました。

さらに、3 つの異なるタイプのメッセージを、表示方法を除いてまったく同じ方法で管理します。この場合、HTML クラスの属性に問題があります。

したがって、特定の タイプ に焦点を当てるようにこのコードを一般化することができ、その を識別する方法を一般化することで、成功メッセージを追加したりエラー メッセージを取得したりするメソッドの多くを統合できます。 「メソッド」>「」と入力します。

最終的にはこれをやります。しかし、その前に、いくつかのハウスキーピングを行う必要があります。

###1。古い設定を削除します。

前のチュートリアルでは、

Settings_Messenger

というクラスを使用してきました。これまでのところ、その目的は果たしていますが、チュートリアルの残りの部分でこのクラスをリファクタリングします。 このタイプのリファクタリングになると、クラスを削除して最初からやり直したくなりがちです。それが適切な場合もありますが、これはそうではありません。代わりに、コースを受講して、すでにあるものをリファクタリングします。

これはすべて説明のためです。ファイルを削除せずに、新しいファイルを使用し始めてください。代わりに、このチュートリアルで行ったことを記録してください。

###2。新しい設定メッセージ クラス

最初に、

Settings_Message

クラスを紹介します。これは、書き込みたい

任意の タイプのセットアップ メッセージを表します。つまり、成功メッセージ、エラー メッセージ、警告メッセージを管理します。 これを行うには、クラスを定義し、プロパティを導入し、コンストラクターでそれをインスタンス化します。このコードをチェックしてください。以下で詳しく説明します: リーリー

プライベート プロパティ

$messages

を作成したことに注意してください。このクラスをインスタンス化するときに、多次元配列を作成します。

successerror、または 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 );
}
ログイン後にコピー

该消息首先获取传入的字符串并清理数据。然后它检查它是否已存在于成功消息中。如果是这样,它就会返回。毕竟,我们不想要重复的消息。

否则,它会将消息添加到集合中。

获取消息

检索消息有两种形式:

  1. 类型呈现单条消息
  2. 在管理页面的显示中呈现消息(完成 HTML 清理等)

请记住,有时我们可能只想显示警告消息。其他时候,我们可能想要显示所有消息。由于有两种方法可以做到这一点,我们可以利用其中一种方法,然后在其他函数中利用它。

听起来很混乱?请耐心等待,我会解释这一切。我们要关注的第一部分是如何按类型呈现消息(例如成功、错误或警告)。这是执行此操作的代码(看起来应该很熟悉):

<?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 函数。

它仍然将它们全部渲染在一起(我们很快就会在自定义钩子的实现中看到它们的一种使用)。如果您想将它们用于其他目的,您可以将结果附加到字符串中并将其返回给调用者,或者执行一些其他编程功能。

这只是一个实现。

3。设置信使

这适用于实际的 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.' );
}
ログイン後にコピー

就是这样。

需要注意的几点:

  • #Settings_Messenger で init を呼び出さない場合は、設定ページにメッセージが表示されることを心配する必要はありません。
  • このコードは、メッセージを
  • Settings_Messenger に追加しますが、init メソッドを使用しているため、実際にはメッセージを取得しません。 李> メッセージを取得したい場合は、上で概説した方法を使用できます。
これがリファクタリングのすべてです。プラグインが動作するために必要なすべての PHP ファイルをロードするにはまだ一部のコードが必要であるため、これは完全にそのままでは機能しませんが、上記のコードはチュートリアル全体の焦点であるリファクタリングに重点を置いています。

###結論は###

すぐに使える完全なソース コードを含むこのチュートリアルの完全な動作バージョンを入手するには、右側のサイドバーでこの記事に添付されているソース コードをダウンロードしてください。

この資料を学習することで、WordPress 開発のための新しいスキルと方法を習得できることを願っています。シリーズを通じて多くのことを取り上げてきました:

カスタムメニュー

    管理ページ紹介
  • さまざまなメッセージの種類
  • カスタムフックを定義して利用する
  • そしてオブジェクト指向コードをリファクタリングする
  • いつものように、コメントでの質問にも喜んでお答えします。また、私のブログをチェックしたり、Twitter で私をフォローしたりすることもできます。私は通常、WordPress でのソフトウェア開発とそれとは関係のないトピックについて話します。さらに WordPress 開発に興味がある場合は、Envato Tuts で提供している他の WordPress 資料だけでなく、私の以前のシリーズやチュートリアルも忘れずにチェックしてください。
  • ###リソース###

WordPress を使用してカスタム管理ページを作成する

WordPress 設定 API

    WordPress を始める方法
  • 操作の追加
  • 操作の実行
  • wp_kses
  • テキストフィールドをきれいにする

以上がパーソナライズされた WordPress コミュニケーション プラットフォームの設計、パート 4の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート