从静态函数注册CUSTOM_POST_TYPE

时间:2020-09-06 作者:user1422434

我刚刚开始wordpress插件开发。我想注册一个新的帖子类型时,插件被激活。但是当我激活插件时,什么都没有发生,Wordpress桌面上没有创建新菜单,apache的错误中没有错误。“日志”文件。

我想这可能是因为activate()方法是静态的,但我正在尝试遵循Wordpress。组织示例。

我有这个:

main-plugin-file.php

register_activation_hook( __FILE__, \'plugin_register_activation_hook\' );
function plugin_register_activation_hook(){
    require_once plugin_dir_path( __FILE__ ) . \'includes/class-plugin-activator.php\';
    CustomPluginActivator::activate();
}

includes/class-plugin-activator.php

class CustomPluginActivator {
 
    public static function activate() {
        add_action(\'init\', array( get_called_class(), \'register_custom_type\'));               
    }
        
    function register_custom_type() {
        register_post_type(\'custom_type\',
            array(
                \'labels\'      => array(
                    \'name\'          => __(\'Names\',    \'textdomain\'),
                    \'singular_name\' => __(\'Name\',     \'textdomain\'),
                ),
                \'description\'   => \'Descripción\',
                \'public\'        => true,
                \'menu_position\' => 2,
                \'has_archive\'   => false,
                \'rewrite\'       => array( \'slug\' => \'custom-slug\' )
            )
        );
    }

}
对不起,我的英语。谢谢

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

由于激活插件时只会调用激活挂钩,因此您需要调用register_post_type() 在每次访问管理页面时都会触发的某个挂钩上。您可以使用init 此挂钩:

add_action(\'init\', array($this, \'register_custom_type\'));
您还需要register_custom_type() 此操作的公共方法:

public function register_custom_type()
{
  // call register_post_type()
}

Documentation

注意:在“init”操作之前,不应挂接Post类型注册。此外,应通过$taxonomies参数注册任何分类连接,以确保使用诸如“parse\\u query”或“pre\\u get\\u posts”之类的挂钩时的一致性。

相关推荐