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 挂钩,短代码将仅在管理区域注册,而不会在前台注册。