如何从块中获取站点URL(在块编辑器中)

时间:2021-02-09 作者:JakeParis

我有一个块,我想在其中显示一个基于网站url的链接。例如,当用户输入;“未来主义”;,链接将显示为https://my-site.com/futuristic/

我已经看过了REST API /settings/ endpoint, 应该包括url 字段,但事实并非如此(至少在我尝试的两个不同的站点上)。也许这是因为我已经将WP设置为多站点。我敢肯定,应该还有一种方法可以访问当前网站的url。

我已经调查过了wp.data.select() 可以在各种名称空间中提供,但我看不到任何包含网站url的内容。

我试着查看wp.data.select(\'core\').getSite() (参见Hardeep\'s suggestion), 但我的没有url属性,如下所示:

{ 
  date_format: "F j, Y"
  default_category: 1
  default_comment_status: "open"
​  default_ping_status: "open"
​  default_post_format: "0"
​  description: ""
​  language: ""
​  posts_per_page: 10
​  start_of_week: 0
​  time_format: "g:i a"
​  timezone: "America/New_York"
​  title: "The Name of My Site"
​  use_smilies: true
}
我怀疑差异与启用多站点有关,但不确定。

2 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

也许这是因为我已经将WP设置为多站点。

是的,没错,WordPress禁用siteurl (以及admin_email) 多站点上的设置-请参见register_initial_settings() 对于源。

我不知道他们为什么禁用这(两)个设置,但您可以为url/siteurl 设置,例如,将进入主题的functions.php 文件:

// I copied this from the source..
register_setting(
    \'general\',
    \'siteurl\',
    array(
        \'show_in_rest\' => array(
            \'name\'   => \'url\',
            \'schema\' => array(
                \'format\' => \'uri\',
            ),
        ),
        \'type\'         => \'string\',
        \'description\'  => __( \'Site URL.\' ),
    )
);
尝试(&T);使用WordPress 5.6.1 Multisite进行测试。

而且,wp.data.select( \'core\' ).getSite() 使用设置端点,因此url 默认情况下,多站点上缺少属性。

除此之外,getSite() 缓存API结果,因此您需要重新加载后期编辑屏幕/页面,以便getSite() 为给您提供正确的结果,即url 所有物

SO网友:Hardeep Asrani

您可以使用wp_localize_script 要将所需的任何内容(包括站点URL)作为全局变量传递给编辑器,请执行以下操作:

wp_localize_script(
    \'script_name\',
    \'my_data\',
    [
        \'siteUrl\' => get_site_url()
    ]
);
然后你可以在编辑器中从window.my_data.siteUrl 变量在这里script_name 将是您排队等待编辑器的脚本。

如果要使用数据API,可以使用wp.data.select( \'core\' ).getSite(); 一旦承诺得到解决,就可以使用URL属性。

enter image description here