web-dev-qa-db-ja.com

致命的なエラー:未定義の関数plugin_dir_path()への呼び出し

私はカスタムWordPressプラグインを作成しようとしていて、私は "plugins"フォルダの中に新しいフォルダを作成しました。これは "wp-services-table"と呼ばれています。このフォルダの中に、wp-services-table.phpとwp-services-table-shortcode.phpの2つのファイルを作成しました。

今のところwp-services-table-shortcode.phpファイルは空白です。私はこれを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' );

しかし、私はこのエラーが出ます:

致命的なエラー:14行目の/home/mysitedomain/public_html/wpfoldername/contentfolder/plugins/wp-services-table/wp-services-table.phpで未定義の関数plugin_dir_path()を呼び出します

これは私が "wp-content"の代わりにカスタムの名前を持っているからだろうか?それとも、私は直接 "public_html"フォルダではなく、サブフォルダ( "wpfoldername")にWordPressをインストールしたからですか?

それ以外は、私がプラグインのファイルに書いたものは新しいプラグインを作成するのに正しいと思うからです。

私もこれを追加しようとしました:

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

それがプラグインのためにどのパスを表示するかを見るために、もちろん私はまだ未定義関数plugin_dir_path()に関して同じエラーを得ました

私はここで非常に困惑しているので、誰かがなぜこれが起こっているのか知っていることを願っています。ありがとうございました!

質問を編集してwp-configの内容を追加しました。 / wp-contentフォルダの名前を変更し、WordPressがサブフォルダにインストールされているので便利です。これが重要な部分だと思います。

/* 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');

Index.phpファイルも "wpfoldername"フォルダにあり、次のコードが含まれています。

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

Exit if accessed directly部分のコメントを忘れてしまったのでしょうか。

//Exit if accessed directly

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

どうやってこのページにアクセスしますか?サイトのフロントエンドを使用せずに直接pluginfileにアクセスしようとしていますか?その場合、Wordpressはおそらくロードされていません。

ページの上部に次のコードを追加するとどうなりますか?

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

上記のコードは、コードが実行される前にWordpressがロードされていることを確認します。

1
Sjoerd van Hout