在触发init钩子后在全局范围内存储值

时间:2020-10-04 作者:user9559590

我现在正在设置页面上工作。由于我需要在设置页面中重复使用有关帖子类型、分类法和帖子的数据,因此我倾向于在全局范围内获取这些变量,并在设置字段中调用它们,以最小化数据库查询。

这对于内置的帖子类型和分类法(即帖子、页面、类别和标记)很有效。但是,当init 钩火。以下是我的代码片段:

<?php
//I need to get these variables after init hook is fired to get all cpt and custom taxonomies data

$current_taxonomies_names = get_taxonomies($args, \'names\');
$current_post_type_names = get_post_types($args, \'names\');
$query_posts = get_posts($query_args);

//The above variables shall be used repeatedly in the below function

function appearance_settings()
{

  //Adding section and fields for the settings page
  add_settings_section(\'structure\', \'App Structure\', \'structure\', \'main\');
  add_settings_field(\'post_types\', __(\'Post Types\', \'\'), \'post_types\', \'main\', \'structure\');
  add_settings_field(\'taxonomies\', __(\'Taxonomies\', \'\'), \'taxonomies\', \'main\', \'structure\');
  add_settings_field(\'excluded_posts\', __(\'Excluded Posts\', \'\'), \'excluded_posts\', \'main\', \'structure\');
  add_settings_field(\'excluded_taxes\', __(\'Excluded Taxonomies\', \'\'), \'excluded_taxes\', \'main\', \'structure\');
}
那么有没有办法$current_taxonomies_names, $current_post_type_names$query_postsinit 胡克开火了?

如果没有办法,是否有其他方法可以获取这些变量,而不必在每个设置字段回调函数中不断查询数据库?

1 个回复
SO网友:user9559590

因此,在咨询Facebook Advanced WordPress group后,建议使用setter和getter创建一个对象,而不是在全局范围内使用声明和获取变量,如下代码所示:

class MyPlugin
{
  public $current_post_types;

  public function __construct()
  {
    add_filter(\'init\', array($this, \'get_variables\'));
  }


  public function get_variables()
  {
    $this->current_post_types = get_post_types(array(
      \'public\' => true,
      \'show_in_rest\'   => true,
    ), \'objects\');
  }
}

$skeleton = new MyPlugin();

function mk_post_types()
{
  global $skeleton;
  $current_post_types = $skeleton->current_post_types;
  //remaining code below
}
这解决了问题,现在我可以在mk_post_types 作用

相关推荐

Search with filters

我想在搜索表单中创建三个过滤器,其中包括三个不同的过滤器(标签、类别和帖子)。是否可以创建这些过滤器?如果可能的话,意味着我如何创建它?基本上,我不擅长PHP。所以,请帮我解决这个问题。谢谢