web-dev-qa-db-fra.com

Erreur fatale: appel de la fonction non définie plugin_dir_path ()

J'essaie de créer un plugin WordPress personnalisé et j'ai créé un nouveau dossier dans le dossier "plugins". Cela s'appelle "wp-services-table". Dans ce dossier, j'ai créé deux fichiers: wp-services-table.php et wp-services-table-shortcode.php.

Pour l'instant, le fichier wp-services-table-shortcode.php est vide. Je n'ai écrit ceci que dans le fichier wp-services-table.php:

<?php
/**
* Plugin Name: Table and Modal Window for Displaying Services
* Description: Displays Services in a table, by Categories and opens a Modal Window when the user clicks for more information.
* Version: 0.1.0
* Author: AMI
*/

//Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
exit; 
}

require_once ( plugin_dir_path(__FILE__) . 'wp-services-table-shortcode.php' );

Mais je reçois cette erreur:

Erreur fatale: appel de la fonction non définie plugin_dir_path () dans /home/mysitedomain/public_html/wpfoldername/contentfolder/plugins/wp-services-table/wp-services-table.php à la ligne 14

Cela pourrait-il être dû au fait que j'ai un nom personnalisé au lieu de "wp-content"? Ou parce que j'ai installé WordPress dans un sous-dossier ("wpfoldername") et non directement dans le dossier "public_html"?

Parce que sinon, je pense que ce que j'ai écrit dans le fichier du plugin est correct pour créer un nouveau plugin.

J'ai aussi essayé d'ajouter ceci:

$dir = plugin_dir_path(__FILE__);
var_dump($dir);
die();

Pour voir quel chemin cela afficherait pour le plugin, mais bien sûr, j'ai toujours la même erreur concernant la fonction non définie plugin_dir_path ()

J'espère que quelqu'un sait pourquoi cela se produit parce que je suis très perplexe ici. Je vous remercie!

J'ai édité la question pour ajouter le contenu de wp-config: cela pourrait être utile parce que j'ai changé le nom du dossier wp-content et que WordPress est également installé dans un sous-dossier. Je pense que c'est la partie qui est pertinente:

/* That's all, stop editing! Happy blogging. */

/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');

/** Renaming the wp-content folder. */
define ('WP_CONTENT_FOLDERNAME', 'contentfolder');
define ('WP_CONTENT_DIR', ABSPATH . WP_CONTENT_FOLDERNAME) ;

define('WP_SITEURL', 'http://' . $_SERVER['HTTP_Host'] . '/wpfoldername/');
define('WP_CONTENT_URL', WP_SITEURL . WP_CONTENT_FOLDERNAME);

/** Sets up WordPress vars and included files. */
require_once(ABSPATH . 'wp-settings.php');

Le fichier index.php se trouve également dans le dossier "wpfoldername" et contient le code suivant:

<?php
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/

/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define('WP_USE_THEMES', true);

/** Loads the WordPress Environment and Template */
require( dirname( __FILE__ ) . '/wp-blog-header.php' );
3
Ami

Vous avez peut-être oublié de commenter la partie Exit if accessed directly?

//Exit if accessed directly

if ( ! defined( 'ABSPATH' ) ) {
exit; 
}
3
codiiv

Comment accédez-vous à la page? Essayez-vous d'accéder directement au fichier plugin sans utiliser l'interface du site? Si c'est le cas, Wordpress n'a probablement pas été chargé.

Que se passe-t-il si vous ajoutez le code suivant en haut de votre page?

if ( !defined('ABSPATH') ) {
    //If wordpress isn't loaded load it up.
    $path = $_SERVER['DOCUMENT_ROOT'];
    include_once $path . '/wp-load.php';
}

Le code ci-dessus permet de s'assurer que Wordpress est chargé avant que votre code ne s'exécute.

1
Sjoerd van Hout