任务:我要做的是通过WP Http API 从远程服务器。我得到的数据是JSON
已编码。在我的一个方法中,我将它们转换回来,然后将其推送到类变量中,以便稍后在一些脚本中使用它。
示例:我是如何做到这一点的
// Simplified... please note, that all names/vars/etc. in my class got unique names.
// ...the same goes for the script handler.
class http_api_example
{
public $remote_data;
public $response;
public function __construct()
{
$this->request();
}
public function request()
{
$request = wp_remote_request( \'http://example.com/HereYouGetSomeJSON\' );
$this->response = json_decode( wp_remote_retrieve_body( $request ) );
}
public function deliver_to_javascript()
{
wp_enqueue_script( \'json_handler\', null, array(), null, true );
// ...then I\'m trying to localize it
wp_localize_script( \'json_handler, \'json_object\', array(
\'ajaxurl\' => admin_url( \'admin-ajax.php\' )
,\'ajax_nonce\' => wp_create_nonce( \'json_handler_nonce\' )
,\'action\' => \'json-handler-action\'
,\'data\' => $this->response
)
}
}
问题:由于某种原因,我无法访问
json_object
从控制台(它适用于其他类中的其他对象)。
到目前为止调试是否已注册并排队我试图查看脚本是否已注册:
// \'registered\': TRUE
var_dump( wp_script_is( \'json_object\' ) );
// \'queue\': TRUE
var_dump( wp_script_is( \'json_object\', \'queue\' ) );
当然,我也研究了
global $wp_scripts
并且可以确认,它就在那里。
是否本地化
// Data shows up, JSON encoded
var_dump( $GLOBALS[\'wp_scripts\']->registered[\'json_object\']->extra;
它在核心的什么地方停止我进入core并通过以下方式进行回溯:
wp_localize_script()
✓- »
$wp_scripts->localize()
✓ - »
WP_Dependencies: add_data()
✓ - »»»
WP_Dependencies: add_data()
FIN!
The
FIN! 记录对自身的调用。正如您在GitHub上的WP repo链接中所看到的,在
->add_data()
, 还有一个电话
->add_data()
(对自己)。我放弃了结果
TRUE
返回
我目前没有“我还能尝试什么?”-选项。也许有人有了一个想法,这应该是如何工作的,或者也许只是我可以尝试进一步研究的地方。
谢谢
最合适的回答,由SO网友:kaiser 整理而成
core是如何做到这一点的
再想一想,我觉得
might be a case WP在内部做同样的事情。右图:它做到了。
示例~/wp-admin/load-scripts.php
$wp_scripts = new WP_Scripts();
wp_default_scripts($wp_scripts);
// inside wp_default_scripts( &$scripts )
$scripts->add( $handle, $src, $dependencies, $version, $args ); // from WP_Dependencies
$scripts->localize( $handle, $object_name, $data ); // from WP_Scripts
这意味着
is a way, 但只能直接使用内部构件。
因此,添加(&A);本地化不存在的文件,只需添加false
而不是$src
:
$wp_scripts->add(
\'your_handle\',
false,
array(),
null,
true
);
$wp_scripts->localize(
\'your_handle\',
"your_handle_object",
array(
\'ajaxurl\' => admin_url( \'admin-ajax.php\' ),
\'ajax_nonce\' => wp_create_nonce( "your_handle-nonce" ),
\'action\' => "your_handle-action",
\'data\' => array(), // Whatever data you need to transport
)
);