Is_admin()在Gutenberg编辑器的SAVE_POST挂钩中返回FALSE

时间:2020-03-08 作者:AldenG

我有一个插件,它实现了一个REST API,当管理员将我支持的一个短代码添加到页面或帖子时,需要通知它。我用这样的函数钩住save\\u post。

        add_action( \'save_post\', \'detect_shortcodes\');
然而,当我从编辑器更新时,它会执行一个ajax调用来实例化我的插件。它要做的第一件事是确定是像这样加载public还是admin挂钩。

    if(is_admin())
    {
        $this->define_admin_hooks();
    }
    else
    {
        $this->define_public_hooks();
    }
当然,我的detect\\u shortcodes函数位于管理端。使用TinyMCE编辑器,这项工作正常,并实例化了我的管理挂钩。对于Gutenberg编辑器,is\\u admin()返回false。

是否有可用于Gutenberg ajax调用的Is\\u admin()的替代品?

3 个回复
SO网友:chifliiiii

您可以尝试以下方法来检测rest

if ( is_admin() || defined( \'REST_REQUEST\' ) && REST_REQUEST ) {

}

SO网友:BenB

我认为这个钩子应该有用:

function run_hooks( $post, $request ) {
    // Here you can run your hooks
}
add_action(\'rest_after_insert_post\', \'run_hooks\', 10, 2);

SO网友:AldenG

我遇到了这个尴尬的黑客。我希望有人能改进这个答案,让它不那么脆弱。也许可以阅读分类法来查找当前页面并发布端点?

    $pagesajax = \'wp-json/wp/v2/pages\';
    $postsajax = \'wp-json/wp/v2/posts\';

    if(is_admin() || !empty($_SERVER[\'REQUEST_URI\']) &&
        strpos($_SERVER[\'REQUEST_URI\'], $pagesajax) !== false ||
        strpos($_SERVER[\'REQUEST_URI\'], $postsajax) !== false)
    {
        ... load admin side ...
    }

相关推荐

Custom Post type shortcodes

我使用高级自定义字段在我的主题中创建自定义帖子类型(功能)。我想知道如何创建自定义帖子类型的短代码。因此,我只使用任何页面的自定义帖子类型的短代码来显示我在自定义帖子类型(功能)中添加的信息。