可重复使用的Metabox后端和前端

时间:2016-09-01 作者:markb

我正在尝试创建一个更可转移/自动化的自定义帖子类型,作为一个错误售票系统(我知道有很多,但我想要一个完全定制的)。

我的CPT叫做ticket 有两种分类法ticket_stageticket_application.

我还有元字段:

  • closed - 复选框priority - 选择computer - 选择status - 选择submitter_name - 输入字段(通过登录用户自动执行)
  • submitter_email - 输入字段(通过登录用户自动输入)
从后端,可以轻松创建票证,并分配所有正确的字段。

从前端,我只能通过title, date, ticket\\u阶段,ticket\\u应用程序,post\\u正文via thewp\\U insert\\U post()`

我可以手动创建元字段并传递它们,但我想知道是否有可能在将来添加时循环可能的值(例如computer 删除或添加字段)。我试图搜索循环元字段的方法,但没有帖子id,也没有为帖子写入数据库的任何内容。

我能做到这一点的唯一方法,但不确定是否安全,就是这样:

在创建元字段期间,遵循本教程http://code.tutsplus.com/articles/reusable-custom-meta-boxes-part-1-intro-and-basic-fields--wp-23259 当你开始切换字段时switch($field[\'type\']), 我复制了整个函数,给它起了一个新名字,重新排列了字段。然后在前端页面上,调用新函数并通过表单传递它们。

这样做安全吗,还是推荐?有没有更好的方法来调用metabox字段,而无需手动写出每个键并在添加新键时进行更新?

我试着只使用分类法,用单选按钮或选择下拉列表替换某些税种,只看到替换所有税种而不是单个税种的代码。

对他们征税的主要原因是,我可以为他们获取菜单项,但我在任何文档中都找不到。

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

我用了几种不同的方法来处理这个问题。

1) 您可以管理设置页面中的项目列表。您可以添加一个简单的以逗号分隔的计算机列表,并使用get\\u选项(“Computers”)将它们拉到前端。如果要将其构建到下拉列表中,可以执行以下操作:

$list = get_options(\'computers\');
$list_a = explode(\',\', $list);
echo "<select>";
foreach ($list_a as $item) {
    echo "<option value=\'$item\'>$item</option>";
}
echo "</select>";
这将允许您将列表与post meta中实际存储的内容分开控制。这样,您就可以从选项列表中添加或删除项目,而不用担心以前做了什么。

2) 另一种选择是在代码中创建一些实用程序数组。我这样做是为了处理一些相当静态的事情,比如美国各州或国家。我创建了一个文件,并将其包含到我的主插件或函数文件中,然后从那里引用它。您可能有:

function get_computers() {
    return $computers = array(
    \'acer\' => \'Acer\'
    ,\'mac\' => \'Mac\'
    ,\'lenovo\' => \'Lenovo\'
    );
}
您将以与我的第一个示例类似的方式循环这些选项。您只是将数据存储在代码中,而不是数据库中。

最后,我认为在可能的情况下使用自定义分类法是正确的。一种称为计算机的分类法可能比上述任何一种方法都更容易管理,尤其是如果您希望非程序员来管理它。您可以使用get\\u terms()函数访问这些内容。

您还可以考虑添加一些自定义post状态。您可以添加一个名为“Closed”的post状态,而不是使用复选框关闭票据。

在此处获取更多信息:https://codex.wordpress.org/Function_Reference/register_post_status

无论如何,我希望这能有所帮助。对于您正在做的事情,我还推荐一位助手,如piklist. 这将使所有元数据库、设置页面和字段的创建更加容易。

相关推荐

如何在WordPress开发中添加带有ACF自定义字段ID的自定义metabox字段

我是wordpress开发的新手,我在我的项目中安装了高级自定义字段插件,并创建了两个文本字段名称&;我还创建了一个插件,可以在帖子中创建一个带有文本框的元框。现在在帖子中,我将获得自定义字段名称(&A);电子邮件和我的自定义元框旁边将出现,但我必须将我的元框附加到名称字段旁边,即在名称字段和电子邮件字段之间。我的metabox代码如下。请任何人帮帮我//Creating the custom meta box function my_notice_meta_box() {