Je veux ajouter un bouton de téléchargement d'image pour les images et récupérer l'URL. Quelqu'un peut-il m'aider, j'ai essayé cela pendant quelques jours. J'utilise le code de ce fil Créez plus de boîtes de méta au besoin .
add_action( 'add_meta_boxes', 'dynamic_add_custom_box' );
/* Do something with the data entered */
add_action( 'save_post', 'dynamic_save_postdata' );
/* Adds a box to the main column on the Post and Page edit screens */
function dynamic_add_custom_box() {
add_meta_box(
'dynamic_sectionid',
__( 'Client Information', 'myplugin_textdomain' ),
'dynamic_inner_custom_box',
'page');
}
/* Prints the box content */
function dynamic_inner_custom_box() {
global $post;
// Use nonce for verification
wp_nonce_field( plugin_basename( __FILE__ ), 'dynamicMeta_noncename' );
?>
<div id="meta_inner">
<?php
//get the saved meta as an arry
$ourwork = get_post_meta($post->ID,'ourwork',true);
$c = 0;
if ( is_array( $ourwork ) ) {
foreach( $ourwork as $track ) {
if ( isset( $track['thumb'] ) || isset( $track['client-img1'] ) || isset( $track['client-img2'] ) || isset( $track['client-img3'] ) || isset( $track['client-img4'] ) || isset( $track['client-desc'] ) ) {
printf( '<p><strong>Thumb Image</strong> : <input type="button" name="ourwork[%1$s][thumb]" value="%2$s" size="50" /><br/><br/><strong>Client Image 1</strong> : <input type="button" name="ourwork[%1$s][client-img1]" value="%3$s" size="50" /><br/><br/>
<strong>Client Image 2</strong> : <input type="button" name="ourwork[%1$s][client-img2]" value="%4$s" size="50"/><br/><br/>
<strong>Client Image 3</strong> : <input type="button" name="ourwork[%1$s][client-img3]" value="%5$s" size="50" /><br/><br/>
<strong>Client Image 4</strong> : <input type="button" name="ourwork[%1$s][client-img4]" value="%6$s" size="50" />
<br/><br/>
<strong>Client Link 1</strong> : <input type="text" name="ourwork[%1$s][client-link1]" value="%7$s" size="50" />
<br/><br/>
<strong>client Description</strong> :<br/><textarea id="Elm1" class="tinymce_data" name="ourwork[%1$s][client-desc]" cols="75" rows="6" >%8$s</textarea><br/>
<span class="remove">%9$s</span></p>', $c, $track['thumb'], $track['client-img1'], $track['client-img2'] , $track['client-img3'], $track['client-img4'], $track['client-link1'], $track['client-desc'], __( '<span class="button">Remove Section</span>' ) );
$c = $c +1;
}
}
}
?>
<span id="here"></span>
<span class="add"><?php _e('<span class="button">Add Section</span>'); ?></span>
<script>
var $ =jQuery.noConflict();
$(document).ready(function() {
var count = <?php echo $c; ?>;
$(".add").click(function() {
count = count + 1;
$('#here').append('<p><strong>Thumb Image</strong> : <input type="button" name="ourwork['+count+'][thumb]" value="" size="50"/><br/><br/><strong>Client Image 1</strong> : <input type="type="button"" name="ourwork['+count+'][client-img1]" value="" size="50"/><br/><br/><strong>Client Image 2</strong> : <input type="button" name="ourwork['+count+'][client-img2]" value="" size="50"/><br/><br/><strong>Client Image 3</strong> : <input type="type="button"" name="ourwork['+count+'][client-img3]" value="" size="50"/><br/><br/><strong>Client Image 4</strong> : <input type="type="button"" name="ourwork['+count+'][client-img4]" value="" size="50"/><br/><br/><strong>Client Link 1</strong> : <input type="text" name="ourwork['+count+'][client-link1]" value="" size="50"/><br/><br/><strong>Client Description</strong> :<br/><textarea id="Elm1" name="ourwork['+count+'][client-desc]" cols="75" rows="6"></textarea><br/><span class="remove"><span class="button">Remove Section</span></span></p>' );
return false;
});
$(".remove").live('click', function() {
$(this).parent().remove();
});
});
</script>
</div><?php
}
/* When the post is saved, saves our custom data */
function dynamic_save_postdata( $post_id ) {
// verify if this is an auto save routine.
// If it is our form has not been submitted, so we dont want to do anything
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return $post_id;
// verify this came from the our screen and with proper authorization,
// because save_post can be triggered at other times
if ( !isset( $_POST['dynamicMeta_noncename'] ) )
return;
if ( !wp_verify_nonce( $_POST['dynamicMeta_noncename'], plugin_basename( __FILE__ ) ) )
return;
// OK, we're authenticated: we need to find and save the data
$ourwork = $_POST['ourwork'];
update_post_meta($post_id,'ourwork',$ourwork);
}
Il existe un excellent cadre pour interagir avec Metabox qui est relativement facile à utiliser (bien documenté) et comprend la prise en charge de plusieurs options de métabox, y compris le téléchargement d’images/fichiers. C'est sur Github: Métabox et champs personnalisés (CMB) . Si vous utilisiez CMB, ce serait une approche pour implémenter un champ de téléchargement.
Vous devez enregistrer la metabox de téléchargement de fichier et ajouter un appel à la CMB init.php
en utilisant le code suivant dans votre fichier functions.php
:
function be_sample_metaboxes( $meta_boxes ) {
$prefix = '_cmb_'; // Prefix for all fields
$meta_boxes['test_metabox'] = array(
'id' => 'test_metabox',
'title' => 'Test Metabox',
'pages' => array('post'), // post type (e.g post, post etc.)
'context' => 'normal',
'priority' => 'high',
'show_names' => true, // Show field names on the left
'fields' => array(
array(
'name' => __( 'Test Image', 'cmb' ),
'desc' => __( 'Upload an image or enter a URL.', 'cmb' ),
'id' => $prefix . 'test_image',
'type' => 'file',
),
),
);
return $meta_boxes;
}
add_filter( 'cmb_meta_boxes', 'be_sample_metaboxes' );
// Initialize the metabox class
add_action( 'init', 'be_initialize_cmb_meta_boxes', 9999 );
function be_initialize_cmb_meta_boxes() {
if ( !class_exists( 'cmb_Meta_Box' ) ) {
require_once( './metabox/init.php' );
}
}
La ligne require_once( './metabox/init.php' );
dans la deuxième fonction suppose que vous avez placé les fichiers du Metabox de CMB dans un dossier de votre répertoire de thème appelé metabox
. Ensuite, pour appeler cette option dans votre modèle (par exemple single.php
), vous pouvez utiliser la fonction suivante
$file = get_post_meta( $post->ID, '_cmb_test_image', true );