如何避免在插件的Metabox中重新发明自定义字段轮子?

时间:2011-03-02 作者:SethMerrick

以下是场景:

在我的插件中,我想在帖子/页面编辑器上显示一个元框。

我希望metabox完全像WordPress的“自定义字段”metabox(添加另一个、删除、更新、自动填充下拉列表、输入新链接、AJAX magic等);有几个细微的区别:

我要的不是“Name”和“Value”,而是“Target”、“Name”和“Value”

与其将它们全部保存为自动显示在WP自定义字段元框中的“公共”自定义字段,不如将它们全部存储为“专用”命名空间字段中的单个多维数组。。。即。,_myplugin_custom_fields = array( 1 => array( \'target\' => \'mytarget1\', \'name\' => \'myname1\', \'value\' => \'myvalue1\' ), 2 => array( \'target\' => \'mytarget2\', \'name\' => \'myname2\', \'value\' => \'myvalue2\' ) )

我花了一整天的时间在WP Core的纠结网络中挖掘,还没有找到一个简单的方法来实现这一点。如果我根据目前的理解继续前进,我将最终从大量php和js文件中复制数百行核心代码。

WordPress Answers land中有人能帮我指出正确的方向吗?我在主题和插件中添加和利用元盒方面有着丰富的经验,但这一点让我完全困惑。

如果我不清楚,请大声说出来。

提前感谢所有回复者!

3 个回复
SO网友:scribu

简而言之,没有任何简单的方法可以做到这一点,因为编写自定义字段元盒时没有考虑可扩展性。

您可以使用JavaScript添加附加字段,并劫持add按钮将数据发送到自定义AJAX处理程序,该处理程序将根据需要存储数据。

SO网友:Guru 2.0

我正在用名称保存自定义字段_meta_whatever. 以下划线开头的名称会阻止WordPress在普通帖子的下拉框中显示自定义字段。

为了保存在数组中,我使用了如下HTML代码。

...
<input type="text" class="short" name="_events_meta[startDate]" id="_events_meta[startDate]" value="<?php if(!empty($meta[\'startDate\'])) echo $meta[\'startDate\']; ?>"/>
<input type="text" class="extrashort" name="_events_meta[startTime]" id="_events_meta[startTime]" value="<?php if(!empty($meta[\'startTime\'])) echo $meta[\'startTime\']; ?>"/>
...
为了检索元数据,这是我正在使用的代码

...
$meta = get_post_meta($post->ID,\'_events_meta\',TRUE);
...
现在我有了一个assoziative数组$meta 其中键名在id-的属性input-要素

为了节省开支,我使用这样的代码

...
$new_data = $_POST[\'_events_meta\'];
...
add_post_meta($post_id,\'_events_meta\',$new_data,TRUE);
...
因此,它保存为中的一条记录wp_postsmeta

希望这对我有帮助,并从我这边清楚地表达出来?

SO网友:NotLostJustHiking

听起来我们正在做类似的事情。不确定这是否有帮助,但可能会给你一些其他想法。

三篇博文中的第一篇-http://www.deluxeblogtips.com/2010/05/howto-meta-box-wordpress.html

希望有帮助!

结束

相关推荐

在编辑帖子中使用AJAX自定义Metabox

我正在尝试创建一个带有多个文本字段的自定义元框。其想法是,最初有一个文本框,然后您可以单击按钮“添加新内容”,然后添加另一个文本框(使用Ajax;无需为要创建的文本框发布或更新帖子)。我正在使用以下代码(如下),但它根本不起作用。我完全被卡住了;真的需要一些帮助。如果有人能帮我解决这个问题,我甚至愿意捐赠一些现金。http://pastebin.com/usRhiJJ4