自定义发布类型|REGISTER_POST_TYPE()上的致命错误

时间:2018-01-07 作者:tallent123

我正试图按照指南使用OOP开发我的第一个Wordpress插件。到目前为止,我已经逐字逐句地关注了这个问题,但我仍在努力解决这个问题,我无法重写我想象中的URL。

这是我正在使用的代码。。。

class BookItNow
{
function __construct()
{
    add_action(\'init\', $this->custom_post_type());
}

function activate()
{
    $this->custom_post_type();
    flush_rewrite_rules();
}

function register()
{
    add_action(\'admin_enqueue_scripts\', array($this, \'enqueue\'));
}

function deactivate()
{
    flush_rewrite_rules();
}

function custom_post_type()
{
    register_post_type(\'bookings\', [\'public\' => true, \'label\' => \'Bookings\']);
}

function enqueue()
{
    wp_enqueue_style(\'style\', plugins_url(\'/assets/style.css\', __FILE__));
}
}

if (class_exists(\'BookItNow\')) {
    $book = new BookItNow();
    $book->register();
}

register_activation_hook(__FILE__, array($book, \'activate\'));
register_deactivation_hook(__FILE__, array($book, \'deactivate\'));
register_uninstall_hook(__FILE__, array($book, \'uninstall\'));
这就是我犯的错误Uncaught Error: Call to a member function add_rewrite_tag() on null. 删除$this->custom_post_type() 删除此问题,所以我不知道。任何帮助都将不胜感激。

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

尝试以下更改:

1) 要在使用类而不是只传递函数名来构建插件或主题时使用add\\u action(),需要传递一个数组,其中引用类($this)和可调用函数(\'custom\\u post\\u type\')

function __construct()
{
    add_action(\'init\', array( $this, \'custom_post_type\' ) );
}
2)原始的“activate”方法称为“custom\\u post\\u type”,建议在插件激活时只需调用一次。但是,为了正确注册自定义post类型,每次加载Wordpress时都需要调用此方法,这就是为什么它被添加到“init”挂钩中的原因。在activate方法中调用它真的没有意义,所以我删除了它。

function activate()
{
    flush_rewrite_rules();
}

结束

相关推荐

Single必须使用Plugins目录进行本地开发

我有多个本地安装的WordPress,并希望有一个单一的必须使用插件目录为我的所有本地网站。有什么我可以添加到wp配置,例如,让我有一个文件夹,可以用于我的所有网站?或者另一种方法?例如:/根/站点/站点1//根/站点/站点2//根/站点/站点3/。。。所有用途:/根/mu插件/谢谢