My plugin class doesn't work!

时间:2012-09-20 作者:Tim S.

长话短说;我正在用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(); 作用我真诚的道歉!现在一切正常。

2 个回复
最合适的回答,由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\'));
    }

    // ...
}

SO网友:vmassuchetto

包含插件的推荐方法是使用plugins_loaded

add_action( \'plugins_loaded\', \'simplist_slider_init\' );
function simplist_slider_init() {
    $simplist_slider = new SimplistSlider();
}
除此之外,如果您在管理界面中正确地启用了插件,那么您应该能够响应上面函数中的内容,等等。

结束

相关推荐

Custom Post Row Actions

我偶然发现this question 在写这个问题的时候。我有一个问题是关于这个问题的。我发现你用的是get_delete_post_link 筛选为我的操作创建一个新的url(或一个类似的函数——在任何情况下,我都会将该函数与布尔值一起使用)。唯一的问题是,I don\'t know how to capture the event now. 考虑到我在谷歌上找不到很多关于行后操作的例子,我将不胜感激-/public function _wp_filter_get_delete_post_link( $