Wordpress中的可重复字段

时间:2017-04-12 11:21:19

标签: wordpress

我发现代码如何在WordPress中的metabox中执行可重复的字段但有问题,因为我有如下所示的错误

解析错误:语法错误,意外'}'在该代码行124中。 下面我把代码,请帮助我,如果有人现在有什么不对?我将不胜感激。

<?
function hhs_get_sample_options() {
$options = array (
    'Option 1' => 'option1',
    'Option 2' => 'option2',
    'Option 3' => 'option3',
    'Option 4' => 'option4',
);

return $options;
}

add_action('admin_init', 'hhs_add_meta_boxes', 1);
function hhs_add_meta_boxes() {
add_meta_box( 'repeatable-fields', 'Repeatable Fields',  
'hhs_repeatable_meta_box_display', 'price_table', 'normal', 'default');
}

function hhs_repeatable_meta_box_display() {
global $post;

$repeatable_fields = get_post_meta($post->ID, 'repeatable_fields', true);
$options = hhs_get_sample_options();

wp_nonce_field( 'hhs_repeatable_meta_box_nonce', 'hhs_repeatable_meta_box_nonce' );
?>
<script type="text/javascript">
jQuery(document).ready(function( $ ){
    $( '#add-row' ).on('click', function() {
        var row = $( '.empty-row.screen-reader-text' ).clone(true);
        row.removeClass( 'empty-row screen-reader-text' );
        row.insertBefore( '#repeatable-fieldset-one tbody>tr:last' );
        return false;
    });

       $( '.remove-row' ).on('click', function() {
        $(this).parents('tr').remove();
        return false;
       });
   });
   </script>

<table id="repeatable-fieldset-one" width="100%">
<thead>
    <tr>
        <th width="40%">Name</th>
        <th width="12%">Select</th>
        <th width="40%">URL</th>
        <th width="8%"></th>
    </tr>
</thead>
<tbody>
<?php

if ( $repeatable_fields ) :

foreach ( $repeatable_fields as $field ) {
?>
<tr>
    <td><input type="text" class="widefat" name="name[]" value="<?php if($field['name'] != '') echo esc_attr( $field['name'] ); ?>" /></td>

    <td>
        <select name="select[]">
        <?php foreach ( $options as $label => $value ) : ?>
        <option value="<?php echo $value; ?>"<?php selected( $field['select'], $value ); ?>><?php echo $label; ?></option>
        <?php endforeach; ?>
        </select>
    </td>

    <td><input type="text" class="widefat" name="url[]" value="<?php if ($field['url'] != '') echo esc_attr( $field['url'] ); else echo 'http://'; ?>" /></td>

    <td><a class="button remove-row" href="#">Remove</a></td>
</tr>
<?php
}
else :
// show a blank one
?>
<tr>
    <td><input type="text" class="widefat" name="name[]" /></td>

    <td>
        <select name="select[]">
        <?php foreach ( $options as $label => $value ) : ?>
        <option value="<?php echo $value; ?>"><?php echo $label; ?></option>
        <?php endforeach; ?>
        </select>
    </td>

    <td><input type="text" class="widefat" name="url[]" value="http://" /></td>

    <td><a class="button remove-row" href="#">Remove</a></td>
</tr>
<?php endif; ?>

<!-- empty hidden one for jQuery -->
<tr class="empty-row screen-reader-text">
    <td><input type="text" class="widefat" name="name[]" /></td>

    <td>
        <select name="select[]">
        <?php foreach ( $options as $label => $value ) : ?>
        <option value="<?php echo $value; ?>"><?php echo $label; ?></option>
        <?php endforeach; ?>
        </select>
    </td>

    <td><input type="text" class="widefat" name="url[]" value="http://" /></td>

    <td><a class="button remove-row" href="#">Remove</a></td>
</tr>
</tbody>
</table>

<p><a id="add-row" class="button" href="#">Add another</a></p>
<?php
}  //this is something wrong but I don't now why?

add_action('save_post', 'hhs_repeatable_meta_box_save');
function hhs_repeatable_meta_box_save($post_id) {
    if ( ! isset( $_POST['hhs_repeatable_meta_box_nonce'] ) ||
    ! wp_verify_nonce( $_POST['hhs_repeatable_meta_box_nonce'],  
'hhs_repeatable_meta_box_nonce' ) )
    return;

if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
    return;

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

$old = get_post_meta($post_id, 'repeatable_fields', true);
$new = array();
$options = hhs_get_sample_options();

$names = $_POST['name'];
$selects = $_POST['select'];
$urls = $_POST['url'];

$count = count( $names );

for ( $i = 0; $i < $count; $i++ ) {
    if ( $names[$i] != '' ) :
        $new[$i]['name'] = stripslashes( strip_tags( $names[$i] ) );

        if ( in_array( $selects[$i], $options ) )
            $new[$i]['select'] = $selects[$i];
        else
            $new[$i]['select'] = '';

        if ( $urls[$i] == 'http://' )
            $new[$i]['url'] = '';
        else
            $new[$i]['url'] = stripslashes( $urls[$i] ); // and however you want to sanitize
    endif;
  }

if ( !empty( $new ) && $new != $old )
    update_post_meta( $post_id, 'repeatable_fields', $new );
elseif ( empty($new) && $old )
    delete_post_meta( $post_id, 'repeatable_fields', $old );
}
?>

0 个答案:

没有答案