首页 > 解决方案 > 得到未定义的变量:plugin_dir 错误,而我之前已经定义了变量

问题描述

wordpress 插件只有一个 php 文件。

我只是尝试将图标变量设置为服务器上的文件路径:

public function __construct() {

            $this->id                 = 'offline_gateway';
            $this->icon               = apply_filters('woocommerce_offline_icon', $plugin_dir.'\assets\custompay.png' );
            $this->has_fields         = false;
            $this->method_title       = __( 'Offline', 'wc-gateway-offline' );
            $this->method_description = __( 'Allows offline payments. Very handy if you use your cheque gateway for another payment method, and can help with testing. Orders are marked as "on-hold" when received.', 'wc-gateway-offline' );   
.
.
.
   }

并在代码开头添加此行以定义$plugin_dir变量:defined( 'ABSPATH' ) or exit;

$plugin_dir = ABSPATH . 'wp-content/plugins/woocommerce-gateway-offline/';

但我收到了这个 php 错误:

注意:未定义变量:/home/username/public_html/sitename/wp-content/plugins/woocommerce-gateway-offline/woocommerce-gateway-offline.php 中的 plugin_dir

> 在第 95 行

基于@the-alpha 提示,我使用define('WGO_PLUGIN_DIR', plugin_dir_path(__FILE__));了但输出 URL 类似于以下链接,这是错误的:

https://sitename.com/home/user/public_html/site-folder/wp-content/plugins/woocommerce-gateway-offline/assets/custompay.png

如何获得正确的网址?

标签: phpwordpressplugins

解决方案


如果不使用 using ,您将无法访问任何方法或函数中的全局变量global variablename,因此您可以在构造函数中使用类似这样的东西:

public function __construct() {
    global $plugin_dir; // <---

    $this->id                 = 'offline_gateway';
    $this->icon               = apply_filters('woocommerce_offline_icon', $plugin_dir.'\assets\custompay.png' );
    $this->has_fields         = false;
    $this->method_title       = __( 'Offline', 'wc-gateway-offline' );
    $this->method_description = __( 'Allows offline payments. Very handy if you use your cheque gateway for another payment method, and can help with testing. Orders are marked as "on-hold" when received.', 'wc-gateway-offline' );

}

或者,您可以定义一个常量,例如:

define('PLUGIN_DIR', ABSPATH . 'wp-content/plugins/woocommerce-gateway-offline/');

然后你可以直接在任何地方使用它,比如:

apply_filters('woocommerce_offline_icon', PLUGIN_DIR.'\assets\custompay.png');

顺便说一句,您不应该使用 hard-coded path,而是可以使用plugin_dir_path(在您的主插件文件中),例如:

// Note: Use a prefix, i.e: WGO_PLUGIN_DIR (woocommerce-gateway-offline)
define('PLUGIN_DIR', plugin_dir_path(__FILE__));

注意:始终对 WordPress 中的任何全局变量/常量使用唯一前缀。


推荐阅读