You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:26:42