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?
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 utilisentWPINC
et d’autres utilisentABSPATH
comme dans:
if (!defined('ABSPATH')) exit;
(ou remplacez exit
par die("No cheating!")
ou un autre texte) if ( ! defined( 'WPINC' ) ) die;
(ou utilisez exit
de 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.
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.
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;
}