이 시리즈에서는 WordPress 백엔드의 특정 관리 페이지에 표시되는 사용자 정의 메시지를 프로그래밍 방식으로 정의할 수 있는 시스템을 구현하는 방법을 배웠습니다.
지금까지 시리즈를 팔로우했다면 다음 사항을 알고 계실 것입니다.
이전 튜토리얼에서 언급했듯이:
하지만 제 이전 튜토리얼을 읽어보신 분이라면 제가 중복 코드를 좋아하지 않는다는 사실을 아실 겁니다. 나는 또한 한 수업이 많은 일을 하는 것을 좋아하지 않습니다. 불행하게도 그것이 바로 우리가 하고 있는 일입니다.
이 문제는 마지막 튜토리얼에서 해결하겠습니다. 결국 우리는 중간 개체 지향 원칙(예: 상속)을 사용하는 완전한 리팩토링 솔루션을 갖게 될 것입니다. 또한 프로그래밍 방식으로 사용하거나 WordPress 후킹 시스템에 등록할 수 있는 몇 가지 방법을 제공합니다.
이 시점에서는 로컬 개발 환경에 무엇이 필요한지 정확히 알아야 합니다. 구체적으로 다음이 있어야 합니다.
또한 앞으로 적용할 모든 변경 사항을 단계별로 살펴볼 수 있는 최신 버전의 소스 코드를 권장합니다. 없어도 괜찮습니다. 하지만 계속하기 전에 이전 튜토리얼을 읽어보는 것이 좋습니다.
기억하시거나 위의 설명에서 확인하실 수 있듯이 이전 튜토리얼에서는 작업이 너무 많은 클래스를 남겼습니다.
이를 이해하는 한 가지 방법은 수업이 무엇을 하고 있는지 설명한다면 단 한 번의 대답도 할 수 없다는 것입니다. 대신 성공 메시지, 경고 메시지, 오류 메시지를 처리하고 모든 메시지를 서로 독립적으로 렌더링하는 역할을 담당한다고 말해야 합니다.
"사용자 정의 메시지를 관리한다"고 말할 수도 있지만 해당 클래스가 얼마나 장황한지 설명할 필요는 없습니다. 이것이 우리가 이 튜토리얼에서 해결하고자 하는 것입니다.
구체적으로 다음 사항을 고려할 것입니다.
할 일을 마쳤으니 이제 위의 모든 작업을 실행해 보겠습니다.
작업을 리팩토링할 때 우리가 원하는 것이 무엇인지 정확히 아는 것이 도움이 됩니다. 우리의 경우에는 압축할 수 있는 중복 코드가 많다는 것을 깨달았습니다.
또한 우리는 표시되는 방식을 제외하고 세 가지 유형의 메시지를 정확히 동일한 방식으로 관리합니다. 이 경우 HTML 클래스 속성에 문제가 있습니다.
따라서 이 코드를 일반화하여 특정 유형에 초점을 맞출 수 있으며, 해당 >유형을 식별하는 방법을 일반화하여 성공 메시지를 추가하거나 오류 메시지를 검색하는 다양한 방법을 통합할 수 있습니다.
결국은 이렇게 하겠습니다. 하지만 먼저 약간의 하우스키핑 작업이 필요합니다.
이전 튜토리얼에서는 Settings_Messenger
이라는 클래스를 사용했습니다. 지금까지는 그 목적을 달성했지만 튜토리얼의 나머지 부분에서 이 클래스를 리팩터링할 것입니다.
이러한 유형의 리팩토링에서는 단순히 클래스를 삭제하고 다시 시작하고 싶을 때가 많습니다. 그것이 적절한 경우가 있지만 이것은 그중 하나가 아닙니다. 대신, 우리는 강좌를 수강하고 이미 가지고 있는 것을 리팩터링할 것입니다.
이 모든 것은 설명을 위한 것입니다. 파일을 삭제하지 말고 새 파일을 사용하십시오. 대신 이 튜토리얼에서 수행한 작업을 계속 추적하세요.
먼저 Settings_Message
클래스를 소개합니다. 이는 우리가 작성하려는 모든 유형의 설정 메시지를 나타냅니다. 즉, 성공, 오류, 경고 메시지를 관리합니다.
이를 위해 클래스를 정의하고 속성을 도입한 다음 생성자에서 인스턴스화합니다. 이 코드를 확인하세요. 아래에서 더 자세히 설명하겠습니다.
으아아아해당 메시지를 저장할 자체 배열을 참조하는 개인 속성 $messages
。当实例化该类时,我们创建一个多维数组。每个索引由 success
、error
或 warning
ID를 만들었습니다.
接下来,我们需要能够添加消息、获取消息以及获取所有消息。我将立即更详细地讨论其中的每一个。
首先,让我们看看如何添加消息:
<?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 ); }
该消息首先获取传入的字符串并清理数据。然后它检查它是否已存在于成功消息中。如果是这样,它就会返回。毕竟,我们不想要重复的消息。
否则,它会将消息添加到集合中。
检索消息有两种形式:
请记住,有时我们可能只想显示警告消息。其他时候,我们可能想要显示所有消息。由于有两种方法可以做到这一点,我们可以利用其中一种方法,然后在其他函数中利用它。
听起来很混乱?请耐心等待,我会解释这一切。我们要关注的第一部分是如何按类型呈现消息(例如成功、错误或警告)。这是执行此操作的代码(看起来应该很熟悉):
<?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
函数。
它仍然将它们全部渲染在一起(我们很快就会在自定义钩子的实现中看到它们的一种使用)。如果您想将它们用于其他目的,您可以将结果附加到字符串中并将其返回给调用者,或者执行一些其他编程功能。
这只是一个实现。
这适用于实际的 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
설정 페이지에 메시지가 표시되는 것에 대해 걱정할 필요가 없습니다. Settings_Messenger
에 메시지를 추가하지만 init 메소드를 사용하고 있기 때문에 실제로 메시지를 검색하지는 않습니다. 이>
이것이 리팩토링의 전부입니다. 플러그인이 작동하는 데 필요한 모든 PHP 파일을 로드하려면 일부 코드가 여전히 필요하기 때문에 완전히 작동하지는 않습니다. 그러나 위의 코드는 전체 튜토리얼의 초점인 리팩토링에 중점을 둡니다.
완전한 소스 코드가 포함된 이 튜토리얼의 완벽하게 작동하는 버전을 얻으려면 오른쪽 사이드바에서 이 기사에 첨부된 소스 코드를 다운로드하세요.
이 자료를 공부함으로써 WordPress 개발을 위한 새로운 기술과 방법을 익힐 수 있기를 바랍니다. 시리즈를 진행하면서 많은 내용을 다루었습니다.
평소처럼 댓글로 질문에 답해드릴 수도 있고, 제 블로그를 확인하시거나 Twitter에서 저를 팔로우하실 수도 있습니다. 나는 보통 WordPress의 소프트웨어 개발과 관련 없는 주제에 대해 이야기합니다. 더 많은 WordPress 개발에 관심이 있다면 이전 시리즈와 튜토리얼은 물론 여기 Envato Tuts+에서 제공하는 다른 WordPress 자료도 확인하는 것을 잊지 마세요.
위 내용은 개인화된 WordPress 커뮤니케이션 플랫폼 설계, 4부의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!