получить неопределенную переменную: ошибка plugin_dir, в то время как я определил переменную ранее - PullRequest
0 голосов
/ 30 марта 2020

Плагин WordPress имеет только один php файл.

Я только что попытался установить переменную icon для пути к файлу на сервере:

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 ошибку:

Примечание: неопределенная переменная: plugin_dir в /home/username/public_html/sitename/wp-content/plugins/woocommerce-gateway-offline/woocommerce-gateway-offline.php

> в строке 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

Как я могу получить правильный URL?

1 Ответ

0 голосов
/ 30 марта 2020

Вы не можете получить доступ к глобальной переменной внутри любого метода или функции без использования 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');

Кстати, вы не должны использовать жестко path, вместо этого вы можете использовать plugin_dir_path (внутри вашего основного файла плагина), например:

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

Примечание. Всегда используйте уникальный префикс для любой глобальной переменной / константы в WordPress.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...