Aggiungere un campo di input a 'Pagine > Modifica pagina' tramite functions.php
Domanda originale:
Sto cercando di aggiungere un campo di input a 'Pagine > Modifica pagina'. Questo campo servirà all'utente per inserire l'ID di uno slider, in modo che quello slider sia specifico per la pagina.
Esempio:
- L'utente aggiunge l'ID dello slider nel campo di input nella schermata Modifica pagina.
- La pagina recupera quell'ID.
Grazie a tutti voi che avete risposto, siete una comunità meravigliosa, ho ricevuto un aiuto eccellente da questo sito, grazie!
RISULTATO FINALE
functions.php
// Aggiunge un campo personalizzato per l'ID dello slider a 'Modifica pagina'
add_action( 'add_meta_boxes', 'cd_meta_box_add' );
function cd_meta_box_add() {
add_meta_box( 'my-meta-box-id', 'Slider', 'cd_meta_box_cb', 'page', 'normal', 'high' );
}
function cd_meta_box_cb( $post ) {
$values = get_post_custom( $post->ID );
$text = isset( $values['my_meta_box_text'] ) ? esc_attr( $values['my_meta_box_text'][0] ) : '';
wp_nonce_field( 'my_meta_box_nonce', 'meta_box_nonce' );
?>
<p>
<label for="my_meta_box_text">Aggiungi un ID slider</label>
<input type="text" name="my_meta_box_text" id="my_meta_box_text" value="<?php echo $text; ?>" />
</p>
<?php
}
add_action( 'save_post', 'cd_meta_box_save' );
function cd_meta_box_save( $post_id ) {
// Interrompi se stiamo facendo un salvataggio automatico
if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
// se il nostro nonce non è presente o non possiamo verificarlo, interrompi
if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'my_meta_box_nonce' ) ) return;
// se l'utente corrente non può modificare questo articolo, interrompi
if( !current_user_can( 'edit_post', $post_id ) ) return;
// ora possiamo effettivamente salvare i dati
$allowed = array(
'a' => array( // permette solo tag a
'href' => array() // e quegli anchor possono avere solo attributo href
)
);
// Probabilmente una buona idea assicurarsi che i tuoi dati siano impostati
if( isset( $_POST['my_meta_box_text'] ) )
update_post_meta( $post_id, 'my_meta_box_text', wp_kses( $_POST['my_meta_box_text'], $allowed ) );
}
Page.php
<?php echo do_shortcode( '[cycloneslider id="' . get_post_meta(get_the_ID(), 'my_meta_box_text', true) . '"]'); ?>

functions.php
// Aggiunge un campo personalizzato per l'ID dello Slider nella pagina 'Modifica Pagina'
add_action( 'add_meta_boxes', 'cd_meta_box_add' );
function cd_meta_box_add() {
add_meta_box( 'my-meta-box-id', 'Slider', 'cd_meta_box_cb', 'page', 'normal', 'high' );
}
function cd_meta_box_cb( $post ) {
$values = get_post_custom( $post->ID );
$text = isset( $values['my_meta_box_text'] ) ? esc_attr( $values['my_meta_box_text'][0] ) : '';
wp_nonce_field( 'my_meta_box_nonce', 'meta_box_nonce' );
?>
<p>
<label for="my_meta_box_text">Inserisci un ID slider</label>
<input type="text" name="my_meta_box_text" id="my_meta_box_text" value="<?php echo $text; ?>" />
</p>
<?php
}
add_action( 'save_post', 'cd_meta_box_save' );
function cd_meta_box_save( $post_id ) {
// Interrompi se stiamo facendo un salvataggio automatico
if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
// Se il nostro nonce non è presente o non possiamo verificarlo, interrompi
if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'my_meta_box_nonce' ) ) return;
// Se l'utente corrente non può modificare questo articolo, interrompi
if( !current_user_can( 'edit_post', $post_id ) ) return;
// Ora possiamo effettivamente salvare i dati
$allowed = array(
'a' => array( // permettiamo solo tag a
'href' => array() // e quegli anchor possono avere solo l'attributo href
)
);
// Probabilmente una buona idea assicurarsi che i dati siano impostati
if( isset( $_POST['my_meta_box_text'] ) )
update_post_meta( $post_id, 'my_meta_box_text', wp_kses( $_POST['my_meta_box_text'], $allowed ) );
}
Page.php
<?php echo do_shortcode( '[cycloneslider id="' . get_post_meta(get_the_ID(), 'my_meta_box_text', true) . '"]'); ?>

Innanzitutto, dovresti utilizzare i campi personalizzati (custom fields) se vuoi assegnare un valore aggiuntivo a un post/pagina specifico e non globalmente per tutto il sito.
Poi dovresti usare la funzione add_meta_box
per registrare il tuo meta box personalizzato, che permetterà di modificare facilmente questi campi personalizzati.
Ecco un codice di esempio:
// registra il tuo meta box personalizzato
function my_slider_properties_meta_box() {
add_meta_box('my_slider_properties', 'Titolo URL del formato Link', 'my_slider_properties', 'page', 'side', 'default');
}
add_action('add_meta_boxes', 'my_slider_properties_meta_box');
// visualizza il tuo meta box personalizzato
function my_slider_properties() {
global $post;
$my_slider_id = get_post_meta($post->ID, '_my_slider_id', true);
echo '<p>ID del mio slider</p>';
echo '<input type="text" name="_my_slider_id" value="' . esc_attr($my_slider_id) . '" size="40" />';
}
// elabora il tuo meta box personalizzato durante il salvataggio
function my_slider_properties_save_meta($post_id, $post) {
if ( !current_user_can( 'edit_post', $post->ID ))
return $post->ID;
$metas['_my_slider_id'] = $_POST['_my_slider_id'];
foreach ($metas as $key => $value) {
update_post_meta($post->ID, $key, $value);
}
}
add_action('save_post', 'my_slider_properties', 1, 2);
Questo è solo un esempio base di come farlo. Dovresti occuparti anche della sicurezza (usare nonce) e altre cose, immagino. Ma l'idea dovrebbe essere chiara ora.
(6 caratteri)

Utilizza add_meta_box('my_slider_properties', 'Link Format Title URL', 'my_slider_properties', 'page', 'side', 'default'); e non add_meta_box('my_slider_properties', 'Link Format Title URL', 'my_slider_properties', 'post', 'side', 'default'); perché l'utente vuole usare i post meta nelle pagine e non nei post.

Grazie, mi era sfuggito. Hai ragione, voleva aggiungerlo alle pagine non ai post :) Ho modificato il mio codice, quindi ora dovrebbe essere a posto.

@Vinod Dalvi e Krzysiek Dróżdż - Grazie a entrambi! Ora ho lo slider funzionante e viene chiamato dal template, ma sta chiamando il primo slider che ho creato su ogni pagina e inoltre non mantiene il valore di ogni slider all'interno del campo di input del testo.

Se vuoi salvare l'ID dello slider specifico per tutte le pagine, dovresti utilizzare le meta box dei post invece delle opzioni di WordPress.
Per ottenere il valore dalle meta box dei post, utilizza la funzione get_post_meta() al posto della funzione get_option().
