> 백엔드 개발 > PHP 튜토리얼 > 개인화된 WordPress 커뮤니케이션 플랫폼 설계, 4부

개인화된 WordPress 커뮤니케이션 플랫폼 설계, 4부

WBOY
풀어 주다: 2023-08-31 14:14:01
원래의
873명이 탐색했습니다.

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

이 시리즈에서는 WordPress 백엔드의 특정 관리 페이지에 표시되는 사용자 정의 메시지를 프로그래밍 방식으로 정의할 수 있는 시스템을 구현하는 방법을 배웠습니다.

지금까지 시리즈를 팔로우했다면 다음 사항을 알고 계실 것입니다.

  • 우리는 이 시리즈에 사용된 플러그인의 기반을 마련했으며 더욱 발전시켰습니다.
  • 설정 메시지를 렌더링하는 데 사용할 수 있는 사용자 정의 후크를 정의하고 사용했습니다.
  • 특정 설정 페이지 상단에 렌더링할 수 있는 성공, 경고 및 오류 메시지에 대한 지원을 추가했습니다.

이전 튜토리얼에서 언급했듯이:

하지만 제 이전 튜토리얼을 읽어보신 분이라면 제가 중복 코드를 좋아하지 않는다는 사실을 아실 겁니다. 나는 또한 한 수업이 많은 일을 하는 것을 좋아하지 않습니다. 불행하게도 그것이 바로 우리가 하고 있는 일입니다.

이 문제는 마지막 튜토리얼에서 해결하겠습니다. 결국 우리는 중간 개체 지향 원칙(예: 상속)을 사용하는 완전한 리팩토링 솔루션을 갖게 될 것입니다. 또한 프로그래밍 방식으로 사용하거나 WordPress 후킹 시스템에 등록할 수 있는 몇 가지 방법을 제공합니다.

마지막 시작

이 시점에서는 로컬 개발 환경에 무엇이 필요한지 정확히 알아야 합니다. 구체적으로 다음이 있어야 합니다.

  • PHP 5.6.25 및 MySQL 5.6.28
  • Apache 또는 Nginx
  • 워드프레스 4.6.1
  • 선호하는 IDE 또는 편집기

또한 앞으로 적용할 모든 변경 사항을 단계별로 살펴볼 수 있는 최신 버전의 소스 코드를 권장합니다. 없어도 괜찮습니다. 하지만 계속하기 전에 이전 튜토리얼을 읽어보는 것이 좋습니다.

이전 튜토리얼에서

기억하시거나 위의 설명에서 확인하실 수 있듯이 이전 튜토리얼에서는 작업이 너무 많은 클래스를 남겼습니다.

이를 이해하는 한 가지 방법은 수업이 무엇을 하고 있는지 설명한다면 단 한 번의 대답도 할 수 없다는 것입니다. 대신 성공 메시지, 경고 메시지, 오류 메시지를 처리하고 모든 메시지를 서로 독립적으로 렌더링하는 역할을 담당한다고 말해야 합니다.

"사용자 정의 메시지를 관리한다"고 말할 수도 있지만 해당 클래스가 얼마나 장황한지 설명할 필요는 없습니다. 이것이 우리가 이 튜토리얼에서 해결하고자 하는 것입니다.

마지막 튜토리얼에서

구체적으로 다음 사항을 고려할 것입니다.

  • 이전 설정 메신저 클래스 제거
  • 새롭고 보다 일반적인 설정 메시지 클래스 추가
  • 소통을 위한 메신저 클래스 설정 추가
  • 워드프레스에서 독립적으로 사용할 수 있는 방법 소개
  • WordPress에서 메시지를 렌더링하는 방식을 단순화하세요

할 일을 마쳤으니 이제 위의 모든 작업을 실행해 보겠습니다.

작업 리팩토링

작업을 리팩토링할 때 우리가 원하는 것이 무엇인지 정확히 아는 것이 도움이 됩니다. 우리의 경우에는 압축할 수 있는 중복 코드가 많다는 것을 깨달았습니다.

또한 우리는 표시되는 방식을 제외하고 세 가지 유형의 메시지를 정확히 동일한 방식으로 관리합니다. 이 경우 HTML 클래스 속성에 문제가 있습니다.

따라서 이 코드를 일반화하여 특정 유형에 초점을 맞출 수 있으며, 해당 >유형을 식별하는 방법을 일반화하여 성공 메시지를 추가하거나 오류 메시지를 검색하는 다양한 방법을 통합할 수 있습니다.

결국은 이렇게 하겠습니다. 하지만 먼저 약간의 하우스키핑 작업이 필요합니다.

1. 이전 설정 삭제 메신저

이전 튜토리얼에서는 Settings_Messenger이라는 클래스를 사용했습니다. 지금까지는 그 목적을 달성했지만 튜토리얼의 나머지 부분에서 이 클래스를 리팩터링할 것입니다.

이러한 유형의 리팩토링에서는 단순히 클래스를 삭제하고 다시 시작하고 싶을 때가 많습니다. 그것이 적절한 경우가 있지만 이것은 그중 하나가 아닙니다. 대신, 우리는 강좌를 수강하고 이미 가지고 있는 것을 리팩터링할 것입니다.

이 모든 것은 설명을 위한 것입니다. 파일을 삭제하지 말고 새 파일을 사용하십시오. 대신 이 튜토리얼에서 수행한 작업을 계속 추적하세요.

2. 새로운 설정 메시지 클래스

먼저 Settings_Message클래스를 소개합니다. 이는 우리가 작성하려는 모든 유형의 설정 메시지를 나타냅니다. 즉, 성공, 오류, 경고 메시지를 관리합니다.

이를 위해 클래스를 정의하고 속성을 도입한 다음 생성자에서 인스턴스화합니다. 이 코드를 확인하세요. 아래에서 더 자세히 설명하겠습니다.

으아아아

해당 메시지를 저장할 자체 배열을 참조하는 개인 속성 $messages。当实例化该类时,我们创建一个多维数组。每个索引由 successerrorwarning 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 );
}
로그인 후 복사

该消息首先获取传入的字符串并清理数据。然后它检查它是否已存在于成功消息中。如果是这样,它就会返回。毕竟,我们不想要重复的消息。

否则,它会将消息添加到集合中。

获取消息

检索消息有两种形式:

  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.' );
}
로그인 후 복사

就是这样。

需要注意的几点:

  • init을 호출하지 않으면 Settings_Messenger 설정 페이지에 메시지가 표시되는 것에 대해 걱정할 필요가 없습니다.
  • 이 코드는 Settings_Messenger에 메시지를 추가하지만 init 메소드를 사용하고 있기 때문에 실제로 메시지를 검색하지는 않습니다. 이>
  • 메시지를 검색하려면 위에서 설명한 방법을 사용할 수 있습니다.

이것이 리팩토링의 전부입니다. 플러그인이 작동하는 데 필요한 모든 PHP 파일을 로드하려면 일부 코드가 여전히 필요하기 때문에 완전히 작동하지는 않습니다. 그러나 위의 코드는 전체 튜토리얼의 초점인 리팩토링에 중점을 둡니다.

결론

완전한 소스 코드가 포함된 이 튜토리얼의 완벽하게 작동하는 버전을 얻으려면 오른쪽 사이드바에서 이 기사에 첨부된 소스 코드를 다운로드하세요.

이 자료를 공부함으로써 WordPress 개발을 위한 새로운 기술과 방법을 익힐 수 있기를 바랍니다. 시리즈를 진행하면서 많은 내용을 다루었습니다.

  • 맞춤 메뉴
  • 관리페이지 소개
  • 다양한 메시지 유형
  • 맞춤 후크 정의 및 활용
  • 그리고 객체지향 코드를 리팩터링

평소처럼 댓글로 질문에 답해드릴 수도 있고, 제 블로그를 확인하시거나 Twitter에서 저를 팔로우하실 수도 있습니다. 나는 보통 WordPress의 소프트웨어 개발과 관련 없는 주제에 대해 이야기합니다. 더 많은 WordPress 개발에 관심이 있다면 이전 시리즈와 튜토리얼은 물론 여기 Envato Tuts+에서 제공하는 다른 WordPress 자료도 확인하는 것을 잊지 마세요.

리소스

  • WordPress를 사용하여 사용자 정의 관리 페이지 만들기
  • 워드프레스 설정 API
  • 워드프레스 시작하는 방법
  • 액션 추가
  • 작업 수행
  • wp_kses
  • 텍스트 필드 정리

위 내용은 개인화된 WordPress 커뮤니케이션 플랫폼 설계, 4부의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿