为什么WordPress找不到我在构造函数中添加的操作?

时间:2013-04-23 作者:josaphatv

我有一个主题,它有一个页面显示关键字分类法,名为taxonomy-keyword.php. 在本页中,我实例化了一种称为KeywordPage. 看起来是这样的:

namespace MyTheme\\ViewModels;
class KeywordPage {
    __construct() {
        wp_enqueue_script(
            \'keywordpage_script\',
            get_stylesheet_directory_uri() . \'_inc/js/KeywordPage.js\',
            array(\'jquery\'),
            \'\');
        add_action(\'wp_ajax_get_more_posts\', array(__CLASS__, \'get_more_posts_async\'));
        add_action(\'wp_ajax_nopriv_get_more_posts\', array(__CLASS__, \'get_more_posts_async\'));

        // other initialization
    }

    public static function get_more_posts_async() {
        // Process AJAX
    }
}
我遇到的问题是AJAX响应总是0。这似乎表明wordpress找不到对操作的回调。

现在,我几乎不了解AJAX,更不用说wordpress如何处理它了,但我知道KeywordPage 脚本运行正常get_more_posts_async() 适当地处理和响应AJAX调用,因为如果我放置函数和add_action() 打电话进来functions.php 一切都按预期进行。

我不明白的是,为什么当操作位于构造函数中时,wordpress似乎无法调用适当的回调?我不想仅仅把这些东西放在functions.php. 尽管我已经知道它是可行的,但我想让主题尽可能地可维护。

提前感谢您的投入、帮助和指导。

1 个回复
最合适的回答,由SO网友:Milo 整理而成

构造函数在发出AJAX请求的请求上运行,但不在处理该AJAX请求的请求中运行。最初加载页面的请求和AJAX请求是两个独立的请求,两者之间不保留状态。这不是WordPress独有的,这是AJAX通常的工作方式。当AJAX请求发生时,模板文件不会加载,因此该类永远不会实例化。在这种情况下,您必须将东西移动到functions.php, 因为这是AJAX请求中加载的唯一主题文件。

结束

相关推荐

对登录用户和AJAX更新进行缓存

我想为登录用户和新用户提供页面缓存版本的主页。然后使用Ajax适当地更新内容,例如,如果用户已经对一篇文章投了赞成票,则相关按钮将与其他按钮不同。由于我是wordpress的新手,我想知道是否有任何方法或合适的插件来实现这一目标。或者,我可以使用Ajax只更新页面的某些部分,例如,在当前页面上发布meta吗?