如何在PHP对象外部访问WordPress插件类的属性值?
解决方案:在外部读取WordPress插件类的
post_type_name属性 当然可以!既然你只需要只读访问这个属性,有几种简洁又符合WordPress开发规范的方法,我给你梳理一下:
方法1:直接访问类属性(如果属性是public)
如果你的插件核心类里post_type_name是定义成public的,那最简单直接——只要你能拿到类的实例,就可以直接读取:
// 假设你的核心类是 My_Core_Plugin_Class,并且用单例模式初始化 $plugin_instance = My_Core_Plugin_Class::get_instance(); $post_type = $plugin_instance->post_type_name; // 构造你的后台编辑链接 $edit_link = admin_url("edit.php?post_type={$post_type}");
要是你的类不是单例,那得确保能拿到已经创建好的实例对象(比如插件初始化时把实例存在全局变量里,用global关键字调用即可)。
方法2:给类加一个静态 getter 方法(更安全规范)
如果post_type_name是private或protected的(这其实是更推荐的面向对象封装做法),别直接把属性改成public,而是给类加一个静态的只读方法来返回这个值:
class My_Core_Plugin_Class { private $post_type_name = 'my_custom_post_type'; // 新增静态 getter 方法 public static function get_post_type_name() { // 如果是单例类,先获取实例再返回属性 $instance = self::get_instance(); return $instance->post_type_name; // 如果属性本身是静态的,直接 return self::$post_type_name; } }
然后在外部文件里直接调用这个静态方法就行:
$post_type = My_Core_Plugin_Class::get_post_type_name(); $edit_link = admin_url("edit.php?post_type={$post_type}");
这种方式既保证了属性不会被意外修改,又能安全地在外部获取值,完美符合面向对象的封装原则。
方法3:把值存到WordPress全局变量/选项里(适合多场景复用)
如果你需要在很多地方都用到这个值,也可以在插件初始化时,把post_type_name存到WordPress的全局变量或者wp_options中:
// 在插件核心类的初始化方法里 function init() { global $my_plugin_post_type; $my_plugin_post_type = $this->post_type_name; // 若需要持久化存储(你的场景只读的话全局变量足够) // update_option('my_plugin_post_type', $this->post_type_name); }
然后在外部文件里调用:
global $my_plugin_post_type; $edit_link = admin_url("edit.php?post_type={$my_plugin_post_type}"); // 如果用选项存储的话 // $post_type = get_option('my_plugin_post_type');
注意全局变量要加独特前缀(比如插件名缩写),避免和其他插件/主题的变量冲突。
总结一下:优先用方法2(静态getter),既安全又规范;如果属性本来就是public,方法1最省事;全局变量适合多场景复用的情况。
内容的提问来源于stack exchange,提问作者Cedon
相关产品推荐
相关产品推荐

