WordPress 알림이 쉬워졌습니다
게시 됨: 2022-03-10 WordPress는 어떤 종류의 알림 시스템도 제공하지 않습니다. 사용할 수 있는 것은 wp_mail()
함수뿐이지만 모든 설정을 하드코딩해야 합니다. 그렇지 않으면 사용자가 옵션을 조정할 수 있도록 별도의 설정 화면을 만들어야 합니다. 안정적이고 구성 가능하며 사용하기 쉬운 시스템을 작성하려면 많은 시간이 걸립니다. 하지만 더 이상은 아닙니다. 무료 알림 플러그인을 사용하여 몇 분 안에 나만의 알림 시스템을 만드는 방법을 보여 드리겠습니다. 알림이란 모든 종류의 알림을 의미합니다 . 대부분의 경우 이메일이지만 우리가 사용할 플러그인을 사용하면 웹훅 및 기타 종류의 알림을 보낼 수도 있습니다.
내 고객 중 한 명을 위한 프로젝트를 만드는 동안 내가 설명한 이 문제가 발생했습니다. 요구 사항은 구성 가능한 콘텐츠가 포함된 여러 사용자 지정 이메일 알림을 갖는 것이었습니다. 모든 경고를 하드코딩하는 대신 시스템을 구축하기로 결정했습니다. 나는 그것이 매우 유연하기를 원했고 목표는 가능한 한 빨리 새로운 시나리오를 코딩할 수 있도록 하는 것이었습니다.
내가 작성한 코드는 위대한 개발 여정의 시작이었습니다. 내가 만든 시스템은 별도의 패키지로 작동할 수 있을 정도로 유연했습니다. 이것이 알림 플러그인이 탄생한 방법입니다.
웹사이트 회원 중 한 명이 업데이트 중인 사용자 프로필에 대한 이메일을 보내려고 한다고 가정합니다. WordPress는 해당 기능을 제공하지 않지만 알림 플러그인을 사용하면 몇 분 안에 이러한 이메일을 만들 수 있습니다. 또는 새 제품이 게시될 때마다 웹훅을 별도의 URL로 전송하여 WooCommerce 제품을 타사 소프트웨어와 동기화하려는 경우를 가정해 보십시오. 플러그인으로도 쉽게 할 수 있습니다.
WordPress 플러그인을 개발하면서 배운 교훈
좋은 플러그인 개발 및 지원은 더 많은 다운로드로 이어집니다. 더 많은 다운로드는 더 많은 돈과 더 나은 평판을 의미합니다. 7가지 황금률을 통해 양질의 제품을 개발하는 방법을 알아보세요. 관련 기사 읽기 →
이 기사에서는 플러그인을 자신의 애플리케이션에 통합하는 방법과 고급 WordPress 알림 시스템을 그 어느 때보다 빠르고 쉽게 만드는 방법을 배웁니다.
이 기사에서 다룰 내용은 다음과 같습니다.
- 플러그인 설치 방법,
- 플러그인과 그 아키텍처의 이면에 있는 아이디어,
- 알림에 대한 사용자 지정 시나리오 생성,
- 작업 생성(프로세스의 1단계),
- 트리거 생성(프로세스의 2단계),
- 사용자 정의 알림 유형 생성,
- 화이트 라벨 모드를 활성화하고 패키지에 플러그인을 묶는 방법.
플러그인 설치
자신만의 시나리오를 만들려면 알림 플러그인이 필요합니다. WordPress 대시보드의 WordPress.org 리포지토리에서 설치하거나 GitHub 리포지토리에서 다운로드하기만 하면 됩니다.
이 기사의 뒷부분에서 이 플러그인을 클라이언트로부터 숨기고 플러그인 또는 테마의 통합된 부분으로 작동하게 하는 방법을 배우게 될 것입니다.
플러그인의 아이디어
코드 편집기로 이동하기 전에 플러그인의 아키텍처가 어떻게 생겼는지 알아야 합니다. 플러그인에는 다양한 구성 요소가 포함되어 있지만 그 핵심은 실제로 몇 가지 추상 클래스입니다.
주요 구성 요소는 다음과 같습니다.
- 알림
이메일, 웹훅, 푸시 알림 또는 SMS가 될 수 있습니다. - 방아쇠
이것이 알림을 보내는 것입니다. 효과적으로 WordPress 작업입니다. - 병합 태그
이것은{post_title}
과 같은 동적 콘텐츠의 작은 부분입니다.
이 모든 것이 함께 재생되는 방식에 대한 더 나은 아이디어를 제공하기 위해 다음 짧은 비디오를 시청할 수 있습니다.
알림 플러그인의 핵심은 실제로 API입니다. 게시된 게시물 및 등록된 사용자 와 같은 모든 기본 트리거는 해당 API를 기반으로 구축된 것입니다.
플러그인은 개발자를 위해 만들어졌기 때문에 자신만의 트리거를 추가하는 것은 매우 쉽습니다. 필요한 것은 단 한 줄의 코드와 클래스 선언인 WordPress 작업뿐입니다.
커스텀 시나리오
간단한 시나리오를 생각해 봅시다. 각 게시물의 맨 아래에 텍스트 영역과 버튼을 추가하여 기사의 버그를 보고할 수 있습니다. 그런 다음 양식 제출 시 알림을 트리거합니다.
이 시나리오는 다른 기사 "페이지를 다시 로드하지 않고 양식 제출: WordPress의 AJAX 구현"에서 다뤘습니다.
간단하게 하기 위해 정적인 형태로 만들어 보겠습니다. 하지만 wp_mail()
함수 대신 AJAX 핸들러에 액션을 넣는 데는 문제가 없습니다.
양식을 만들어 봅시다.
양식
add_filter( 'the_content', 'report_a_bug_form' ); function report_a_bug_form( $content ) { // Display the form only on posts. if ( ! is_single() ) { return $content; } // Add the form to the bottom of the content. $content .= '<form action="' . admin_url( 'admin-post.php' ) . '" method="POST"> <input type="hidden" name="post_id" value="' . get_ID() . '"> <input type="hidden" name="action" value="report_a_bug"> <textarea name="message" placeholder="' . __( 'Describe what\'s wrong...', 'reportabug' ) . '"></textarea> <button>' . __( 'Report a bug', 'reportabug' ) . '</button> </div>'; return $content; }
WordPress nonce, 오류 처리 및 작업 결과 표시와 같은 많은 구성 요소가 누락되었지만 이 기사의 주제는 아닙니다. 이러한 작업을 처리하는 방법을 더 잘 이해하려면 위에 언급된 기사를 읽어보십시오.
작업 준비
알림을 트리거하려면 단일 작업만 필요합니다. 아래와 같은 사용자 지정 작업이 필요하지 않습니다. WordPress 코어 또는 다른 플러그인에 이미 등록된 모든 작업을 사용할 수 있습니다.
폼 핸들러와 액션
add_action( 'admin_post_report_a_bug', 'report_a_bug_handler' ); add_action( 'admin_post_nopriv_report_a_bug', 'report_a_bug_handler' ); function report_a_bug_handler() { do_action( 'report_a_bug', $_POST['post_id'], $_POST['message'] ); // Redirect back to the article. wp_safe_redirect( get_permalink( $_POST['post_id'] ) ); exit; }
WordPress Codex에서 admin-post.php
파일을 사용하는 방법에 대해 자세히 알아볼 수 있습니다.
이것이 사용자 정의 구성 가능한 알림을 만드는 데 필요한 전부입니다. 트리거를 생성해 보겠습니다.
사용자 지정 트리거 등록
트리거는 추상 트리거를 확장하는 단순한 클래스입니다. 추상 클래스는 모든 작업을 수행합니다. 트리거를 목록에 넣고 알림 및 병합 태그를 처리합니다.
트리거 선언부터 시작하겠습니다.
최소 트리거 정의
class ReportBug extends \BracketSpace\Notification\Abstracts\Trigger { public function __construct() { // Add slug and the title. parent::__construct( 'reportabug', __( 'Bug report sent', 'reportabug' ) ); // Hook to the action. $this->add_action( 'report_a_bug', 10, 2 ); } public function merge_tags() {} }
부모 생성자를 호출하고 트리거 슬러그와 멋진 이름을 전달하기만 하면 됩니다.
그런 다음 사용자 지정 작업에 연결할 수 있습니다. add_action
메소드는 add_action()
함수와 매우 유사합니다. 따라서 두 번째 매개변수는 우선순위이고 마지막 매개변수는 인수의 수입니다. 추상 클래스가 우리를 대신하기 때문에 콜백 매개변수만 누락되었습니다.
클래스가 있으면 새 트리거로 등록할 수 있습니다.
register_trigger( new ReportBug() );
이것은 이제 완전히 작동하는 트리거입니다. 새 알림을 작성할 때 목록에서 선택할 수 있습니다.
트리거가 작동하고 있고 원하는 알림을 이미 보낼 수 있지만 그다지 유용하지 않습니다. 어떤 게시물에 버그가 있고 메시지가 무엇인지 수신자에게 보여줄 방법이 없습니다.
이제 몇 가지 병합 태그를 등록하고 우리가 가지고 있는 작업 매개변수(게시물 ID 및 메시지)를 사용하여 트리거 컨텍스트를 설정해야 할 때입니다.
이를 위해 트리거 클래스에 다른 메서드를 추가할 수 있습니다. 이것은 액션 인수를 잡을 수 있는 액션 콜백입니다.
작업 인수 처리
public function action( $post_ID, $message ) { // If the message is empty, don't send any notifications. if ( empty( $message ) ) { return false; } // Set the trigger properties. $this->post = get_post( $post_ID ); $this->message = $message; }
return false;
성명. 이 메서드에서 false
를 반환하면 트리거가 중지되고 알림이 전송되지 않습니다. 우리의 경우 빈 메시지와 함께 알림이 제출되는 것을 원하지 않습니다. 실제 세계에서는 양식이 전송되기 전에 유효성을 검사하고 싶을 것입니다.
그런 다음 트리거 클래스의 속성, 전체 게시물 개체 및 메시지를 설정하기만 하면 됩니다. 이제 이를 사용하여 트리거에 병합 태그를 추가할 수 있습니다. 앞에서 선언한 merge_tags
메소드의 내용을 채울 수 있습니다.
병합 태그 정의
public function merge_tags() { $this->add_merge_tag( new \BracketSpace\Notification\Defaults\MergeTag\UrlTag( array( 'slug' => 'post_url', 'name' => __( 'Post URL', 'reportabug' ), 'resolver' => function( $trigger ) { return get_permalink( $trigger->post->ID ); }, ) ) ); $this->add_merge_tag( new \BracketSpace\Notification\Defaults\MergeTag\StringTag( array( 'slug' => 'post_title', 'name' => __( 'Post title', 'reportabug' ), 'resolver' => function( $trigger ) { return $trigger->post->post_title; }, ) ) ); $this->add_merge_tag( new \BracketSpace\Notification\Defaults\MergeTag\HtmlTag( array( 'slug' => 'message', 'name' => __( 'Message', 'reportabug' ), 'resolver' => function( $trigger ) { return nl2br( $trigger->message ); }, ) ) ); $this->add_merge_tag( new \BracketSpace\Notification\Defaults\MergeTag\EmailTag( array( 'slug' => 'post_author_email', 'name' => __( 'Post author email', 'reportabug' ), 'resolver' => function( $trigger ) { $author = get_userdata( $trigger->post->post_author ); return $author->user_email; }, ) ) ); }
이렇게 하면 알림이 작성되는 동안 사용할 준비가 된 4개의 병합 태그가 추가됩니다.
병합 태그는 특수 클래스의 인스턴스입니다. 이러한 태그에는 여러 가지 유형이 있으며 리졸버에서 반환되는 값에 따라 사용하고 있음을 알 수 있습니다. GitHub 리포지토리에서 모든 병합 태그를 볼 수 있습니다.
모든 병합 태그는 add_merge_tag
메서드를 통해 추가되며 세 개의 키가 있는 config 배열이 필요합니다.
- 강타
알림에 사용될 정적 값(예:{post_url}
). - 이름
병합 태그의 번역된 레이블입니다. - 해결사
병합 태그를 실제 값으로 대체하는 함수입니다.
리졸버는 우리의 경우처럼 클로저가 필요하지 않지만 사용하는 것이 편리합니다. 다른 클래스의 메서드인 경우 함수 이름을 문자열이나 배열로 전달할 수 있습니다.
리졸버 함수에서는 트리거 클래스 인스턴스라는 하나의 인수만 사용할 수 있습니다. 따라서 action
메서드에서 방금 설정한 속성에 액세스하고 필요한 값을 반환할 수 있습니다.
그리고 그게 전부입니다! 병합 태그는 트리거와 함께 사용할 수 없으며 버그 보고서에 대한 알림을 원하는 만큼 설정할 수 있습니다.
사용자 지정 알림 유형 만들기
알림 플러그인은 사용자 지정 트리거뿐만 아니라 사용자 지정 알림 유형도 제공합니다. 플러그인은 이메일과 웹훅의 두 가지 유형과 함께 제공되지만 고유한 알림을 등록할 수 있는 간단한 API가 있습니다.
사용자 정의 트리거와 매우 유사하게 작동합니다. 또한 등록하려면 클래스와 하나의 간단한 함수에 대한 호출이 필요합니다.
나는 단지 예를 보여주고 있습니다. 구현은 통합하려는 시스템에 따라 다릅니다. 타사 라이브러리를 포함하고 해당 API를 호출하거나 WordPress의 파일 시스템에서 작동해야 할 수도 있지만 아래 가이드에서 기본 프로세스를 설정합니다.
클래스 선언부터 시작하겠습니다.
class CustomNotification extends \BracketSpace\Notification\Abstracts\Notification { public function __construct() { // Add slug and the title. parent::__construct( 'custom_notification', __( 'Custom Notification', 'textdomain' ) ); } public function form_fields() {} public function send( \BracketSpace\Notification\Interfaces\Triggerable $trigger ) {} }
생성자에서 부모의 클래스 생성자를 호출하고 알림의 슬러그와 nice 이름을 전달해야 합니다.
form_fields
메소드는 알림을 위한 구성 양식을 만드는 데 사용됩니다. (예를 들어 이메일 알림에는 제목, 본문 등이 있습니다.)
send
메서드는 트리거에 의해 호출되며 여기에서 통합하려는 타사 API를 호출할 수 있습니다.
다음으로 register_notification
함수로 등록해야 합니다.
register_trigger( new CustomNotification() );
통지 양식
구성 필드가 없는 알림이 있는 경우가 있을 수 있습니다. 괜찮습니다. 하지만 WordPress 관리자에게 병합 태그로 알림 콘텐츠를 구성할 수 있는 방법을 제공하고 싶을 것입니다.
이것이 우리가 form_fields
메소드에 제목과 메시지라는 두 개의 필드를 등록하는 이유입니다. 다음과 같이 보입니다.
public function form_fields() { $this->add_form_field( new \BracketSpace\Notification\Defaults\Field\InputField( array( 'label' => __( 'Title', 'textdomain' ), 'name' => 'title', 'resolvable' => true, 'description' => __( 'You can use merge tags', 'textdomain' ), ) ) ); $this->add_form_field( new \BracketSpace\Notification\Defaults\Field\TextareaField( array( 'label' => __( 'Message', 'textdomain' ), 'name' => 'message', 'resolvable' => true, 'description' => __( 'You can use merge tags', 'textdomain' ), ) ) ); }
보시다시피 각 필드는 객체이며 add_form_field
메소드로 등록됩니다. 사용 가능한 모든 필드 유형 목록을 보려면 GitHub 리포지토리를 방문하세요.
각 필드에는 번역 가능한 레이블, 고유 이름 및 기타 속성 집합이 있습니다. 확인 resolvable
키로 필드를 병합 태그로 확인해야 하는지 여부를 정의할 수 있습니다. 이것은 누군가가 이 필드에서 {post_title}
병합 태그를 사용하면 게시물의 실제 제목으로 변경된다는 것을 의미합니다. 더 나은 사용자 경험을 위해 description
필드를 제공할 수도 있습니다.
이 시점에서 사용자 정의 알림 유형은 사용 가능한 트리거 유형과 함께 플러그인 인터페이스에서 사용할 수 있습니다.
사용자 지정 알림 보내기
실제로 작동하게 하려면 알림 클래스 선언에서 send
메서드를 사용해야 합니다. 여기에서 API 호출을 작성하거나 WordPress의 파일 시스템 또는 WordPress API를 사용할 수 있으며 알림 데이터로 원하는 모든 작업을 수행할 수 있습니다.
액세스할 수 있는 방법은 다음과 같습니다.
public function send( \BracketSpace\Notification\Interfaces\Triggerable $trigger ) { $title = $this->data['title']; $message = $this->data['message']; // @todo Write the integration here. }
이 시점에서 모든 필드는 병합 태그로 해결되며, 이는 변수가 배송될 준비가 되었음을 의미합니다.
이를 통해 로컬 SMS 공급자, 다른 WordPress 설치 또는 통신하려는 외부 API 등 모든 서비스와 WordPress를 통합할 수 있는 무한한 가능성을 제공합니다.
화이트 라벨링 및 플러그인 번들링
쉽게 비활성화하고 제거할 수 있는 플러그인의 종속성을 만드는 것은 이상적이지 않습니다. 알림 플러그인을 항상 사용할 수 있어야 하는 시스템을 구축하는 경우 자체 코드에 플러그인을 번들로 묶을 수 있습니다.
이전에 고급 사용자 정의 필드 플러그인을 사용한 적이 있다면 번들링 절차에 익숙할 것입니다. 플러그인의 파일을 플러그인 또는 테마에 복사하고 플러그인을 수동으로 호출하기만 하면 됩니다.
알림 플러그인은 매우 유사하게 작동하지만 플러그인 호출은 고급 사용자 정의 필드보다 훨씬 간단합니다.
플러그인의 파일을 복사하고 작동하려면 하나의 파일이 필요합니다.
require_once( 'path/to/plugin/notification/load.php' );
플러그인은 위치와 URL을 알아낼 것입니다.
그러나 플러그인을 번들로 묶는 것만으로는 충분하지 않을 수 있습니다. 이 타사 솔루션을 사용하고 있다는 사실을 완전히 숨겨야 할 수도 있습니다. 이것이 알림 플러그인에 언제든지 활성화할 수 있는 화이트 라벨 모드와 함께 제공되는 이유입니다.
또한 함수에 대한 단일 호출로 활성화됩니다.
notification_whitelabel( array( // Admin page hook under which the Notifications will be displayed. 'page_hook' => 'edit.php?post_type=page', // If display extensions page. 'extensions' => false, // If display settings page. 'settings' => false, // Limit settings access to user IDs. // This works only if settings are enabled. 'settings_access' => array( 123, 456 ), ) );
기본적으로 이 함수를 호출하면 모든 기본 트리거가 숨겨집니다.
화이트 라벨링과 번들링이라는 두 가지 기술을 모두 사용하면 플러그인의 출처에 대한 모든 참조가 완전히 숨겨지고 솔루션은 시스템의 완전히 통합된 부분으로 작동합니다.
결론
알림 플러그인은 모든 맞춤형 WordPress 알림 시스템을 위한 올인원 솔루션입니다. 구성이 매우 쉽고 즉시 사용할 수 있습니다. 등록된 모든 트리거는 모든 알림 유형에서 작동하며 고급 요구 사항이 있는 경우 기존 확장을 사용하여 시간을 절약할 수 있습니다.
더 자세한 내용과 고급 기술을 배우려면 설명서 웹 사이트로 이동하십시오.
저는 항상 새로운 아이디어에 열려 있습니다. 따라서 아이디어가 있으면 여기 댓글, GitHub 문제 또는 Twitter를 통해 저에게 연락할 수 있습니다.
저장소에서 플러그인을 다운로드하고 사용해 보세요!