我在使用短代码时显示从插件文件中定义的自定义类返回的信息时出现问题。我会写一些模拟文件来展示我的问题。
/wp-content/plugins/my-plugin/classes/my_class.php
<?php
class People {
public $api_url = "https://www.external-service.com/api";
private $api_key;
function __construct($key = null) {
if $(key) {
$this->api_key = $key;
}
function get_response() {
$path = $this->api_url . "?my_api_token=" . $this->api_key;
}
}
?>
/wp-content/plugins/my-plugin/my-plugin.php
<?php
/**
* all of the wordpress plugin comments
* ...
*/
require "myplg_options.php";
require "myplg_shortcodes.php";
选项页面和菜单是从myplg_options生成的;它运行正常(包括使用get_option检索已保存的选项(在本例中为api密钥)。
/wp-content/plugins/my-plugin/myplg_shortcodes.php
<?php
require "classes/my_class.php";
$options = get_option('myplg_settings');
$myplg = new People($options['myplg_api_key']);
$response = $myplg->get_response();
function myplg_list_result(){
echo "the shortcode is working!";
var_dump($options, $myplg, $respnose);
}
add_shortcode('myplg_list', 'myplg_list_result');
?>
从wordpress外部测试,该课程正常,一切都很好,花花公子。插件的选项页面完美地设置并保留了单个选项;短代码实际上是在WordPress页面/组合/等中注册和使用的。
我遇到的问题是,使用var_dump
, 这些变量的所有三个 都会被转储为NULL
。
在完成一些功课后,我能够确定将三个变量声明移动到短代码中使其工作。但是,在我看来,这样做并不是最好的工作流程,因为我需要重新获取选项,实例化一个新类,并为每个短代码调用类的函数。
有解决方法吗?
答案 0 :(得分:0)
正如评论中所提到的那样,因为变量是函数范围的。你可能最好使用Closure。
<?php
require "classes/my_class.php";
$options = get_option('myplg_settings');
$myplg = new People($options['myplg_api_key']);
$response = $myplg->get_response();
add_shortcode('myplg_list', function() use ($options, $response, $myplg) {
echo "the shortcode is working!";
var_dump($options, $myplg, $respnose);
});