【问题标题】:Create new class object inside WordPress template在 WordPress 模板中创建新的类对象
【发布时间】:2020-01-21 21:47:55
【问题描述】:

我有问题。我的计划是在 WordPress 模板中创建一个新的类对象,以将变量从 post 对象传递给它:

<?php
/**
 * Template Name: Ticket
 */

defined( 'ABSPATH' ) || exit;

new Test( $post->ID );

在我的类中,我定义了一个在类中添加 AJAX 函数的操作:

class Test {
    public function __construct( $ticket_id ) {
        $this->ticket_id = $ticket_id;

        $this->register();
    }
    /**
     * Register all hooks
     */
    public function register(): void {
        add_action( 'wp_ajax_test', array( $this, 'test' ) );
    }
    public function test(): void {
        error_log($this->ticket_id);
    }
}

问题是无法访问 AJAX 功能。也许它添加得太晚了?因为当我直接在我的functions.php 文件中创建一个新的类对象时,它正在工作。在这种情况下,我不知道如何在课堂上获取我的帖子 ID。

感谢您帮助我!

【问题讨论】:

  • 你的“寄存器”在哪里调用?
  • 我在构造函数里面试过了

标签: php wordpress class


【解决方案1】:

第一件事:

考虑到关注点分离,您不应使用模板来注册任何内容。你的模板应该尽可能的愚蠢,因为它只是用来渲染/显示东西。

不过,你必须调用注册函数:

$testClass = new Test( $post->ID );
$testClass->register();

WordPress 有一个生命周期。我不确定您是否可以在此处添加新操作。

【讨论】:

  • 好的,我已经按照你说的那样尝试过了,但是我没有让任何 AJAX 功能正常工作。
  • 你了解ajax的概念吗?你的动作是什么样的,你在哪里进行 ajax 调用? (对不起,只是尝试自己找到问题:))
  • 我知道我可以通过 AJAX 发送任何参数,但我正在寻找更好的解决方案。因为当我在页面上时,我已经知道帖子了,你知道吗?
  • 您需要提前注册您的操作方式。而不是在那里注册它,你应该用相应的依赖项在那里调用它。 add_action("wp_ajax_test", [$this, 'test'], 10, 1 );(最后 1 代表参数数量)。在您的模板中,您调用do_action('wp_ajax_test', $post);。现在,您应该可以拨打error_log($post-&gt;ID)
猜你喜欢
  • 2013-03-31
  • 2014-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-23
  • 1970-01-01
  • 2019-05-05
相关资源
最近更新 更多