我有一个基于wordpress的网站。我需要允许人们从前端创建帖子,所以我制作了一个很好的多部分表单。表单有三个部分,表单的每个部分在移动到下一部分之前都已经过验证。数据通过隐藏输入传递到另一个页面。
我的表单模板看起来有点像这样(完整的代码非常庞大且无关紧要,所以只显示相关部分),我希望这足以让我们知道表单是如何工作的。
多部分表单WP-TEMPLATE示例代码:
<?php
global $wpdb;
$this_page = $_SERVER['REQUEST_URI'];
$page = $_POST['page'];
if ( $page == NULL ) { ?>
<?php include_once('multiparts/form-files/first_part.php'); ?>
<?php } else if ( $page == 1 ) { ?>
<?php include_once('multiparts/validation/validate_first_part.php');
if (isset($_POST['submit-1']) && (!empty($error))) { ?>
<div class="error-head">Cannot continue registration. Error/s highlighted below.</div><br/>
<?php echo $error . '</br>'; ?>
<?php } else {
include_once('multiparts/form-files/second_part.php');
}
?>
<?php
} else if ( $page == 2 ) { ?>
//SO ON AND SO FORTH
<?php
}
?>
最近,我在表单中添加了几个复选框字段,目的是在创建的帖子中显示所选复选框的值。所以这是我目前正在使用的相关的html表单代码。
<fieldset class="work-areas">
<label for="areas" class="label">INTERESTED IN :</label></br>
<div class="work-class">
<input type="checkbox" name="workareas[]" value="administration"/>administration</br>
<input type="checkbox" name="workareas[]" value="technical"/>technical</br>
<input type="checkbox" name="workareas[]" value="creative"/>creative</br>
<input type="checkbox" name="workareas[]" value="fieldwork"/>fieldwork</br>
<input type="checkbox" name="workareas[]" value="marketing"/>marketing</br>
</div>
</fieldset>
我将这些复选框的值插入到帖子中,就像使用此代码的任何其他自定义字段一样:add_post_meta($pid, 'areas', $workareas, true );
。在处理部分中,为其分配了meta_key areas
。我将它显示在single.php中,代码如下:
<?php $areas = get_post_meta($post->ID, 'areas', true); ?>
<?php if (is_array($areas)) : ?>
<h4>INTERESTED AREAS OF WORK:</h4>
<?php if (is_array($areas)) {
foreach($areas as $area) {
echo '<li>'.$area.'</li>';
}
}
?>
<?php endif;?>
问题:当上面给出的复选框的 html表单代码位于表单的最后/第三部分时,这一切都很有效。但是,当表单的第二部分中的相同复选框字段时,它确实有效。我想它根本不会将所选复选框的数组值传递给第三部分。 Print_r显示一个空数组,显然也没有在single.php中显示任何内容。虽然我知道问题只是所选复选框值的数组,但没有正确地传到第三部分,我需要帮助,因为我对所有这些都是noob。
所以底线问题是如何保存所选的数组 第二部分中的复选框值,并将其带到第三部分 最后将它分配给一个保存数组值的变量。 可以使用上面的代码在帖子中显示的内容。
有人做了:我已经查看了这个帖子here,我很困惑,我会插入我的复选框字段,甚至不确定它是否适用于我的情况。我已经能够使用以下内容将其他文本输入值从一个部分传递到另一个部分:
<input type="hidden" name="eligible" value="<?php echo $eligible;?>" />
所以,我尝试使用name="workareas[]"
但是没有用。我正在为我正在尝试的所有东西做print_r(),直到现在只有空数组。我仍然需要寻找可能的提示。与此同时,如果你能提供帮助,那就太棒了。提前致谢。
更新:已解决,请检查答案。
答案 0 :(得分:0)
不是WP用户,但您的复选框名为“workareas”,但您似乎将其称为“区域”。
答案 1 :(得分:0)
感谢评论中的建议,但在我看来,我发现了一个优雅而强大的解决方案,即使用会话。我遵循here的基本想法,它实际上处理了具有会话的多部分表单。现在,在文档的最开头,我在表单的第三部分/最后一部分中有以下代码。此时请注意,问题中所示的 html复选框字段位于第二部分。
<?php
session_start();
$_SESSION['workareas'] = $_POST['workareas'];
$result=$_POST['workareas'];
?>
代码是在第三部分验证期间重复的代码是相同的但是这样变量$result
仍然保持所选复选框的数组的值来自第二部分形式。
session_start();
$result=$_SESSION['workareas'];
此时您可以执行print_r($result)
并检查。此外,如果您想要将这些数组值插入到帖子中以便它们显示在帖子中,只需指定meta_key,例如。 areas
到$result
并使用以下代码将其添加为自定义字段:
add_post_meta($pid, 'areas', $result, true);
在single.php中,您可以使用下面的代码从数组中提取值并显示。不要避免if(is_array)
语句,否则wordpress可能会抛出错误警告:提供无效的参数foreach()。古德勒克。
<?php $areas = get_post_meta($post->ID, 'areas', true); ?>
<?php if (is_array($areas)) : ?>
<h4>INTERESTED AREAS OF WORK:</h4>
<?php if (is_array($areas)) {
foreach($areas as $area) {
echo '<li>'.$area.'</li>';
}
}
?>
<?php endif;?>