Adăugare câmp de input în 'Pagini > Editare Pagină' prin functions.php
Întrebare originală:
Încerc să adaug un câmp de input în 'Pagini > Editare Pagină'. Scopul acestui câmp este să permită utilizatorului să adauge un ID de slider, astfel încât acel slider să fie specific paginii.
Exemplu:
- Utilizatorul adaugă ID-ul sliderului în câmpul de input din ecranul de editare pagină.
- Pagina preia acel ID.
Mulțumesc tuturor celor care au răspuns, sunteți o comunitate minunată, am primit ajutor excelent de pe acest site, vă mulțumesc!
REZULTAT FINAL
functions.php
// Adaugă câmp personalizat pentru Slider ID în 'Editare Pagină'
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">Adaugă 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 ) {
// Oprește dacă salvarea este automată
if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
// dacă nonce-ul nu există sau nu poate fi verificat, oprește
if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'my_meta_box_nonce' ) ) return;
// dacă utilizatorul curent nu poate edita postarea, oprește
if( !current_user_can( 'edit_post', $post_id ) ) return;
// acum putem salva datele
$allowed = array(
'a' => array( // permite doar tag-uri a
'href' => array() // și aceste ancore pot avea doar atributul href
)
);
// Este bine să verifici dacă datele sunt setate
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
// Adaugă un câmp personalizat pentru ID-ul Slider-ului în 'Editare Pagină'
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">Adaugă un ID de 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 ) {
// Oprire dacă salvarea este automată
if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
// dacă nonce-ul nu există sau nu poate fi verificat, oprire
if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'my_meta_box_nonce' ) ) return;
// dacă utilizatorul curent nu poate edita această postare, oprire
if( !current_user_can( 'edit_post', $post_id ) ) return;
// acum putem salva datele
$allowed = array(
'a' => array( // permitem doar tag-uri a
'href' => array() // și aceste ancore pot avea doar atributul href
)
);
// Este o idee bună să te asiguri că datele tale sunt setate
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) . '"]'); ?>

În primul rând, ar trebui să utilizați câmpuri personalizate, dacă doriți să atribuiți o valoare suplimentară unui articol/pagină și nu global pentru întregul site.
Apoi ar trebui să utilizați funcția add_meta_box
pentru a vă înregistra caseta meta personalizată, care vă va permite să editați aceste câmpuri personalizate cu ușurință.
Iată un exemplu de cod:
// înregistrează caseta meta personalizată
function my_slider_properties_meta_box() {
add_meta_box('my_slider_properties', 'Titlul URL-ului pentru Formatul Link', 'my_slider_properties', 'page', 'side', 'default');
}
add_action('add_meta_boxes', 'my_slider_properties_meta_box');
// afișează caseta meta personalizată
function my_slider_properties() {
global $post;
$my_slider_id = get_post_meta($post->ID, '_my_slider_id', true);
echo '<p>ID-ul slider-ului meu</p>';
echo '<input type="text" name="_my_slider_id" value="' . esc_attr($my_slider_id) . '" size="40" />';
}
// procesează caseta meta personalizată la salvarea articolului
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);
Acesta este doar un exemplu de bază despre cum să faceți acest lucru. Ar trebui să aveți grijă de securitate (folosiți nonces) și de alte aspecte, cred. Dar ideea ar trebui să fie clară acum.
(6 caractere)

Folosește add_meta_box('my_slider_properties', 'Link Format Title URL', 'my_slider_properties', 'page', 'side', 'default'); și nu add_meta_box('my_slider_properties', 'Link Format Title URL', 'my_slider_properties', 'post', 'side', 'default'); deoarece utilizatorul dorește să folosească meta post în pagini și nu în articole.

Mulțumesc, am trecut cu vederea asta. Ai dreptate, el a dorit să o adauge la pagini nu la articole :) Am editat codul meu, așa că ar trebui să fie în regulă acum.

@Vinod Dalvi și Krzysiek Dróżdż - Vă mulțumesc amândurora! Am reușit să fac slider-ul funcțional acum și se apelează din template, dar afișează primul slider creat pe fiecare pagină și de asemenea nu păstrează valoarea fiecărui slider în câmpul de text.

Dacă dorești să salvezi ID-ul slider-ului pentru o pagină specifică pentru toate paginile, atunci ar trebui să folosești cutii meta pentru postări în loc de opțiuni WP.
Pentru a obține valoarea din meta datele postării, folosește funcția get_post_meta() în loc de funcția get_option().
