Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Merekabentuk Platform Komunikasi WordPress Diperibadikan, Bahagian 4

Merekabentuk Platform Komunikasi WordPress Diperibadikan, Bahagian 4

WBOY
WBOYasal
2023-08-31 14:13:02846semak imbas

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

Dalam siri ini, kami mempelajari cara melaksanakan sistem yang membolehkan kami mentakrifkan penyesuaian secara pemrograman yang muncul pada halaman pentadbir tertentu pada maklumat hujung belakang WordPress.

Jika anda telah mengikuti siri ini setakat ini, anda tahu:

  • Kami telah meletakkan asas untuk pemalam yang digunakan dalam siri ini malah membangunkannya lagi.
  • Kami menentukan dan menggunakan cangkuk tersuai yang boleh digunakan untuk menyampaikan mesej persediaan.
  • Kami telah menambah sokongan untuk kejayaan, amaran dan mesej ralat yang boleh dipaparkan di bahagian atas halaman tetapan yang diberikan.

Seperti yang dinyatakan dalam tutorial sebelumnya:

Tetapi jika anda telah membaca mana-mana tutorial saya sebelum ini, anda akan tahu bahawa saya tidak suka kod pendua. Saya juga tidak suka satu kelas melakukan banyak perkara. Malangnya, itulah yang kami lakukan.

Kami akan menyelesaikan masalah ini dalam tutorial akhir. Pada akhirnya, kami akan mempunyai penyelesaian pemfaktoran semula lengkap yang menggunakan beberapa prinsip berorientasikan objek perantaraan (seperti warisan). Kami juga akan menyediakan beberapa kaedah yang boleh digunakan secara pemrograman atau boleh didaftarkan dalam sistem hooking WordPress.

Akhirnya bermula

Pada ketika ini anda harus tahu dengan tepat apa yang anda perlukan dalam persekitaran pembangunan tempatan anda. Secara khusus, anda sepatutnya mempunyai kelayakan berikut:

  • PHP 5.6.25 dan MySQL 5.6.28
  • Apache atau Nginx
  • WordPress 4.6.1
  • IDE atau editor pilihan anda

Saya juga mengesyorkan versi terbaharu kod sumber kerana ia membolehkan anda melalui semua perubahan yang akan kami lakukan. Jika anda tidak mempunyai satu, tidak mengapa, tetapi saya mengesyorkan membaca tutorial sebelum ini sebelum meneruskan.

Dalam tutorial sebelumnya

Seperti yang anda ingat (atau pastikan daripada komen di atas), tutorial sebelumnya meninggalkan kami dengan kelas yang melakukan terlalu banyak kerja.

Satu cara untuk memahami perkara ini ialah jika anda menerangkan perkara yang dilakukan oleh kelas, anda tidak akan dapat memberikan satu jawapan. Sebaliknya, anda perlu mengatakan bahawa ia bertanggungjawab untuk mengendalikan mesej kejayaan, mesej amaran, mesej ralat dan menyampaikan semua mesej secara berasingan antara satu sama lain.

Walaupun anda mungkin mengatakan ia "uruskan mesej tersuai", anda tidak semestinya menggambarkan betapa kasarnya kelas itu. Inilah yang kami harap dapat diselesaikan dalam tutorial ini.

Dalam tutorial terakhir

Secara khusus, kami akan mempertimbangkan untuk melakukan perkara berikut:

  • Padamkan kelas messenger tetapan lama
  • Tambah kelas mesej tetapan baharu yang lebih umum
  • Tambah persediaan kelas messenger untuk komunikasi
  • Memperkenalkan kaedah yang boleh kami gunakan secara bebas daripada WordPress
  • Permudahkan cara WordPress menyampaikan mesej

Kami telah melaksanakan tugas kami, jadi mari kita teruskan dan mula melaksanakan semua perkara di atas.

Membina semula kerja kami

Apabila memfaktorkan semula kerja kita, ia membantu untuk mengetahui dengan tepat apa yang ingin kita lakukan. Dalam kes kami, kami menyedari bahawa kami mempunyai banyak kod pendua yang boleh dimampatkan.

Selain itu, kami mengurus tiga jenis mesej yang berbeza dengan cara yang sama, kecuali cara ia disampaikan. Dalam kes ini, ia adalah masalah dengan atribut kelas HTML.

Jadi kita boleh generalisasi kod ini untuk menumpukan pada tertentu jenis dan kita boleh menyatukan banyak menambah mesej kejayaan dengan menggeneralisasikan cara untuk mengenal pasti atau Kaedah untuk mendapatkan semula mesej ralat > Taip .

Akhirnya, kami akan lakukan ini. Tetapi pertama, beberapa pengemasan perlu dilakukan.

1. Padamkan tetapan lama Messenger

Dalam tutorial sebelumnya, kami telah menggunakan kelas yang dipanggil Settings_Messenger. Setakat ini ia telah memenuhi tujuannya, tetapi kami akan memfaktorkan semula kelas ini dalam tutorial yang lain. 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

Apabila bercakap tentang pemfaktoran semula jenis ini, mudah untuk memadamkan kelas dan mulakan semula. Ada kalanya itu sesuai, tetapi ini bukan salah satunya. Sebaliknya, kami akan mengambil kursus dan memfaktorkan semula apa yang telah kami miliki. #🎜🎜# #🎜🎜#Semua ini adalah untuk mengatakan, jangan padam fail dan mula menggunakan yang baharu. Sebaliknya, jejaki apa yang kami lakukan dalam tutorial ini. #🎜🎜# #🎜🎜#2. Kelas mesej tetapan baharu#🎜🎜# #🎜🎜#Mula-mula kami memperkenalkan kelas Settings_Message. Ini mewakili sebarang jenis mesej persediaan yang ingin kami tulis. Iaitu, ia akan mengurus kejayaan, ralat, dan mesej amaran. #🎜🎜# #🎜🎜#Untuk melakukan ini, kami akan mentakrifkan kelas, memperkenalkan sifat dan membuat instantiat dalam pembina. Lihat kod ini, saya akan terangkan lebih lanjut di bawah: #🎜🎜#
<?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 );
}
#🎜🎜#Sila ambil perhatian bahawa kami mencipta harta peribadi $messages. Apabila membuat instance kelas ini, kami mencipta tatasusunan berbilang dimensi. Setiap indeks dikenal pasti melalui kejayaan, ralat atau amaran, merujuk sendiri tatasusunan di mana kami akan menyimpan mesej yang sepadan. #🎜🎜#

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

添加消息

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

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

就是这样。

需要注意的几点:

  • Jika anda tidak memanggil init pada Settings_Messenger, maka anda tidak perlu risau tentang sebarang mesej yang dipaparkan pada halaman tetapan. Settings_Messenger 上调用 init,那么您不必担心在设置页面上显示任何消息。
  • 该代码将消息添加到 Settings_Messenger Kod ini menambahkan mesej pada Settings_Messenger tetapi sebenarnya tidak mengambil sebarang mesej kerana saya menggunakan kaedah init.
  • 李>
  • Jika anda ingin mendapatkan semula mesej, anda boleh menggunakan kaedah yang kami gariskan di atas.

Inilah maksud pemfaktoran semula. Ini tidak berfungsi sepenuhnya di luar kotak, kerana beberapa kod masih diperlukan untuk memuatkan semua fail PHP yang diperlukan untuk pemalam itu berfungsi, namun, kod di atas memfokuskan pada pemfaktoran semula, yang merupakan tumpuan keseluruhan tutorial.

KESIMPULAN

Untuk mendapatkan versi tutorial yang berfungsi sepenuhnya dengan kod sumber lengkap di luar kotak, muat turun kod sumber yang dilampirkan pada artikel ini di bar sisi kanan.

Saya berharap dengan mempelajari bahan ini, anda akan dapat menguasai beberapa kemahiran dan kaedah baharu untuk pembangunan WordPress. Banyak yang telah kami bincangkan semasa melalui siri ini:
  • Menu tersuai
  • Pengenalan Halaman Pengurusan
  • Pelbagai jenis mesej
  • Tentukan dan gunakan cangkuk tersuai
  • Dan refactor kod berorientasikan objek

Seperti biasa, saya juga berbesar hati untuk menjawab soalan melalui komen, dan anda juga boleh menyemak blog saya dan mengikuti saya di Twitter . Saya biasanya bercakap tentang pembangunan perisian dalam WordPress dan beberapa topik yang tidak berkaitan. Jika anda berminat dengan lebih banyak pembangunan WordPress, jangan lupa untuk melihat siri dan tutorial saya sebelum ini, serta bahan WordPress lain yang kami tawarkan di sini di Envato Tuts+.

SUMBER
  • Buat halaman pentadbir tersuai menggunakan WordPress
  • API Tetapan WordPress
  • Bagaimana untuk bermula dengan WordPress
  • Tambah tindakan
  • Lakukan Tindakan
  • wp_kses
  • Medan teks bersih
#🎜🎜#

Atas ialah kandungan terperinci Merekabentuk Platform Komunikasi WordPress Diperibadikan, Bahagian 4. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Mekanisme refleksi dalam PHPArtikel seterusnya:Mekanisme refleksi dalam PHP