設計個人化 WordPress 通訊平台,第 4 部分

WBOY
發布: 2023-08-31 14:14:01
原創
845 人瀏覽過

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

在本系列中,我們了解如何實作一個系統,該系統允許我們以程式設計方式定義顯示在 WordPress 後端的給定管理頁面上的自訂訊息。

如果您到目前為止一直在關注該系列,那麼您就會知道:

  • 我們已經為本系列中使用的插件奠定了基礎,甚至進一步開發了它。
  • 我們定義並使用了一個自訂掛鉤,可用來呈現設定訊息。
  • 我們添加了對成功、警告和錯誤訊息的支持,這些訊息可以在給定設定頁面的頂部呈現。

如上一篇教學所提到的:

但是如果您讀過我之前的任何教程,您就會知道我不喜歡重複的程式碼。我也不喜歡讓一個班級做很多事。不幸的是,這正是我們正在做的事情。

我們將在最後的教程中解決這個問題。最後,我們將擁有一個完整的重構解決方案,該解決方案使用一些中間的物件導向原則(例如繼承)。我們還將提供一些可以以程式設計方式使用或可以在 WordPress 掛鉤系統中註冊的方法。

最後開始

此時您應該確切地知道本機開發環境中需要什麼。具體來說,您應該具備以下條件:

  • PHP 5.6.25 和 MySQL 5.6.28
  • Apache 或 Nginx
  • WordPress 4.6.1
  • 您首選的 IDE 或編輯器

我還推薦最新版本的源代碼,因為它允許您逐步完成我們將要進行的所有更改。如果您沒有,也沒關係,但我建議您在繼續之前先閱讀之前的教學。

在上一個教學

您可能還記得(或從上面的評論中確定),上一個教程給我們留下了一個做了太多工作的類別。

了解這一點的一種方法是,如果您要描述班級正在做什麼,您將無法給出單一答案。相反,您必須說它負責處理成功訊息、警告訊息、錯誤訊息,並相互獨立地呈現所有訊息。

雖然您可能會說它是“管理自訂訊息”,但您不一定會描述該類別有多冗長。這就是我們希望在本教程中解決的問題。

在最終教程中

具體來說,我們將考慮執行以下操作:

  • 刪除舊的設定信差類別
  • 新增新的、更通用的設定訊息類別
  • 新增用於通訊的設定信差類別
  • 介紹我們可以獨立於 WordPress 使用的方法
  • 簡化 WordPress 呈現訊息的方式

我們已經完成了我們的工作,所以讓我們繼續並開始執行上述所有內容。

重構我們的工作

在重構我們的工作時,準確地了解我們想要做什麼是有幫助的。在我們的例子中,我們認識到我們有很多可以壓縮的重複程式碼。

此外,我們以完全相同的方式管理三種不同類型的訊息,除了它們的呈現方式之外。在這種情況下,這是 HTML 類別屬性的問題。

因此,我們可以將該程式碼概括為專注於特定的類型,並且我們可以透過概括一種識別所述的方法來整合許多添加成功訊息或檢索錯誤訊息的方法>型別

最終,我們會這麼做。但首先,需要做一些內務處理。

1。刪除舊設定 Messenger

在先前的教學中,我們一直在使用一個名為 Settings_Messenger 的類別。到目前為止,它已經達到了它的目的,但我們將在本教程的其餘部分中重構此類。

當涉及到這種類型的重構時,很容易想要簡單地刪除類別並重新開始。有時這是合適的,但這不是其中之一。相反,我們將學習該課程並重構現有的內容。

所有這些都是為了說明,不要刪除該檔案並開始使用新檔案。相反,請跟踪我們在本教程中所做的事情。

2。新的設定訊息類別

首先我們介紹一個Settings_Message類別。這代表我們要編寫的任何類型的設定訊息。也就是說,它將管理成功訊息、錯誤訊息和警告訊息。

為此,我們將定義該類,引入一個屬性,然後在建構函數中實例化它。查看此程式碼,我將在下面進行更多解釋:

<?php

class Settings_Message {

    private $messages;

    public function __construct() {

        $this->messages = array(
            'success' 	=> array(),
            'error'     => array(),
            'warning' 	=> array(),
        );
    }
}
登入後複製

請注意,我們建立了一個私有屬性 $messages。當實例化該類別時,我們建立一個多維數組。每個索引由 successerrorwarning 標識,引用自己的數組,我們將在其中儲存相應的訊息。

接下来,我们需要能够添加消息、获取消息以及获取所有消息。我将立即更详细地讨论其中的每一个。

添加消息

首先,让我们看看如何添加消息:

<?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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!