web-dev-qa-db-fra.com

Comment faire une requête HTTP à un fichier php présent dans le répertoire plugin de wordpress

Je suis nouveau dans le développement de plugins wordpress et je développe un plugin (disons myplugin) et je suis coincé dans le problème suivant.

J'avais gardé ce plugin dans mywebsite/wp-content/plugin/myplugin

Dans le répertoire myplugin, j'ai 2 fichiers comme suit

  1. myplugin.php
  2. registration.php

Maintenant, je veux faire une demande de post http à ci-dessus registration.php à partir de l'application mobile. Lorsque j'ai envoyé une demande à http: //mywebsite/wp-content/plugin/myplugin/registration.php , le fichier est toujours introuvable. Comment puis-je faire une demande ..

Est-ce une mauvaise façon de faire. Si tel est le cas, quelqu'un peut-il m'aider à le faire ...

Toute aide est appréciée.

1
Harish_N

Voici un plugin rapide et sale qui vous montre comment y parvenir (adaptez cet exemple à votre propre architecture et à vos besoins):

<?php 
/*
Plugin Name: Custom rewrite rule test
*/

add_action(
    'plugins_loaded', 
    array(Registration::get_instance(), 'setup')
);

class Registration {

    protected static $instance = NULL;

    public function __construct() {}

    public static function get_instance() {
        NULL === self::$instance and self::$instance = new self;
        return self::$instance;
    }    

    public function setup() {

        add_action('init', array($this, 'rewrite_rules'));
        add_filter('query_vars', array($this, 'query_vars'), 10, 1);
        add_action('parse_request', array($this, 'parse_request'), 10, 1);

        register_activation_hook(__FILE__, array($this, 'flush_rules' ));

    }

    public function rewrite_rules(){
        add_rewrite_rule('registration/?$', 'index.php?registration=true', 'top');
    }

    public function flush_rules(){
        $this->rewrite_rules();
        flush_rewrite_rules();
    }

    public function query_vars($vars){
        $vars[] = 'registration';
        return $vars;
    }

    public function parse_request($wp){
        if ( array_key_exists( 'registration', $wp->query_vars ) ){
            include plugin_dir_path(__FILE__) . 'registration.php';
            exit();
        }
    }

}
  • enregistrez votre "inscription" de règle de réécriture personnalisée à l'aide de add_rewrite_rule()
  • ajouter une variable de requête personnalisée "inscription"
  • analyser la requête, rechercher la variable de requête "registration", le cas échéant, inclure un fichier registration.php

L’avantage d’ajouter une règle de réécriture WordPress interne interne n’est pas préférable à une règle externe, c’est que l’environnement WordPress sera disponible dans votre fichier registration.php, par exemple si vous devez modifier ou récupérer des données de la base de données que vous pouvez.

Exemple dans votre fichier registration.php:

<?php 

global $wp, $wpdb;

//get query variable: index.php?registration=true
var_dump($wp->query_vars['registration']); //true

//check if user is logged in
if ( is_user_logged_in() ) {
  //use $wpdb to get results from database etc
}

//do your registration business logic here etc
1
userabuser