如何在创建wordpress插件时在jQuery加载页面中启动挂钩?

时间:2013-12-15 12:56:06

标签: jquery ajax wordpress jquery-plugins

我正在使用以下页面编写一个wordpress小部件 1)我有母版页(mas​​ter.php)     - 是主要的插件页面     - 使用jQuery加载第二页(slave.php) 2)从页面     - 有php,jquery,css等。     - 是一个外部页面

以下是master.php的一部分


<?php
add_action('init', 'register_masterscript');
function register_masterscript() {
    wp_register_script( 'master_jquery', plugins_url('/js/master-script.js', __FILE__), array('jquery'), '2.5.1' );
        wp_register_script( 'master_jquery2', plugins_url('/js/master.js', __FILE__), array('jquery'), '2.5.1' );
    wp_register_style( 'master_style', plugins_url('/css/master_style.css', __FILE__), false, '1.0.0', 'all');
}

// using the registered jquery and style above
add_action('wp_enqueue_scripts', 'enqueue_masterstyle');

function enqueue_masterstyle(){
   wp_enqueue_script('master_jquery');
   wp_enqueue_script('master_jquery2');
   wp_enqueue_style( 'master_style' );
}
?>

master.php成功加载slave.ph但我的问题不是jquery操作或链接工作。 由于slave.php是外部的,我试过

define('WP_USE_THEMES', false);
require('../../../wp-blog-header.php');

然后

<?php 
add_action('init', 'register_slavescript');
function register_slavescript() {
    wp_register_script( 'slave_jquery', plugins_url('/js/jQuery1.7.1.js', __FILE__), array('jquery'), '2.5.1' );
        wp_register_script( 'slave_jquery2', plugins_url('/js/highlight.pack.js', __FILE__), array('jquery'), '2.5.1' );
        wp_register_script( 'slave_jquery3', plugins_url('/js/combined.js', __FILE__), array('jquery'), '2.5.1' );
    wp_register_style( 'slave_style', plugins_url('/css/slave_style.css', __FILE__), false, '1.0.0', 'all');
         wp_register_script( 'slave_jquery4', plugins_url('/js/jquery.mousewheel.js', __FILE__), array('jquery'), '2.5.1' );
         wp_register_script( 'slave_jquery5', plugins_url('/js/jquery.jscrollpane.min.js', __FILE__), array('jquery'), '2.5.1' ); 
}       
// use the registered jquery and style above
add_action('wp_enqueue_scripts', 'enqueue_slavestyle');

function enqueue_slavestyle(){
   wp_enqueue_script('slave_jquery');
   wp_enqueue_script('slave_jquery2');
   wp_enqueue_script('slave_jquery3');
   wp_enqueue_style( 'slave_style' );
   wp_enqueue_script('slave_jquery4');
   wp_enqueue_script('slave_jquery5');
}
?>

看起来像slave.php enqueue -ing不能正常工作,我怎么能以正确的方式做到这一点?

2 个答案:

答案 0 :(得分:0)

虽然您可以注册脚本和样式而不会出现任何问题,但WordPress不会自动将它们注入页面。

实际执行此操作的函数链附加到几个未在您的情况下触发的操作。

wp_headlogin_headadmin_print_scripts期间输出标题脚本;页脚脚本也会发生类似的事情。

例如,wp_head挂钩由适当时调用wp_head()的主题触发。你是奴隶打电话吗?我不认为它是对的。

总的来说,您必须手动调用wp_print_head_scriptswp_print_footer_scripts才能在自定义引导页面上输出排队的脚本和样式。

说到自定义引导:通常使用WidgetsAJAX可以避免自定义引导。因此,如果您发现自己在页面上手动加载WordPress,那么您很可能做错了,特别是如果它涉及iframe。

答案 1 :(得分:0)

关注@ soulseekah的回答,不要忘记在wp_head()结束标记之前调用</head>,在wp_footer()结束标记之前调用</body>。这些函数通常需要通过插件或主题的特定插入来呈现WordPress脚本和CSS标记 - 通常使用wp_enqueue_scripts()文件中的wp_enqueue_styles()functions.php排队。

如果您的模板中没有这些功能,您的主题将无法通过unit tests

检测此类问题的一种好方法是安装Theme Checker插件。这有助于您根据latest WordPress standards跟踪主题的功能。