Maison  >  Article  >  développement back-end  >  Concevoir une plateforme de communication WordPress personnalisée, partie 4

Concevoir une plateforme de communication WordPress personnalisée, partie 4

WBOY
WBOYoriginal
2023-08-31 14:13:02847parcourir

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

Dans cette série, nous avons appris à implémenter un système qui nous permet de définir par programme des messages personnalisés qui apparaissent sur une page d'administration donnée dans le backend WordPress.

Si vous avez suivi la série jusqu'à présent, vous savez :

  • Nous avons jeté les bases des plugins utilisés dans cette série et les avons même développés davantage.
  • Nous avons défini et utilisé un hook personnalisé qui peut être utilisé pour afficher les messages de configuration.
  • Nous avons ajouté la prise en charge des messages de réussite, d'avertissement et d'erreur qui peuvent être affichés en haut d'une page de paramètres donnée.

Comme mentionné dans le tutoriel précédent :

Mais si vous avez lu l'un de mes tutoriels précédents, vous saurez que je n'aime pas le code en double. Je n'aime pas non plus qu'une seule classe fasse beaucoup de choses. Malheureusement, c'est exactement ce que nous faisons.

Nous résoudrons ce problème dans le tutoriel final. Au final, nous aurons une solution de refactoring complète qui utilise quelques principes intermédiaires orientés objet (comme l'héritage). Nous fournirons également quelques méthodes qui peuvent être utilisées par programme ou enregistrées dans le système de hooking WordPress.

Dernier départ

À ce stade, vous devez savoir exactement ce dont vous avez besoin dans votre environnement de développement local. Plus précisément, vous devriez avoir les éléments suivants :

  • PHP 5.6.25 et MySQL 5.6.28
  • Apache ou Nginx
  • WordPress 4.6.1
  • Votre IDE ou éditeur préféré

Je recommande également la dernière version du code source car elle vous permet de parcourir toutes les modifications que nous allons apporter. Si vous n'en avez pas, ce n'est pas grave, mais je vous recommande de lire le tutoriel précédent avant de continuer.

Dans le tutoriel précédent

Comme vous vous en souvenez peut-être (ou comme vous l'avez constaté à partir des commentaires ci-dessus), le tutoriel précédent nous a laissé une classe qui faisait trop de travail.

Une façon de comprendre cela est que si vous deviez décrire ce que fait la classe, vous ne seriez pas en mesure de donner une seule réponse. Au lieu de cela, vous devez dire qu'il est responsable de la gestion des messages de réussite, des messages d'avertissement, des messages d'erreur et du rendu de tous les messages indépendamment les uns des autres.

Bien que vous puissiez dire qu'elle « gère les messages personnalisés », vous ne décririez pas nécessairement à quel point cette classe est verbeuse. C'est ce que nous espérons résoudre dans ce tutoriel.

Dans le tutoriel final

Plus précisément, nous envisagerons de faire ce qui suit :

  • Supprimer les anciens paramètres de la classe de messagerie
  • Ajouter une nouvelle classe de messages de paramètres plus généraux
  • Ajouter une classe de messagerie de configuration pour la communication
  • Présentation des méthodes que nous pouvons utiliser indépendamment de WordPress
  • Simplifiez la façon dont WordPress affiche les messages

Nous avons fait notre travail, alors allons-y et commençons à exécuter tout ce qui précède.

Refactoriser notre travail

Lors de la refactorisation de notre travail, il est utile de savoir exactement ce que nous voulons faire. Dans notre cas, nous avons réalisé que nous avions beaucoup de code en double qui pouvait être compressé.

De plus, nous gérons trois types de messages différents exactement de la même manière, sauf pour la manière dont ils sont présentés. Dans ce cas, il s'agit d'un problème avec les attributs de classe HTML.

Nous pouvons donc généraliser ce code pour se concentrer sur un type spécifique, et nous pouvons consolider les nombreuses façons d'ajouter un message de réussite ou de récupérer un message d'erreur en généralisant une méthode qui identifie ledit >type .

Finalement, nous le ferons. Mais il faut d’abord faire un peu de ménage.

1. Supprimer les anciens paramètres Messenger

Dans les tutoriels précédents, nous avons utilisé une classe appelée Settings_Messenger . Jusqu'à présent, elle a rempli son objectif, mais nous refactoriserons cette classe dans la suite du didacticiel.

Quand il s'agit de ce type de refactoring, il est facile de vouloir simplement supprimer la classe et recommencer. Il y a des moments où cela est approprié, mais celui-ci n’en fait pas partie. Au lieu de cela, nous suivrons le cours et refactoriserons ce que nous avons déjà.

Tout cela est à titre d'illustration, ne supprimez pas le fichier et commencez à en utiliser un nouveau. Au lieu de cela, gardez une trace de ce que nous avons fait dans ce didacticiel.

2. Nouvelle classe de messages de paramètres

Nous introduisons d’abord une classe Settings_Message. Cela représente n'importe queltype de message de configuration que nous souhaitons écrire. Autrement dit, il gérera les messages de réussite, les messages d’erreur et les messages d’avertissement.

Pour ce faire, nous allons définir la classe, introduire une propriété puis l'instancier dans le constructeur. Découvrez ce code, je vous l'expliquerai plus ci-dessous :

<?php

class Settings_Message {

    private $messages;

    public function __construct() {

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

Notez que nous avons créé une propriété privée $messages。当实例化该类时,我们创建一个多维数组。每个索引由 successerrorwarningID qui fait référence à son propre tableau où nous stockerons le message correspondant.

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

添加消息

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

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

就是这样。

需要注意的几点:

  • Si vous n'appelez pas init Settings_Messenger, vous n'avez pas à vous soucier des messages affichés sur la page des paramètres.
  • Ce code ajoute le message à Settings_Messenger mais ne récupère aucun message car j'utilise la méthode init. 李>
  • Si vous souhaitez récupérer des messages, vous pouvez utiliser la méthode décrite ci-dessus.

C’est à cela que sert le refactoring. Cela ne fonctionne pas complètement, car du code est encore nécessaire pour charger tous les fichiers PHP requis pour que le plugin fonctionne. Cependant, le code ci-dessus se concentre sur la refactorisation, qui est au centre de tout le didacticiel.

Conclusion

Pour obtenir une version entièrement fonctionnelle de ce didacticiel avec le code source complet, téléchargez le code source joint à cet article dans la barre latérale droite.

J'espère qu'en étudiant ce matériel, vous pourrez maîtriser de nouvelles compétences et méthodes pour le développement WordPress. Nous avons couvert beaucoup de choses en parcourant la série :

  • Menu personnalisé
  • Présentation de la page de gestion
  • Divers types de messages
  • Définissez et utilisez des hooks personnalisés
  • Et refactoriser le code orienté objet

Comme d'habitude, je serai également heureux de répondre aux questions dans les commentaires, et vous pouvez également consulter mon blog et me suivre sur Twitter . Je parle généralement du développement de logiciels dans WordPress et de certains sujets sans rapport. Si vous êtes intéressé par davantage de développement WordPress, n'oubliez pas de consulter mes séries et didacticiels précédents, ainsi que les autres documents WordPress que nous proposons ici sur Envato Tuts+.

Ressources

  • Créez des pages d'administration personnalisées à l'aide de WordPress
  • API des paramètres WordPress
  • Comment démarrer avec WordPress
  • Ajouter une action
  • Effectuer une action
  • wp_kses
  • Nettoyer les champs de texte

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn