add_action не работает в плагине метод activ () с использованием шаблона WordPress плагина - PullRequest
4 голосов
/ 26 апреля 2020

Я пытаюсь добавить пользовательские конечные точки (пользовательская конечная точка ”означает произвольный URL-адрес, не распознаваемый WP как стандартный URL-адрес, например постоянная ссылка или около того). Я использую шаблон WordPress-плагина" https://github.com/DevinVinson/WordPress-Plugin-Boilerplate " .

Я хочу отправить запрос API на пользовательскую конечную точку. Я создаю новый файл класса для регистрации конечных точек и включаю этот файл класса в метод активации плагина и вызываю ловушку add_action, но он не работает.

Создайте новый файл class-rigal-custom-Endpoint. php в папка include.

<?php

class Rigal_custom_Endpoint {

   private static $initiated = false;

    public static function init() {

        if ( ! self::$initiated ) {
            self::init_hooks();
        }
    }


    public static function init_hooks() {
        self::$initiated = true;
        add_action('init', 'add_endpoint');
    }
/**
 *
 * @description Create a independent endpoint
 */
public static function endpoint() {
    global $wp;
    $endpoint_vars = $wp->query_vars;
    // if endpoint
    if ($wp->request == 'exercise/test') {
        // Your own function to process endpoint
        exit;
    }
}
}

После того, как я включил этот файл класса в метод активации плагина. (class-rigal-plugin-activator. php)

public static function activate() {

        require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-rigal-custom-endpoint.php';

        add_action( 'init', array( 'Rigal_custom_Endpoint', 'init' ) );
                add_action( 'parse_request', array( 'Rigal_custom_Endpoint', 'endpoint' ) , 0);

    }

Когда я активирую плагин и добавляю «упражнение / тест» в URL, но он не работает. Не могли бы вы предложить решение для устранения вышеуказанной проблемы?

Среда PHP: 7.4 Wordpress: 5.4 ОС: Ma c: 10.15.1 Браузер: Chrome: версия 81.0.4044.122

Спасибо

1 Ответ

0 голосов
/ 29 апреля 2020

Поскольку метод активации выполняется только во время активации плагина. Когда плагин активен, этот метод больше не будет выполняться.

В class-plugin-name.php при load_dependencies добавьте свой класс, например:

require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-rigal-custom-endpoint.php';

в define_public_hooks добавьте ваше действие

$this->loader->add_action( 'parse_request',  'Rigal_custom_Endpoint', 'endpoint' );

Это будет работать, но учтите, что вы не регистрируете API конечной точки стандартным способом. Вы должны взглянуть на документацию WP REST API:
https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/

Это пример минимального плагина с использованием register_rest_route


<?php
/*
Plugin Name: Add WP Custom endpoint
Author: Robin Ferrari
Version: 1.0
*/

class MYPLUGIN_Api_Endpoint{
    public function init(){
        add_action( 'rest_api_init', array($this, 'register_rest_routes'));
    }
    public function register_rest_routes(){
        register_rest_route( 'myplugin/v1', '/exercise/test', array(
            'methods' => 'GET',
            'callback' => array($this, 'exercise_test'),
        ));
    }
    /**
     * Your custom route callback
     */
    public function exercise_test(){
        $error = false;
        // do what you whant
        if($error){
            return new WP_Error(500, "KO");
        }
        return new WP_Rest_Response(array(
            'status' => 200,
            'message' => "OK",
        ));
    }
}
$api = new MYPLUGIN_Api_Endpoint();
$api->init();

А затем Ваша конечная точка доступна здесь:

https://example.com/wp-json/myplugin/v1/exercise/test
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...