首页 > 解决方案 > 除了在每个选项中使用 if 语句的基本方法之外,是否有任何优化方法可以仅使用 php 在页面刷新时预先选择选项?

问题描述

我有的:

一个名为 bookings 的自定义帖子类型,我在其中使用 wordpress 中的 Meta box 进行插件开发。

我想要的是:

当用户选择特定选项并单击名为预订的自定义帖子类型中的更新时,该值将保持保存。

即使在页面刷新时。

怎么了:

我的值存储在请求的变量中,但我无法将变量的值与我的选择标签绑定。我已经能够在 if 条件的帮助下实现结果,但这不是我认为的最佳方式,

所以我想问他们是否还有其他方法可以实现这一目标:

if($frequency == 'One-Time') echo"selected" 

我正在使用的代码:

function meta_box2() {

 add_meta_box(

    'custom2', // $id
    'What Needs To Be Done?', // $title
    'meta_box2_fun', // $callback
    'bookings', // $screen
    'normal', // $context
    'high' // $priority
 );
}

add_action( 'add_meta_boxes', 'meta_box2' );

//.................Second Meta Box Function...........................

function meta_box2_fun($post){

 $frequency = get_post_meta( $post->ID, 'frequency-save', true );

 $bathroom = get_post_meta( $post->ID, 'bathroom-save', true );

 $bedroom = get_post_meta( $post->ID, 'bedroom-save', true );
?>

<label for="Frequency">Frequency</label>

<select name = "frequency" >
  <option value = "One-Time">One-Time</option>
  <option value = "Weekly">Weekly</option>
  <option value = "Every Other Week">Every Other Week</option>
  <option value = "Every 4 Weeks">Every 4 Weeks</option>
  <option value = "Every Monday & Friday">Every Monday&Friday</option>
</select>
<br>
<br>

<label for="bathroom">Bathroom</label>

<select name = "bathroom">
  <option value = "1">  1  </option>
  <option value = "1.5">1.5</option>
  <option value = "2">  2  </option>
  <option value = "2.5">2.5</option>
  <option value = "3">  3  </option>
  <option value = "3.5">3.5</option>
</select>

<label for="bedroom">Bedroom</label> 

<select name = "bedroom" value = "bedroom">
  <option  value="0" >0</option>
  <option  value="1" >1</option>
  <option  value="2" >2</option>
  <option  value="3" >3</option>
  <option  value="4" >4</option>
  <option  value="5" >5</option>
</select>

function meta_box2_save($post_id){

 if ( !current_user_can( 'edit_post', $post_id ))
  return;

update_post_meta($post_id, 'frequency-save',$_POST['frequency']);
update_post_meta($post_id, 'bathroom-save', $_POST['bathroom']);
update_post_meta($post_id, 'bedroom-save', $_POST['bedroom']);

}

add_action('save_post', 'meta_box2_save');

标签: phpwordpresshtml

解决方案


尝试在数组中添加选项值,然后将 $frequency 与选项值匹配,如果相等则添加另一个变量 $select = "selected",使用它您不必一次又一次地重复代码。你只需要在数组中添加新值。就像我给你一个例子,请检查下面

$frequency_opt_val = array('one_time' => "one time", ....);
echo "<select name = "frequency" >";
foreach($frequency_opt_val as $key => $value ){
    $select = '';
    if( $frequency ==  $key  ) $select = 'SELECTED';
    echo "<option value='".$key."' ".$select.">" . $value . "</option>";
}
echo"</select>";

推荐阅读