类中的快捷码不起作用

时间:2019-10-03 作者:Amy

正在使用我的第一个WordPress插件和OOP。我正在尝试创建一个在类中工作的短代码,但不知道如何设置它。

在我当前的设置中,短代码只在前端打印出短代码名称。下面是我现在在类php文件中看到的内容:

if ( !class_exists( \'month_snapshot\' ) ) {

class month_snapshot
{
    private $grand_total;

    public function __construct()
    {
      //code here to create grand_total
      $this->grand_total = $grand_total;
    }

    public function get_grand_total() {
        return $this->grand_total;
    }

    public function display_summary() {
        return "Grand Total is " . $this->grand_total . "<br/>";
    }

    //month_summary shortcode
    public function month_summary_shortcode($atts = [], $content = null) {
        $content = $data->display_summary;          
        return $content;
    }

} //close class

} //close if not exists

//Shortcodes
add_shortcode( \'month_summary\', array( \'month_snapshot\', \'month_summary_shortcode\' ) );
埃塔:谢谢大家的帮助。

我在我的原始帖子中删去了一些代码,以使其更易于阅读——可能不应该这样做,因为这会增加对未声明变量等的混淆。

解决方案:对于那些寻求类似解决方案的人,我最终根据杰西·平克曼的澄清改变了我的策略(谢谢)。我的班级最终是这样的:

if ( !class_exists( \'month_snapshot\' ) ) {

class month_snapshot
{
    public $grand_total;

    public function __construct()
    {
      //I omitted code here which got a grand_total, let\'s pretend it resulted in 1
      $grand_total = 1;
      $this->grand_total = $grand_total;
    }

} //close class

} //close if not exists
然后,我对外声明了我的短代码和相应的函数。它要求全班获得我想要显示的$grand\\u总成绩。

add_shortcode(\'month_summary\', \'month_summary_shortcode\');

function month_summary_shortcode() {
  $month_data = new month_snapshot;
  $monthly_total = "Grand Total is " . $month_data->grand_total . "<br/>";
  return $monthly_total;
}

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

如果对类方法使用任何挂钩、过滤器或短代码,则有三个选项。

要么宣布in the context of an instance, 在这种情况下,可以引用该类的实例。

class myClass {
    function __construct()
    {
        add_shortcode(\'my_shortcode_name\', [ $this, \'shortcode\' ]);
    }
    
    function shortcode()
    {
        //your code here
        //properties of the instance are available
        return \'a string\';
    }
}
或者在实例外部声明,则必须使用公共静态方法。

add_shortcode(\'my_shortcode_name\', [myClass::class, \'shortcode\']);

class myClass {
    
    
    public static function shortcode()
    {
        //your code here
        //you only have access to static properties
        return \'a string\';
    }
    
}

相关推荐

5 PHP致命错误:未捕获ArgumentCountError(找不到)

我最近将WordPress站点从PHP5迁移到PHP7。我们的一个自定义文件列表功能(从服务器目录上的文件夹输出文件列表)在PHP7上的新服务器上失败。我知道存在争论冲突,但我不知道如何纠正它。The error:5 PHP致命错误:Uncaught ArgumentCounter错误:函数printDirectory()的参数太少,传入了3个/nas/content/live/lfccedu/wp-content/plugins/lfcc/lfcc。第1026行的php和/nas/content/liv