add_action funktioniert nicht im Plugin activate() Methode mit WordPress-Plugin-Boilerplate

Lesezeit: 3 Minuten

Ich versuche, benutzerdefinierte Endpunkte hinzuzufügen (benutzerdefinierter Endpunkt bedeutet eine beliebige URL, die von WP nicht als Standard-URL erkannt wird, wie ein Permalink oder so.) Ich verwende WordPress-Plugin-Boilerplate “https://github.com/DevinVinson/WordPress-Plugin-Boilerplate“.

Ich möchte eine API-Anfrage an einen benutzerdefinierten Endpunkt senden. Ich erstelle eine neue Klassendatei, um Endpunkte zu registrieren, und füge diese Klassendatei in die Plugin-Aktivierungsmethode ein und rufe den add_action-Hook auf, aber es funktioniert nicht.

Erstellen Sie im Ordner „includes“ eine neue Datei „class-rigal-custom-Endpoint.php“.

<?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;
    }
}
}

Nachdem ich diese Klassendatei in die Plugin-Aktivierungsmethode aufgenommen habe. (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);

    }

Wenn ich das Plugin aktiviere und “Übung/Test” in die URL einfüge, funktioniert es nicht. Würden Sie bitte eine Lösung vorschlagen, um das oben genannte Problem zu beheben?

Umfeld
PHP: 7.4 WordPress: 5.4 OS: Mac: 10.15.1 Browser: Chrome:Version 81.0.4044.122

Vielen Dank

Benutzer-Avatar
ZecKa

Denn die Aktivierungsmethode wird nur während der Plugin-Aktivierung ausgeführt. Sobald das Plugin aktiv ist, wird diese Methode nicht mehr ausgeführt.

Im class-plugin-name.php an load_dependencies Methode, fügen Sie Ihre Klasse hinzu, zum Beispiel:

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

in define_public_hooks füge deine Aktion hinzu

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

Dies wird funktionieren, aber bedenken Sie, dass Sie Ihre Endpunkt-API nicht auf die übliche Weise registrieren. Sie sollten sich die WP REST API-Dokumentation ansehen:
https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/

Dies ist ein Beispiel für ein minimales Plugin, das register_rest_route verwendet


<?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();

Und dann ist Ihr Endpunkt hier zugänglich:

https://example.com/wp-json/myplugin/v1/exercise/test

  • Ich glaube nicht, dass er einen REST-Endpunkt will. Er möchte eine beliebige URL registrieren und diese verwenden.

    – Lukas Bustamante

    4. Mai 2020 um 22:49 Uhr

  • Aber ja, er sollte seine Logik außerhalb der Bedingung des aktivierten Plugins verschieben.

    – Lukas Bustamante

    4. Mai 2020 um 22:51 Uhr

  • Okay, also überdenke nicht den zweiten Teil meines Kommentars.

    – ZecKa

    7. Mai 2020 um 12:17 Uhr

  • @Rigal, das scheint einfach zu sein, aber es ist tatsächlich sehr kompliziert, es in WordPress zu erreichen. Ich empfehle die Verwendung einer Bibliothek wie dieser: github.com/lucatume/wp-routes

    – Lukas Bustamante

    7. Mai 2020 um 15:24 Uhr

  • @Lucas Bustamante Ich möchte den Endpunkt nicht mit REST implementieren. Ich möchte nur einen benutzerdefinierten Endpunkt

    – Rigal

    6. August 2020 um 17:04 Uhr

1178700cookie-checkadd_action funktioniert nicht im Plugin activate() Methode mit WordPress-Plugin-Boilerplate

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy