Heim  >  Artikel  >  Backend-Entwicklung  >  Entwerfen einer personalisierten WordPress-Kommunikationsplattform, Teil 4

Entwerfen einer personalisierten WordPress-Kommunikationsplattform, Teil 4

WBOY
WBOYOriginal
2023-08-31 14:13:02847Durchsuche

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

In dieser Serie haben wir gelernt, wie man ein System implementiert, das es uns ermöglicht, programmgesteuert benutzerdefinierte Nachrichten zu definieren, die auf einer bestimmten Admin-Seite im WordPress-Backend angezeigt werden.

Wenn Sie die Serie bisher verfolgt haben, wissen Sie:

  • Wir haben den Grundstein für die in dieser Serie verwendeten Plugins gelegt und ihn sogar weiterentwickelt.
  • Wir haben einen benutzerdefinierten Hook definiert und verwendet, der zum Rendern von Setup-Nachrichten verwendet werden kann.
  • Wir haben Unterstützung für Erfolgs-, Warn- und Fehlermeldungen hinzugefügt, die oben auf einer bestimmten Einstellungsseite angezeigt werden können.

Wie im vorherigen Tutorial erwähnt:

Aber wenn Sie eines meiner vorherigen Tutorials gelesen haben, wissen Sie, dass ich keinen doppelten Code mag. Ich mag es auch nicht, wenn eine Klasse viele Dinge erledigt. Leider ist es genau das, was wir tun.

Wir werden dieses Problem im letzten Tutorial lösen. Am Ende werden wir eine vollständige Refactoring-Lösung haben, die einige objektorientierte Zwischenprinzipien (z. B. Vererbung) verwendet. Wir werden auch einige Methoden bereitstellen, die programmgesteuert verwendet oder im WordPress-Hooking-System registriert werden können.

Letzter Start

An diesem Punkt sollten Sie genau wissen, was Sie in Ihrer lokalen Entwicklungsumgebung benötigen. Im Einzelnen sollten Sie Folgendes haben:

  • PHP 5.6.25 und MySQL 5.6.28
  • Apache oder Nginx
  • WordPress 4.6.1
  • Ihre bevorzugte IDE oder Ihr bevorzugter Editor

Ich empfehle außerdem die neueste Version des Quellcodes, da Sie damit alle Änderungen, die wir vornehmen werden, Schritt für Schritt durchgehen können. Wenn Sie noch keins haben, ist das kein Problem, aber ich empfehle Ihnen, das vorherige Tutorial zu lesen, bevor Sie fortfahren.

Im vorherigen Tutorial

Wie Sie sich vielleicht erinnern (oder den obigen Kommentaren entnehmen können), hat uns das vorherige Tutorial eine Klasse hinterlassen, die zu viel Arbeit gemacht hat.

Eine Möglichkeit, dies zu verstehen, besteht darin, dass Sie, wenn Sie beschreiben würden, was die Klasse tut, keine einzige Antwort geben könnten. Stattdessen muss man sagen, dass es dafür verantwortlich ist, Erfolgsmeldungen, Warnmeldungen, Fehlermeldungen zu verarbeiten und alle Meldungen unabhängig voneinander darzustellen.

Während Sie vielleicht sagen würden, dass die Klasse „benutzerdefinierte Nachrichten verwaltet“, würden Sie nicht unbedingt beschreiben, wie ausführlich diese Klasse ist. Dies möchten wir in diesem Tutorial lösen.

Im letzten Tutorial

Konkret werden wir Folgendes in Betracht ziehen:

  • Alte Messenger-Einstellungen entfernen
  • Fügen Sie eine neue, allgemeinere Einstellungsnachrichtenklasse hinzu
  • Setup-Messenger-Klasse für die Kommunikation hinzufügen
  • Wir stellen Methoden vor, die wir unabhängig von WordPress verwenden können
  • Vereinfachen Sie die Art und Weise, wie WordPress Nachrichten rendert

Wir haben unsere Arbeit getan, also lasst uns weitermachen und mit der Umsetzung aller oben genannten Schritte beginnen.

Refactoring unserer Arbeit

Beim Refactoring unserer Arbeit hilft es, genau zu wissen, was wir tun wollen. In unserem Fall stellten wir fest, dass wir eine Menge doppelten Code hatten, der komprimiert werden konnte.

Darüber hinaus verwalten wir drei verschiedene Arten von Nachrichten bis auf die Art und Weise, wie sie präsentiert werden, auf die gleiche Weise. In diesem Fall handelt es sich um ein Problem mit HTML-Klassenattributen.

So können wir diesen Code verallgemeinern, um ihn auf einen bestimmten Typ zu konzentrieren, und wir können die vielen Möglichkeiten zum Hinzufügen einer Erfolgsmeldung oder zum Abrufen einer Fehlermeldung konsolidieren, indem wir eine Methode verallgemeinern, die diesen Typ identifiziert.

Irgendwann werden wir das tun. Aber zuerst müssen einige Haushaltsarbeiten erledigt werden.

1. Löschen Sie alte Messenger-Einstellungen

In früheren Tutorials haben wir eine Klasse namens Settings_Messenger verwendet. Bisher hat sie ihren Zweck erfüllt, aber wir werden diese Klasse im Rest des Tutorials umgestalten.

Bei dieser Art von Refactoring kommt es leicht vor, dass man die Klasse einfach löschen und von vorne beginnen möchte. Es gibt Zeiten, in denen das angebracht ist, aber das ist nicht einer davon. Stattdessen belegen wir den Kurs und überarbeiten das, was wir bereits haben.

All dies dient zur Veranschaulichung: Löschen Sie die Datei nicht und beginnen Sie mit der Verwendung einer neuen. Behalten Sie stattdessen im Auge, was wir in diesem Tutorial getan haben.

2. Neue Einstellungsnachrichtenklasse

Zuerst stellen wir eine Settings_Message-Klasse vor. Dies stellt jedeArt von Setup-Nachricht dar, die wir schreiben möchten. Das heißt, es verwaltet Erfolgs-, Fehler- und Warnmeldungen.

Dazu definieren wir die Klasse, führen eine Eigenschaft ein und instanziieren sie dann im Konstruktor. Schauen Sie sich diesen Code an, ich erkläre weiter unten mehr:

<?php

class Settings_Message {

    private $messages;

    public function __construct() {

        $this->messages = array(
            'success' 	=> array(),
            'error'     => array(),
            'warning' 	=> array(),
        );
    }
}

Beachten Sie, dass wir eine private Eigenschaft $messages。当实例化该类时,我们创建一个多维数组。每个索引由 successerrorwarning ID erstellt haben, die auf ein eigenes Array verweist, in dem wir die entsprechende Nachricht speichern.

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

添加消息

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

<?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.' );
}

就是这样。

需要注意的几点:

  • Wenn Sie init nicht auf Settings_Messenger aufrufen, müssen Sie sich keine Sorgen machen, dass auf der Einstellungsseite Meldungen angezeigt werden.
  • Dieser Code fügt die Nachricht zu Settings_Messenger hinzu, ruft jedoch keine Nachricht ab, da ich die Init-Methode verwende. 李>
  • Wenn Sie Nachrichten abrufen möchten, können Sie die oben beschriebene Methode verwenden.

Darum geht es beim Refactoring. Dies funktioniert nicht sofort, da noch etwas Code erforderlich ist, um alle PHP-Dateien zu laden, die für die Funktion des Plugins erforderlich sind. Der obige Code konzentriert sich jedoch auf das Refactoring, das den Schwerpunkt des gesamten Tutorials bildet.

Fazit

Um sofort eine voll funktionsfähige Version dieses Tutorials mit vollständigem Quellcode zu erhalten, laden Sie den diesem Artikel beigefügten Quellcode in der rechten Seitenleiste herunter.

Ich hoffe, dass Sie durch das Studium dieses Materials einige neue Fähigkeiten und Methoden für die WordPress-Entwicklung erlernen können. Beim Durchsehen der Serie haben wir viel besprochen:

  • Individuelles Menü
  • Einführung in die Verwaltungsseite
  • Verschiedene Nachrichtentypen
  • Definieren und nutzen Sie benutzerdefinierte Hooks
  • Und objektorientierten Code umgestalten

Fragen beantworte ich wie gewohnt auch gerne in den Kommentaren, außerdem könnt ihr auf meinem Blog vorbeischauen und mir auf Twitter folgen. Normalerweise spreche ich über Softwareentwicklung in WordPress und einige nicht verwandte Themen. Wenn Sie an mehr WordPress-Entwicklung interessiert sind, vergessen Sie nicht, sich meine vorherigen Serien und Tutorials sowie die anderen WordPress-Materialien anzusehen, die wir auf Envato Tuts+ anbieten.

Ressourcen

  • Erstellen Sie benutzerdefinierte Admin-Seiten mit WordPress
  • WordPress-Einstellungs-API
  • So starten Sie mit WordPress
  • Aktion hinzufügen
  • Aktion ausführen
  • wp_kses
  • Textfelder bereinigen

Das obige ist der detaillierte Inhalt vonEntwerfen einer personalisierten WordPress-Kommunikationsplattform, Teil 4. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Reflexionsmechanismus in PHPNächster Artikel:Reflexionsmechanismus in PHP