根据这篇文章,没有针对Wordpress的内置JavaScript API。因此,想要建立在AJAX上的开发人员似乎提出了自己的解决方案,这对我来说似乎不合适。
除了使用内置API获取帖子或任何数据外,我真正想念的是一小套JavaScript函数,用于处理后端和前端接口。现在,关于这个问题有什么计划吗?
例如,我很想知道
- 左侧主菜单折叠,
- 什么用户登录
- 他是哪一组
- 甚至客户端数据(例如浏览器)
等等。
根据这篇文章,没有针对Wordpress的内置JavaScript API。因此,想要建立在AJAX上的开发人员似乎提出了自己的解决方案,这对我来说似乎不合适。
除了使用内置API获取帖子或任何数据外,我真正想念的是一小套JavaScript函数,用于处理后端和前端接口。现在,关于这个问题有什么计划吗?
例如,我很想知道
等等。
Answers:
WordPress核心中没有JavaScript API,也没有人计划,但实际上并不需要它。
首先,对于后端,可以从已经存在的JavaScript全局变量中获取一些有用的信息(WordPress喜欢所有全局变量)。
例如
ajaxurl
用于admin-ajax.php
ajax调用的URLpagenow
用于当前管理页面提示,例如“ dashboard”adminpage
用于当前管理页面文件,例如“ index-php”(点替换为hiphens)typenow
用于中的当前帖子类型edit.php
,post.php
或post-new.php
userSettings
可用于获取当前登录用户的信息在后端时,这些信息为您提供了应用程序状态的“上下文”。
对于问题中提到的其他内容,您不需要任何“ API”,因为超简单的jQuery函数可以解决问题。例如,要知道管理菜单是否关闭,可以检查正文中的“折叠”类:
if ( $(body).hasClass('folded') ) {
alert( 'Admin left menu is closed!' );
} else {
alert( 'Admin left menu is open!' );
}
对于像以前的代码片段这样的事情,不值得创建函数。WP在PHP中已经具有太多功能。我真的希望不会将诸如此类的其他功能添加到核心中。
WordPress中的JavaScript真正需要的是现有功能的更多文档:我上面编写的所有内容都未在任何正式文档(如Codex)或源文件中得到记录。
直到这里,我只谈论后端。
这是因为前端发生的几乎所有事情都与当前使用的主题有关。假设WordPress提供了一个JavaScript文件,其中包含用于获取有关当前应用程序状态信息的函数。如果主题不使该JS文件入队,则这些功能不可用,并强制执行主题使此类脚本入队将是绝对错误的。
但是,在WordPress中,您可以通过JavaScript轻松使用通过PHP获取的所有信息,而无需任何AJAX请求。使之成为可能的功能是wp_localize_script()
。
假设您要在JavaScript中获取当前用户和用户数据,例如其user-role,并且还想知道当前页面中使用的查询变量,则可以执行以下操作:
$data = array(
'user' => wp_get_current_user(),
'query_vars' => $GLOBALS['wp']->query_vars
);
wp_localize_script( 'myscript', 'MyScriptData', $data );
在脚本中,该MyScriptData.user
变量将是一个JavaScript对象,其中包含所有用户信息以及所有查询变量。
这对后端脚本和前端脚本有效(换句话说:对于两个“边”)。不需要任何其他 JavaScript API即可获取该信息。如果您使用正确的方法将信息从PHP传递到JS,则PHP就足够了。
Backbone.js是一个JavaScript框架,允许使用JavaScript进行(某种)MVC开发模式。它已包含在WP 3.5的核心中-主要用于处理媒体库。
该库不是WordPress JavaScript API,因为它肯定可以进行更强大的JavaScript开发,但是该库中未添加任何特定于WordPress的功能,并且它是当前的唯一库。 Backbone.js核心用法。媒体库或多或少没有文档记录,没有公共API。而AFAIK并未计划填补这一空白。(如果有人可以证明我做错了,那么很乐意更改/删除该声明)。
正如Rarst和Brian Fegter指出的那样,WP API将成为核心的一部分(可能从WP 4.1开始)。
但是我不得不说这不是 JavaScript API。它仅允许将HTTP请求连接到由WP-API控制的应用程序端点。API从数据库中获取数据并以JSON格式返回数据库。来自文档的示例:
想获取您网站的帖子?只需向发送
GET
请求即可/wp-json/posts
。使用ID更新用户4
?向发送POST
请求/wp-json/users/4
。获得所有带有搜索词“ awesome”的帖子?GET /wp-json/posts?filter[s]=awesome
。
由于HTTP请求和相关JSON响应可以使用任何支持HTTP请求和JSON数据格式的语言(包括PHP,Ruby,Python,ASP等)来处理,因此WP API的主要目的是允许获取和设置WordPress数据来自非WP应用程序。这意味着从任何应用程序内部,不仅是WordPress。
当然,由于JavaScript是可以同时处理HTTP请求和JSON格式的语言,因此您也可以在WordPress JavaScript中使用WP-API。有人也在为该API开发WP js客户端,但是
使用wp_enqueue_script()
+ Ajax API + WordPress PHP函数,可以检索您需要的所有信息,而无需任何其他API。而且,由于所有这三个“成分”都是WP建立的标准,因此使用它们不是“自己的解决方案”。它只是利用标准解决方案来执行自定义(和常见)任务,而这正是该插件开发的全部目的。
甚至可以使用JavaScript来利用WP API。仅仅因为WP-API返回JSON,它并没有使其成为JavaScript API。不涉及JavaScript函数(发送HTTP请求并返回JSON回购。与使用AJAX API发生的操作几乎相同)。否则,任何返回JSON的服务都应视为WordPress JS API。应该将WP-API视为返回JSON 的外部服务API,并且可能情况是,使用此JSON服务的站点与提供它的站点相同。
使用WP API不能完成任何事情,而使用AJAX API也不能做到。但是使用AJAX API可以完成很多事情。但不适用于WP-API。
使用Backbone.js,可以在支持RESTful HTTP请求的应用程序中获取和保存信息。
问题在于,无论是在“常规”请求中还是在AJAX请求中,WordPress都几乎是RESTful的:它默认仅支持$_GET
和$_POST
请求,并且使用具有相同URl的一个或另一个将导致...相同的结果。
相反,WP API是RESTful的,因此基于Backbone的应用程序可以将其用于功能强大的JavaScript应用程序,但是我不会将Backbone或WP API或Backbone + WP API定义为WordPress的JavaScript API的事情以上。
SHORTINIT
可以使ajax更快。用WP API进行同样的操作会更加困难。BTP,您是一个真正的快速应用程序吗?提示:请勿使用WordPress。
尽管从历史上看WP一直以后端为中心,但多年来已经声明要大量使用JS。考虑到向后兼容性的承诺,令人怀疑的是,JS是否会很快实现奇偶校验或接管PHP(在我看来),但是在此方面已经取得了一些进展。
WordPress管理员现在随附Backbone和Underscore,这是最新媒体库迭代的很大一部分。不幸的是,实现的细节尚未得到严格记录,并且第三方使用相对不受欢迎。
要回答您的声明:
[...]没有内置的Wordpress Javascript API。因此,想要在Ajax上进行开发的开发人员似乎都提出了自己的解决方案,这对我来说似乎不合适。
没有“自己的解决方案”可以完成。您可以通过使用缓和的事情ATP与ajax_template_part()
由@GM或类似的插件和走捷径,但仍然没有去与AJAX在WordPress非标准的方式。那些“自己的解决方案” /方法(大多数)做错了。AJAX调用大致是这样完成的:
$.ajax()
和类似功能对用户交互做出反应。使用全局(本地化)JS对象将数据传递回PHP回调。wp_send_json_success()
和类似的功能返回JSONify数据。如果一个插件或主题没有那样做,那么作者就不会读东西或不看示例。还有就是对于应该使用的骨架。
有关如何在WP中处理AJAX的更多详细信息,请参见社区书籍“ WordPressTheRightWay”。
除了使用内置API获取帖子或任何数据外,我真正想念的是一小套Javascript函数,用于处理后端和前端接口。[...]例如,我很想知道左边的主菜单是折叠的,或者是什么用户登录或者他是哪个组,甚至是客户端数据,例如浏览器等等。
WordPress根本就没有具体说明您需要使用AJAX做什么。这就是为什么您可以将几乎所有内容填充到本地化/全局化数组中并将其用于AJAX调用的原因。这完全符合Backbone的工作方式:您必须做自己想做的事情。
如果您想使用像AngularJs这样的自以为是的JavaScript MVC框架,那么您来错了地方。还有其他CMS,例如OctoberCMS,Drupal8等,在为其提供基础方面要好得多。WordPress会要求您构建一组自定义的重写端点,您可以在其中返回JS控制器的数据集。