web-dev-qa-db-fra.com

WordPress restreindre l'accès direct au fichier plugin

Je développe un plugin WordPress, mais j'avais auparavant vérifié le code pour les quelques plugins déjà développés. J'ai vu une approche commune pour limiter le direct où le développeur de plugin commence le code de plugin par la ligne suivante

//  If accessed directly, abort
if ( ! defined( 'WPINC' ) ) {
    die;
}

Ceci est dans le fichier index du plugin. Ma question est quand nous installons le plugin c'est le premier fichier à être exécuté donc là où il est défini auparavant et que ce n'est pas abandonner l'exécution sur le fichier?

1
Mehar

Question 1. so où il est défini avant
Réponse:

Il est défini dans le noyau WordPress.

Voici un rapide référence en ligne ou une référence locale dans le fichier suivant situé à la racine de WordPress: wp-settings.php. Dans ce fichier ( autour de la ligne 18 ), le code suivant est affiché:

define( 'WPINC', 'wp-includes' );


Question 2. et ce n'est pas abandonner l'exécution sur le fichier
Réponse:

L’utilisation ( le but pour ainsi dire ) de celui-ci est de protéger les plugins de l’accès direct
( de l'extérieur,empêchant tout accès non autoriséà votre code )
Deux manières d’atteindre cette protection, certains développeurs utilisentWPINCet d’autres utilisentABSPATHcomme dans:

  • if (!defined('ABSPATH')) exit; (ou remplacez exit par die("No cheating!") ou un autre texte)
  • if ( ! defined( 'WPINC' ) ) die; (ou utilisez exitde la même manière que ci-dessus)

Les deux définis comme suit:

  • define( 'ABSPATH', dirname(dirname(__FILE__)) . '/' );
  • define( 'WPINC', 'wp-includes' );

dirname ( generic PHP ) renvoie simplement le répertoire à partir d'un chemin complet.
wp-includes est assez explicite.


Vous êtes libre de décider lequel utiliser. Personnellement, je pense qu’il n’ya pas de réelle bonne manière , les deux ont le même but. J'utilise seulement ABSPATH mais tout dépend de vos préférences personnelles.
N'oubliez pas de l'ajouter directement sous l'en-tête ou au moins près du haut de votre plugin.

3
Charles

WPINC est défini par WP avant le chargement des plugins; alors, le fait qu'il soit déjà défini indique que le plug-in est en cours de chargement par WP plutôt que par une demande directe.

1
BillK

Vous pouvez également utiliser celui-ci aussi. Il est défini dans Akismet Anti-Spam Plugin.

// Make sure we don't expose any info if called directly
if ( !function_exists( 'add_action' ) ) {
    echo 'Hi there!  I\'m just a plugin, not much I can do when called directly.';
    exit;
}
0
Razon K.