自定义帖子类型在每个页面中无意中调用

时间:2015-12-14 作者:Boris Kozarac

不久前,我在跟随Tutsplus视频教程创建自定义帖子类型,因此我为自己制作了两个类似的小型自定义帖子类型。

今天我在探索如何优化我的网站,所以我安装了一个插件(查询监视器),显示每个页面上有多少sql查询。我惊讶地发现,在每个页面(frontpage.php、single.php等)上,我都有200多个sql查询:甚至在只有一个图像的附件页面上!当我禁用插件时,大约有60个sql查询。

class branje_biljaka {

    public  $months = array(\'...\');

    public  $terms = array(\'...\');


    public function __construct()
    {
        $this->register_post_type();
        $this->register_months();
        $this->add_meta_box();
    }


    public function register_post_type()
    {
        $args = array(
            \'labels\' => array(
                \'name\' => \'Kalendar branja\',    
                ),
            \'query_var\' => \'branje\',
            \'rewrite\' => array(
                \'slug\' => \'kalendar-branja\'
                ),
            \'public\' => true,
            \'publicly_queryable\' => true,
            \'has_archive\' => true,
            \'menu_position\' => 5,
            \'hierarchical\' => false,
            \'exclude_from_search\' => false,
            \'supports\' => array(\'title\', \'excerpt\')
            );
        register_post_type(\'branje_biljaka\', $args);
    }

    public function register_months()
    {


        foreach($this->months as $month => $month_var)
        {
            $args = array(
                \'labels\' => array(\'name\' => $month),
                \'hierarchical\' => true,
                \'sort\' => true,
                \'query_var\' => $month_var
                );
            register_taxonomy($month_var, \'branje_biljaka\', $args);
            $this->registerTerms($month_var);
        }

    }


    public function registerTerms($taxonomy)
    {

        foreach($this->terms as $term)
        {
            wp_insert_term($term, $taxonomy);
        }

    }



}

    add_action(\'init\', function(){
        new my_custom_post_type();
    });
我只需要在自定义的post类型页面(archive-ctp.php,single-ctp.php)上显示数据,我想问题在于add_action(\'init\', function());这也是我在法典中看到的https://codex.wordpress.org/Function_Reference/register_post_type我如何限制注册和有关此帖子类型的所有内容仅在需要时使用?

1 个回复
最合适的回答,由SO网友:bosco 整理而成

自定义帖子类型和分类法定义不会保存到数据库中,因此注册它们只会让WordPress“意识到”它们在该页面请求中的存在。由于自定义post类型/分类注册不需要数据库交互,因此对性能的影响可以忽略不计。实际上,我从未见过任何有选择地注册CPT/分类法的应用程序(尽管我确信它们确实存在)。

检查有问题的查询本身应该可以让您很好地了解导致这些问题的原因。在这种情况下,它们可能会指向您使用wp_insert_term(), 它尝试在每次加载页面时将所有这些术语插入数据库。只有当您的插件第一次使用activation hook.

相关推荐

从unctions.php调用的Add_Actions未返回好值

我正试图通过这些功能为我的网站添加一些安全/访问防护。php。然而,每当我尝试通过函数添加时。php(而不是作为插件,我以前做过)失败(总是返回false)。例如:add_action(\"parse_query\", checkaccess()); // in functions.php 以及function checkaccess() { $allowAccess = false; if(is_admin()||is_front_page()||i