Ajouter une case à cocher pour poster un écran qui ajoute une classe au titre

4

J'ai besoin que certains articles aient des couleurs de titre différentes des autres, et je me suis dit que cela serait plus facilement réalisé par une sorte de case à cocher sur l'écran de création / modification de l'article. Comment puis-je ajouter la case à cocher, puis récupérer la valeur dans le modèle?

Merci

    
posée SudoWP 06.08.2012 - 23:46

2 réponses

8

Oui, vous avez besoin d'une boîte méta personnalisée pour créer les cases à cocher dans l'écran Modification postérieure.

Danscecas,cesontdesboutonsradio,carnousn'avonsbesoinqued'unevaleur.

Cequisuitestlecodequilecrée.Placez-ledanslefichierfunctions.phpdevotrethèmeoucréezun plug-in simple pour qu'il devienne indépendant du thème.

/* Define the custom box */
add_action( 'add_meta_boxes', 'wpse_61041_add_custom_box' );

/* Do something with the data entered */
add_action( 'save_post', 'wpse_61041_save_postdata' );

/* Adds a box to the main column on the Post and Page edit screens */
function wpse_61041_add_custom_box() {
    add_meta_box( 
        'wpse_61041_sectionid',
        'Title Color',
        'wpse_61041_inner_custom_box',
        'post',
        'side',
        'high'
    );
}

/* Prints the box content */
function wpse_61041_inner_custom_box($post)
{
    // Use nonce for verification
    wp_nonce_field( 'wpse_61041_wpse_61041_field_nonce', 'wpse_61041_noncename' );

    // Get saved value, if none exists, "default" is selected
    $saved = get_post_meta( $post->ID, 'title_color', true);
    if( !$saved )
        $saved = 'default';

    $fields = array(
        'red'       => __('Red', 'wpse'),
        'green'     => __('Green', 'wpse'),
        'blue'      => __('Blue', 'wpse'),
        'default'   => __('Default', '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)
        );
    }
}

/* When the post is saved, saves our custom data */
function wpse_61041_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;

      // verify this came from the our screen and with proper authorization,
      // because save_post can be triggered at other times
      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'] );
      } 
}

code basé sur cette réponse

Comment l'utiliser dans le thème

Avec les règles CSS appropriées en place ( h1.default , h1.red , etc.), vous pouvez appliquer la classe de couleur au titre où vous voulez ( index.php , single.php , etc.):

<?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>
    
réponse donnée brasofilo 17.11.2012 - 22:26
1

Le travail de @brasofilo est excellent, mais si vous ne souhaitez pas coder beaucoup, vous pouvez effectuer le même travail à partir de Custom Fields . Il est caché par défaut. Vous pouvez faire est visible depuis Screen Options . Créer un nouveau champ & nommez-le color et mettez le nom de la couleur dans le champ value . Placez ensuite ce code dans la balise header.php de votre thème, sous la balise </head> .

<style type="text/css">
/*Replace [color-name] with you color example: red*/
#red {color:"red";}
#green {color:"green";}
#[color-name] {color:"[color-name]";}
#[color-name] {color:"[color-name]";}
</style>
    <?php
global $post;
$color = get_post_meta(get_the_ID(), 'color', true);
$id = "id="
?>

Recherchez ensuite <h1 class="entry-title" et mettez-y le code <?php echo $id, $color;?> . Maintenant, lorsque vous voulez changer la couleur du titre, choisissez color dans les champs personnalisés déroulants & écrire le nom de la couleur dans value .

    
réponse donnée John Doe 06.10.2013 - 18:40

Lire d'autres questions sur les étiquettes