0

我有一个基于 wordpress 的网站。我需要允许人们从前端创建帖子,所以我制作了一个效果很好的多部分表单。表格分为三个部分,表格的每个部分都经过验证,然后再转到下一部分。数据通过隐藏输入传递到另一个页面。

我的表单模板看起来有点像这样(完整的代码在这里非常庞大且无关紧要,因此仅显示相关部分),我希望这足以让您了解表单的工作原理。

多部分表单 WP-模板示例代码:

    <?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 中显示任何内容。虽然我知道问题只是选定的复选框值的数组,没有被正确地带到第三部分,但我需要帮助,因为我对这一切都不熟悉。

所以最重要的问题是如何在第二部分保存所选复选框值的数组并将其带到第三部分,最后将其分配给一个变量,该变量将保存数组值。可以使用上面的代码在帖子中显示的内容。

尝试的事情:我在这里查看了这个线程,我很困惑我将在哪里插入我的复选框字段,甚至不确定它是否适用于我的情况。我已经能够使用类似这样的东西将其他文本输入值从一个部分传递到另一部分:

<input type="hidden" name="eligible" value="<?php echo $eligible;?>" />

所以,我尝试使用name="workareas[]"但没有奏效。我正在为我正在尝试的所有事情做 print_r() ,直到现在才得到空数组。我仍在通过大量其他线程寻找可能的提示。同时,如果您能提供帮助,那就太好了。提前致谢。

更新:已解决,请检查答案。

4

2 回答 2

0

不是 WP 用户,但您的复选框被命名为“工作区”,但您似乎在其他任何地方都将它们称为“区域”。

于 2013-10-14T09:29:01.797 回答
0

感谢评论中的建议,但我认为我找到了一个优雅而强大的解决方案,即使用 sessions我从这里开始遵循基本思想,它实际上处理带有会话的多部分表单。现在我在表单的第三部分/最后一部分中有以下代码,位于文档的开头。这时候请记住问题中如上图所示的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;?>
于 2013-10-14T14:31:41.483 回答