【发布时间】:2018-12-24 16:21:02
【问题描述】:
我是面向对象的 PHP 新手,所以我不完全确定我的问题到底是什么,但问题是:
我创建了一个 WordPress 插件,它在由另一个插件创建的某个自定义帖子类型上添加了一堆元框。在我的主题中,我需要获取所有自定义元数据,但需要获取的内容非常多,而且通常带有某些条件等等。所以,我创建了一堆辅助函数来简化它。问题是所有这些函数的名称有点痛苦,所以我把它们放在插件的一个类中以简化事情,我的问题是我在组合它们时遇到了麻烦。不管这是否可能,希望您能帮助...
所以大多数辅助函数(现在是类方法)看起来像这样:
public function metabox_wrapper( $code ) {
$info = get_post_meta( ID, 'blah', true);
if ( $info ) {
code( $info );
}
}
然后在我的主题文件中使用:
global $Other_Plugins_Global // Created by the other plugin.
$class = new Class( $Other_Plugins_Global );
$class->metabox_wrapper( function( $info ) {
?>
<div>
<?php echo $info; ?>
</div>
<?php
});
以上内容目前正在运行 - 如果存在 blah 元数据,它将显示当前帖子中的 blah 元数据。另一个插件的全局变量包含自定义帖子类型信息(以及元数据),所以我将它传递给类实例,使用类中的方法来管理所有条件和其他复杂的东西,然后使用主题文件,以便预先安排条件内容,并且能够以相同的方式在主题的其他地方使用。
但是,问题是:在某些情况下我想要类似的东西
if (
Do this
if (
Also do this
)
)
但这(以及我尝试过的所有类似方法)都不起作用:
global $Other_Plugins_Global
$class = new Class( $Other_Plugins_Global );
$class->metabox_wrapper( function( $info ) {
?>
<div>
<?php echo $info; ?>
</div>
<?php
$class->other_metabox_wrapper( function( $stuff ) {
?>
<div>
<?php echo $stuff; ?>
</div>
<?php
});
});
所以我的问题是......有没有办法可以在彼此内部使用这些包装函数?我尝试将它们设置为静态并在主题中使用::,我尝试了一些花哨的可变体操,但它不起作用,如果有的话会很难看,我几乎养了一个恶魔,试图打电话给方法内部的全局变量......所以此时我什至不确定谷歌是什么。
显然,对于这个特定的示例,我可以只使用 if(){},但条件逻辑通常有多个条件和其他半复杂的东西,所以保持独立并能够在周围的多个地方使用会很有帮助主题。
我会说,如果这是一个愚蠢的问题,并且您知道一种完全不同且更优雅的方式来完成我所描述的内容,那么我会全神贯注。
非常感谢您的帮助。
【问题讨论】:
-
第一个 sn-p 中的变量
$code未使用,但调用了函数code()。错字?