it-swarm.com.de

Fügen Sie dem Post-Bildschirm ein Kontrollkästchen hinzu, das dem Titel eine Klasse hinzufügt

Ich benötige einige Posts, um andere Titelfarben als andere zu haben, und ich dachte, dies würde am bequemsten durch eine Art Kontrollkästchen auf dem Bildschirm zum Erstellen/Bearbeiten von Posts erreicht. Wie gehe ich vor, um das Kontrollkästchen hinzuzufügen und dann den Wert in der Vorlage abzurufen?

Vielen Dank

5
SudoWP

Ja, das stimmt, Sie benötigen eine benutzerdefinierte Meta-Box , die die Kontrollkästchen im Bildschirm "Nachbearbeitung" erstellt.

post custom meta box

In diesem Fall handelt es sich um Optionsfelder, da wir nur einen Wert benötigen.

Das Folgende ist der Code, der es erstellt. Fügen Sie es in die functions.php-Datei Ihres Themas ein oder erstellen Sie ein einfaches Plugin , damit dieses Thema unabhängig wird.

/* 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 basiert auf diese Antwort

Wie man es im Theme benutzt

Verwenden Sie mit den richtigen CSS-Regeln (h1.default, h1.red usw.) Folgendes, wo immer Sie die Farbklasse auf den Titel anwenden möchten (index.php, single.php usw.):

<?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>
9
brasofilo

Die Arbeit mit @brasofilo ist großartig, aber wenn Sie nicht viel programmieren möchten, können Sie die gleiche Arbeit mit Custom Fields ausführen. Es ist standardmäßig ausgeblendet. Sie können machen, ist sichtbar von Screen Options. Erstellen Sie ein neues Feld und benennen Sie es als color und fügen Sie den Farbnamen in das Feld value ein. Fügen Sie dann diesen Code in das Feld header.php unter </head> ein.

<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="
?>

Suchen Sie dann nach <h1 class="entry-title" und fügen Sie diesen Code in den <?php echo $id, $color;?> ein. Wenn Sie nun die Titelfarbe ändern möchten, wählen Sie color in den benutzerdefinierten Feldern aus und schreiben Sie den Farbnamen in value.

1
John Doe