长话短说;我正在用OOP编写一个插件。构造函数已运行,但add\\u操作的回调未运行。我就是不知道为什么。
我在不同的地方添加了echo,以查看哪些有效,哪些无效。虽然pepare()
方法不是。
WP_DEBUG
已启用,但我没有收到任何警告或错误。
<?php
/*
Plugin Name: Simplist slider
Description: My description
Version: 1.0
Author: Tim Severien
*/
class SimplistSlider {
public function __construct() {
// something is wrong here
add_action(\'wp_enqueue_scripts\', array($this, \'prepare\'));
}
public function prepare() {
// registers
wp_register_style(\'simplist-slider\', plugins_url(\'/css/simplist-slider.css\', __FILE__), array(), \'1\');
wp_register_script(\'simplist-slider\', plugins_url(\'/js/simplist-slider.js\', __FILE__), array(\'jquery\'), \'1\');
// enqueues
wp_enqueue_style(\'simplist-slider\');
wp_enqueue_script(\'simplist-slider\');
add_shortcode(\'slider\', array($this, \'shortcode\'));
}
public function shortcode($attr, $content = NULL) {
// format content, irrelevant
}
}
$simplist_slider = new SimplistSlider();
?>
我正在运行新的Wordpress 3.4.2安装。
提前谢谢。
<小时>
edit
在修改了代码(你们建议的)之后,我已经设法让短代码正常工作了!谢谢
问题是,我的样式和脚本没有加载。查看我的更新代码:
<?php
/*
Plugin Name: Simplist slider
Description: My description
Version: 1.0
Author: Tim Severien
*/
class SimplistSlider {
public function __construct() {
// adding shortcode here
add_shortcode(\'slider\', array($this, \'shortcode\'));
add_action(\'wp_enqueue_scripts\', array($this, \'registerScripts\'));
}
public function registerScripts() {
// registers
wp_register_style(\'simplist-slider\', plugins_url(\'/css/simplist-slider.css\', __FILE__), array(), \'1\');
wp_register_script(\'simplist-slider\', plugins_url(\'/js/simplist-slider.js\', __FILE__), array(\'jquery\'), \'1\');
// enqueues
wp_enqueue_style(\'simplist-slider\');
wp_enqueue_script(\'simplist-slider\');
}
public function shortcode($attr, $content = NULL) {
// format content, irrelevant
}
}
function simplist_slider_init() {
$simplist_slider = new SimplistSlider();
}
add_action(\'plugins_loaded\', \'simplist_slider_init\');
?>
<小时>
edit #2
<请放下手中的任何东西,看着手掌继续向头部移动,直到它们接触
facepalm();
我把主题搞砸了,把
wp_head();
作用我真诚的道歉!现在一切正常。
最合适的回答,由SO网友:hampusn 整理而成
你的问题是你使用了错误的钩子来添加你的短代码。wp_enqueue_scripts
执行得太晚,只能用于添加javascript包含。
您应该考虑使用名为init
用于添加短代码。此挂钩在当前主题的functions.php
已包含,这意味着如果存在名称冲突,您不会冒险让主题覆盖您的短代码(除非这是所需的功能)。
以下是可用操作的列表:Plugin API - Action Reference.
如果你和init
挂接短代码,但仍希望插件挂接到plugins_loaded
您可以进行如下更改:
class SimplistSlider {
public function __construct() {
// Hook shortcodes
add_action(\'init\', array($this, \'registerShortcodes\'));
// Hook javascripts
add_action(\'wp_enqueue_scripts\', array($this, \'registerScripts\'));
}
// ...
public function registerShortcodes() {
// adding shortcodes here
add_shortcode(\'slider\', array($this, \'shortcode\'));
}
// ...
}