Я делаю собственный платежный шлюз. Сложные части идут нормально, но я уже часами застрял на какой-то глупости.
Я без проблем создал пользовательские настройки для шлюза, их можно установить и сохранить, но я не могу понять, как их вызвать в других функциях.
Если я помещу var_dump($this->get_option('title'))
в класс пользовательского шлюза (который является extends WC_Payment_Gateway
), он будет правильно отображаться в верхней части страницы настроек. В другом месте этого не будет. Я пробовал сотни вещей, например, попытался получить доступ к этому классу с помощью $ this = new WC_Custom_Gateway, сделать задействованные функции общедоступными и использовать init_settings()
.. Я уверен, что есть очень простое решение, но как новичок я просто не могу этого видеть. Я тоже безуспешно пытался изучить работы других.
Как я могу сделать эти настройки доступными вне класса, в котором они определены?
🤔 А знаете ли вы, что...
PHP можно использовать для работы с XML-документами.
Использование следующего кода позволит вам отображать необходимые данные из настроек вашего платежного шлюза, используя методы 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