Wordpress 插件 - 无法从 class 中创建简码
Wordpress plugin - can't create shortcodes from within a class
我在 wordpress 数据库中存储了一个数组,其中包含我要创建的简码。我想读取短代码数组,并使用未实例化的 class 中的 class 函数在我的 wordpress 网站上创建它们。 (我是 PHP 中 classes 的新手,所以尽量保持简单)
wordpress数据库中存储的数组结构:
my_array = [
'code1' => 'text_to_replace1', 'show1' => 'text_to_show1',
'code2' => 'text_to_replace2', 'show2' => 'text_to_show2',
];
我正在使用这样的代码来尝试创建简码:
add_action( 'admin_init', ['my_class','register_shortcodes'] );
class 中的函数是:
class my_class {
private static $codes = [];
static function register_shortcodes() {
self::$codes = get_option('my_options_in_database');
add_shortcode( $codes['code1'],['my_class', 'render_shortcode1'] );
add_shortcode( $codes['code2'],['my_class', 'render_shortcode2'] );
}
static function render_shortcode1() {
return self::$codes['show1'];
}
static function render_shortcode2() {
return self::$codes['show2'];
}
}
代码显示为一半-运行,因为正在创建简码(正如另一个插件所显示的显示活动简码),但简码没有做任何事情。文本永远不会被替换。
例如,如果短代码存储在 'code1' = 'foo' 和 'show1' = 'bar' 中,并且我在网站的一个页面上有这个
This is what [foo] looks like
它永远不会被 'show1' 中的正确文本替换。
我尝试了很多变体并查阅了很多文章,例如这篇文章:
Create a shortcode for a handmade plugin in Wordpress
或者这个:
WP Shortcodes not being added
似乎没有什么能准确解决这个问题,而且因为没有抛出任何错误,所以我不知道为什么它不起作用。我真的很感激这里的一些指示。
另外:我还没有弄清楚如何在 class 中以这种方式调用它们时将参数传递给我的函数。如果我知道这一点,我可以用一个函数来渲染我所有的短代码,这样也会有帮助。对此的任何信息也将不胜感激。如果需要,我可以为此创建一个单独的问题。
当你想注册一个短代码时,不要使用admin_init
,而是init
。即使您想在管理区域中进行设置。因为 WordPress 不会在数据库中存储您注册的内容,所以在每次加载页面时都会读取注册简码的代码。
使用 admin_init
挂钩,短代码将仅在管理区域注册,而不会在前台注册。
我在 wordpress 数据库中存储了一个数组,其中包含我要创建的简码。我想读取短代码数组,并使用未实例化的 class 中的 class 函数在我的 wordpress 网站上创建它们。 (我是 PHP 中 classes 的新手,所以尽量保持简单)
wordpress数据库中存储的数组结构:
my_array = [
'code1' => 'text_to_replace1', 'show1' => 'text_to_show1',
'code2' => 'text_to_replace2', 'show2' => 'text_to_show2',
];
我正在使用这样的代码来尝试创建简码:
add_action( 'admin_init', ['my_class','register_shortcodes'] );
class 中的函数是:
class my_class {
private static $codes = [];
static function register_shortcodes() {
self::$codes = get_option('my_options_in_database');
add_shortcode( $codes['code1'],['my_class', 'render_shortcode1'] );
add_shortcode( $codes['code2'],['my_class', 'render_shortcode2'] );
}
static function render_shortcode1() {
return self::$codes['show1'];
}
static function render_shortcode2() {
return self::$codes['show2'];
}
}
代码显示为一半-运行,因为正在创建简码(正如另一个插件所显示的显示活动简码),但简码没有做任何事情。文本永远不会被替换。
例如,如果短代码存储在 'code1' = 'foo' 和 'show1' = 'bar' 中,并且我在网站的一个页面上有这个
This is what [foo] looks like
它永远不会被 'show1' 中的正确文本替换。
我尝试了很多变体并查阅了很多文章,例如这篇文章: Create a shortcode for a handmade plugin in Wordpress 或者这个: WP Shortcodes not being added
似乎没有什么能准确解决这个问题,而且因为没有抛出任何错误,所以我不知道为什么它不起作用。我真的很感激这里的一些指示。
另外:我还没有弄清楚如何在 class 中以这种方式调用它们时将参数传递给我的函数。如果我知道这一点,我可以用一个函数来渲染我所有的短代码,这样也会有帮助。对此的任何信息也将不胜感激。如果需要,我可以为此创建一个单独的问题。
当你想注册一个短代码时,不要使用admin_init
,而是init
。即使您想在管理区域中进行设置。因为 WordPress 不会在数据库中存储您注册的内容,所以在每次加载页面时都会读取注册简码的代码。
使用 admin_init
挂钩,短代码将仅在管理区域注册,而不会在前台注册。