Как получить корневой URL-адрес сайта при использовании объекта Wordpress Gutenberg wp

Я только что создал свой первый плагин блока Gutenberg, используя пакет npm create-guten-block.

Функция редактирования выглядит как код, который вы видите ниже. Но он дает 404, не найденный наapiFetch()звоните, потому что веб-сайт находится в папке, а не в корне домена. Другими словами: структура имени хостаhttp://localhost/websitename/ не websitename.local.

edit: ( props ) => {
    if ( ! props.attributes.categories ) {
        wp.apiFetch( {
           url: '/wp-json/wp/v2/categories'
        }).then(categories => {
            props.setAttributes( {
                categories: categories
            });
        });
    }
    return (
        true
    );
}

Итак, что было бы эквивалентом PHP get_site_url()? Эти данные где-то хранятся вwpобъект? Если да, то где? Потому что мне нужно добавить/wp-json/wp/v2/categories с правильным URL-адресом сайта.

2 ответа

Решение

Просто нашел решение сам.

в init перехватчик вашего плагина блока Gutenberg, у вас может быть функция, которая создает глобальный объект данных для использования в файле редактора Wordpress block.js.

Итак, в init.php внутри init вы можете добавить:

wp_localize_script(
    'custom_block',
    'cs_data',
    [
        'siteUrl'       => get_site_url()
    ]
);

Таким образом глобальный объект cs_data доступен в block.js. Таким образом, теперь вызов Fetch может использовать динамический путь вот так.

wp.apiFetch( {
    url: cs_data.siteUrl + '/wp-json/custom-data/v1/post-types'
} ).then( postTypes => {
    props.setAttributes( {
      postTypes: postTypes
    } );
} );

Надеюсь это поможет.

Попробуйте обновить свой site_url или home_url

site_url() всегда будет местом, откуда вы сможете попасть на сайт, если home_url() будет там, где вы установили свою домашнюю страницу.

Попробуйте установить home_url()в " http://localhost/websitename ", открыв и отредактировав поле " Общие> Настройки"WordPress address (URL)".

Вы также можете определить пути программно, отредактировав файл wp-config.php:

define( 'WP_HOME', 'http://localhost/websitename/' );
define( 'WP_SITEURL', 'http://websitename.local' );

Тогда вы могли бы использовать get_home_url() чтобы получить правильный путь.

Другие вопросы по тегам