正在使用我的第一个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;
}
最合适的回答,由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\';
}
}