Adăugare checkbox în ecranul de postare pentru a adăuga o clasă la titlu

7 aug. 2012, 00:46:29
Vizualizări: 17K
Voturi: 4

Am nevoie ca unele postări să aibă titluri de diferite culori față de altele și am considerat că cel mai convenabil ar fi să adaug un checkbox în ecranul de creare/editare a postărilor. Cum aș putea adăuga acest checkbox și apoi să preiau valoarea acestuia în template?

Mulțumesc

0
Toate răspunsurile la întrebare 2
4

Da, exact, ai nevoie de o Cutie Meta Personalizată care va crea casetele de bifare în ecranul de Editare Postare.

cutie meta personalizată pentru postări

În acest caz, sunt butoane radio, deoarece avem nevoie de o singură valoare.

Mai jos este codul care o creează. Pune-l în fișierul functions.php al temei tale sau creează un plugin simplu pentru a fi independent de temă.

/* Definește cutia personalizată */
add_action( 'add_meta_boxes', 'wpse_61041_add_custom_box' );

/* Fă ceva cu datele introduse */
add_action( 'save_post', 'wpse_61041_save_postdata' );

/* Adaugă o cutie în coloana principală pe ecranele de editare Post și Pagină */
function wpse_61041_add_custom_box() {
    add_meta_box( 
        'wpse_61041_sectionid',
        'Culoare Titlu',
        'wpse_61041_inner_custom_box',
        'post',
        'side',
        'high'
    );
}

/* Afișează conținutul cutiei */
function wpse_61041_inner_custom_box($post)
{
    // Folosește nonce pentru verificare
    wp_nonce_field( 'wpse_61041_wpse_61041_field_nonce', 'wpse_61041_noncename' );

    // Obține valoarea salvată, dacă nu există, "default" este selectat
    $saved = get_post_meta( $post->ID, 'title_color', true);
    if( !$saved )
        $saved = 'default';

    $fields = array(
        'red'       => __('Roșu', 'wpse'),
        'green'     => __('Verde', 'wpse'),
        'blue'      => __('Albastru', 'wpse'),
        'default'   => __('Implicit', 'wpse'),
    );

    foreach($fields as $key => $label)
    {
        printf(
            '<input type="radio" name="title_color" value="%1$s" id="title_color[%1$s]" %3$s />'.
            '<label for="title_color[%1$s]"> %2$s ' .
            '</label><br>',
            esc_attr($key),
            esc_html($label),
            checked($saved, $key, false)
        );
    }
}

/* Când postarea este salvată, salvează datele noastre personalizate */
function wpse_61041_save_postdata( $post_id ) 
{
      // verifică dacă aceasta este o rutină de salvare automată.
      // Dacă este, formularul nostru nu a fost trimis, așa că nu vrem să facem nimic
      if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
          return;

      // verifică dacă aceasta provine din ecranul nostru și cu autorizația corespunzătoare,
      // deoarece save_post poate fi declanșat în alte momente
      if ( !wp_verify_nonce( $_POST['wpse_61041_noncename'], 'wpse_61041_wpse_61041_field_nonce' ) )
          return;

      if ( isset($_POST['title_color']) && $_POST['title_color'] != "" ){
            update_post_meta( $post_id, 'title_color', $_POST['title_color'] );
      } 
}

cod bazat pe acest Răspuns

Cum să-l folosești în temă

Cu regulile CSS corespunzătoare în loc (h1.default, h1.red, etc), oriunde dorești să aplici clasa de culoare titlului (index.php, single.php, etc), folosește ceva de genul:

<?php $title_color = get_post_meta( get_the_ID(), 'title_color', true); ?>
<h1 class="entry-title <?php echo esc_attr($title_color); ?>"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
17 nov. 2012 23:26:15
Comentarii

Bine bine. Ar trebui să te uiți și la funcția checked.

chrisguitarguy chrisguitarguy
17 nov. 2012 23:58:19

@chrisguitarguy, aha, e genial, mult mai bine! ^\o/^

brasofilo brasofilo
18 nov. 2012 00:26:35

Încă o modificare pentru a curăța puțin funcția de callback. Poți să o testezi să te asiguri că încă funcționează conform așteptărilor. Am făcut-o doar ca să nu te repeți și să poți adăuga mai multe culori cu ușurință.

chrisguitarguy chrisguitarguy
18 nov. 2012 00:40:58

@chrisguitarguy : Excelent, următoarea rundă e pe mine, noroc!

brasofilo brasofilo
18 nov. 2012 00:57:28
0

Lucrarea lui @brasofilo este excelentă, dar dacă nu dorești să faci prea multă programare, poți realiza același lucru folosind Câmpuri Personalizate. Acestea sunt ascunse în mod implicit, dar le poți face vizibile din Opțiuni Ecran. Creează un câmp nou și numește-l culoare, apoi introdu numele culorii în câmpul valoare. Apoi adaugă acest cod în fișierul header.php al temei tale, sub tag-ul </head>.

<style type="text/css">
/*Înlocuiește [nume-culoare] cu culoarea dorită, de exemplu: roșu*/
#roșu {color:"roșu";}
#verde {color:"verde";}
#[nume-culoare] {color:"[nume-culoare]";}
#[nume-culoare] {color:"[nume-culoare]";}
</style>
    <?php
global $post;
$culoare = get_post_meta(get_the_ID(), 'culoare', true);
$id = "id="
?>

Apoi caută <h1 class="entry-title" și adaugă acest cod în interiorul său <?php echo $id, $culoare;?>. Acum, ori de câte ori vrei să schimbi culoarea titlului, alege culoare din meniul derulant al câmpurilor personalizate și scrie numele culorii în câmpul valoare.

6 oct. 2013 19:40:14