我在函数中使用以下可重复的元框代码。php:
/**
* Repeatable Custom Fields in a Metabox
* Author: Helen Hou-Sandi
*
* From a bespoke system, so currently not modular - will fix soon
* Note that this particular metadata is saved as one multidimensional array (serialized)
*/
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\', \'Emergency Contacts\', \'hhs_repeatable_meta_box_display\', \'team\', \'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="40%">Phone Number</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><input type="text" class="widefat" name="phone[]" value="<?php if ($field[\'phone\'] != \'\') echo esc_attr( $field[\'phone\'] ); 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><input type="text" class="widefat" name="phone[]" value="" /></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><input type="text" class="widefat" name="phone[]" value="" /></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
}
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\'];
$phones = $_POST[\'phone\'];
$count = count( $names );
for ( $i = 0; $i < $count; $i++ ) {
if ( $names[$i] != \'\' ) :
$new[$i][\'name\'] = stripslashes( strip_tags( $names[$i] ) );
if ( $phones[$i] == \'\' )
$new[$i][\'phone\'] = \'\';
else
$new[$i][\'phone\'] = stripslashes( $phones[$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 );
}
add_action( \'init\', \'team_contacts_posttype\' );
我只需要知道如何分别显示每件作品。我在前端尝试了以下方法以及其他一些方法,但都没有成功:
<?php
$member_contact_meta = get_post_meta(get_the_ID(), \'tcp\', true);
$emergency_contact_meta = get_post_custom(get_the_ID(), \'repeatable_fields\', true);
$emerency_contact_name = $emergency_contact_meta[\'name\'];
$emergency_contact_phone = $emergency_contact_meta[\'phone\'];
the_content();
echo $emergency_contact_meta;
echo \'<strong>Phone: </strong>\' . $member_contact_meta . \'<br />\';
echo \'<strong>Emergency Contacts:</strong><br />\';
foreach ($emergency_contact_meta as $emergency_contact_metas)
echo $emergency_contact_name . \' - \' . $emergency_contact_phone;
?>
tcp元是独立的,工作正常,但我不知道如何获取重复的内容元并显示它。