我正在尝试使用React实现Wordpress REST API。现代惯例似乎是将API设置为域的子文件夹,即
https://sitename.com/api/v1
I want to be able to go to
https://sitename.com/api/v1/wp-admin
And be able to sign into wordpress and have it so the REST api is accessed like:
https://sitename.com/api/v1/wp-json/wp/v2/pages
我有这个文件结构:
api/
内部是wordpress安装。如果我将api包含在公用文件夹中,并指向带有虚拟主机的build文件夹,则它会按预期运行,除了以下事实外:在我构建React应用时,它会清除Wordpress安装并重新启动整个过程。
我尝试将虚拟主机设置为子文件夹,但它仍返回404。
编辑:要获得此运行的简单实例:
yarn create-react-app dir_name
cd dir_name
mkdir api
cd api
wp core download
# Add virtual host
# Generate SSL Cert
答案 0 :(得分:0)
我相信,如果您将WordPress安装在/ api子文件夹中,则该文件夹被视为WP实例的根目录,因此不会在REST API端点中添加任何前缀。
要实现此目的,您应该使用“ rest_url_prefix”过滤器。像这样:
add_filter( 'rest_url_prefix', 'change_api_slug');
function change_api_slug( $slug ) {
return 'api';
}
这是一篇非常不错的文章:https://buddydev.com/modifying-api-base-url-prefix-for-wp-rest-api-plugin/
希望它会有所帮助:)
答案 1 :(得分:0)
我想出的最好办法是将符号链接附加到api/
目录,并将其链接到build/
目录。
# Source->Destination
ln -s /var/www/site.com/public/api /var/www/site.com/build/
根据您的配置,一旦您对服务器执行api/
的访问权限以访问Wordpress(例如添加插件),则可能必须更改yarn build
组。
快速浏览:
ln -s /var/www/site.com/api /var/www/site.com/public/
yarn build/
sudo chown -R :www-data build/
编辑:我最近采用了使用apache虚拟主机的感觉更好的方法。
首先,我将根目录分为frontend
和backend
目录。内部前端是create-react-app
的输出。 backend
内是api/wp
。我将Wordpress嵌套在一个api目录中,以防该项目进行扩展并包含多个api,它们都将被组合在一个地方。
这是目录结构
在后端.htaccess内部,是重定向到wordpress安装
RewriteEngine On
RewriteBase /api
RewriteCond %{REQUEST_URI} !^/api/wp
RewriteRule (.*) wp/$1 [R=302,L]
内部wordpress是我制作的一个空白主题,它重定向到react应用程序的URL,在本例中为isma.test。