Получите данные пользовательского платежного шлюза в качестве настроек в Woocommerce 3

Я делаю собственный платежный шлюз. Сложные части идут нормально, но я уже часами застрял на какой-то глупости.

Я без проблем создал пользовательские настройки для шлюза, их можно установить и сохранить, но я не могу понять, как их вызвать в других функциях.

Если я помещу var_dump($this->get_option('title')) в класс пользовательского шлюза (который является extends WC_Payment_Gateway), он будет правильно отображаться в верхней части страницы настроек. В другом месте этого не будет. Я пробовал сотни вещей, например, попытался получить доступ к этому классу с помощью $ this = new WC_Custom_Gateway, сделать задействованные функции общедоступными и использовать init_settings() .. Я уверен, что есть очень простое решение, но как новичок я просто не могу этого видеть. Я тоже безуспешно пытался изучить работы других.

Как я могу сделать эти настройки доступными вне класса, в котором они определены?

🤔 А знаете ли вы, что...
PHP можно использовать для работы с XML-документами.


2
2 668
1

Ответ:

Решено

Использование следующего кода позволит вам отображать необходимые данные из настроек вашего платежного шлюза, используя методы WC_Payment_Gateways и WC_Payment_Gateway следующим образом:

// HERE define you payment gateway ID (from $this->id in your plugin code)
$payment_gateway_id = 'bacs';

// Get an instance of the WC_Payment_Gateways object
$payment_gateways   = WC_Payment_Gateways::instance();

// Get the desired WC_Payment_Gateway object
$payment_gateway    = $payment_gateways->payment_gateways()[$payment_gateway_id];

// Display saved Settings example:
echo '<p>Title: ' . $payment_gateway->title . '</p>';
echo '<p>Description: ' . $payment_gateway->description . '</p>';
echo '<p>Instructions: ' . $payment_gateway->instructions . '</p>';

// Display all the raw data for this payment gateway 
echo '<pre>'; print_r( $payment_gateway ); echo '</pre>'; 

В качестве альтернативы вы также можете использовать этот более короткий способ:

// You will have to replace 'bacs' by your payment gateway ID (from $this->id in your plugin code)
$payment_gateway = WC()->payment_gateways->payment_gateways()['bacs'];

// and so on …

Проверено и работает.

You can also use some WC_Payment_Gateway methods on $payment_gateway