需要有关使用自定义帖子元的建议

时间:2013-01-04 作者:nonsensecreativity

我正在使用一些测验脚本,它使用javascript初始化脚本,我正在使用的数据结构如下所示

var quizArray = { \'contents\': [{
            \'question\': \'First Question\',
            \'answers\': [\'First Option\', \'Second Option\', \'Third Option\', \'Fourth Option\'],
            \'correctAnswer\': 1
        }, {
            \'question\': \'Second Question\',
            \'answers\': [\'First \', \'Second \', \'Third \', \'Fourth \'],
            \'correctAnswer\': 2
        }, {
            \'question\': \'Third\',
            \'answers\': [\'a\', \'b\', \'c\', \'d\'],
            \'correctAnswer\': 4
        }, ]
        };
我想做的是,创建自定义Post Meta来存储数据,但由于我希望用户可以无限制地输入数据(可能有1个问题、2个问题或更多),如果我要使用自定义Post Meta,我应该如何处理自定义Meta字段,我想将其转换为一个包含多个值的数组,但不知道如何处理自定义Post Meta,然后将数组转换为JSON编码,并在javascript中使用它。

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

如果它将每个问题存储为“问题”,则将meta类型存储为存储数组。Wordpress会在存储数组之前自动序列化数组。

因此,当您使用get\\u post\\u meta($post\\u id,“question”)时,它将返回一个序列化字符串数组。(我认为,如果有超过1个结果,我很确定它不会为您取消序列化)

然后只需运行foreach循环并完成每个问题

编辑以显示更多详细信息:

假设我有一个JSON对象,并将其发布到PHP中

$myobject = json_decode($_POST[\'myobject\']);
$contents = $myobject->contents;
所以看看你的JSON应该是这样的:

//the whole things an array
array(

//these are your question things
array(\'question\' => \'First Question\',
      \'answers\'=> array(\'First Option\', \'Second Option\', \'Third Option\', \'Fourth Option\'),
      \'correctAnswer\' => 1
),
array(\'question\' => \'First Question\',
      \'answers\'=> array(\'First Option\', \'Second Option\', \'Third Option\', \'Fourth Option\'),
      \'correctAnswer\' => 1
),
array(\'question\' => \'First Question\',
      \'answers\'=> array(\'First Option\', \'Second Option\', \'Third Option\', \'Fourth Option\'),
      \'correctAnswer\' => 1
)
//end of the array
);
现在,您可以将它们中的每一个存储为帖子的元对象

foreach($contents as $question_array) {
    add_post_meta($post_id, \'question\', $question_array);
 }
然后,稍后(就像在页面上)如果要显示meta,只需调用它并循环遍历它

$questions = get_post_meta($post_id, \'question\', false);//false by default just showing here because we want an array. 
foreach($questions as $question){
    $question_array = maybe_unserialize($question);
    //now we have the question array from earlier and we can do anything like:
    echo "Question: <br>" . $question_array[\'question\'];
    echo "These are possible answers:<br><ul>";
    foreach($question_array[\'answers\'] as $answer) {
        echo "<li>" . $answer . "</li>";
    }
}
您可以对该循环中的那些数组执行任何操作,它将遍历它们。我从来没有像那样存储过一个完整的对象,但这应该是完全可能的。让我知道进展如何。

结束

相关推荐

带有App Store/Google Play链接的定制Metabox

我在尝试设置我们的应用程序组合时遇到了一个问题。(看一看our portfolio page)发生了什么:我用“apps”创建了一个自定义帖子类型。我要写的每一篇文章都是我们的一个项目。在这篇文章中,可能有3个属性:1) 应用商店链接2)Google Play store链接----可选:----3)实习生应用(无链接)同时,在我们的模板中将显示:是否有商店链接?如果是,请制作此图像(http://www.dreamix-studio.com/images/ios_button.png)链接:其他:创建此