web-dev-qa-db-fra.com

Ajout d'une classe 'sélectionnée' à certains messages

J'aimerais que les utilisateurs de mon thème soient en mesure de marquer certains messages comme plus importants afin que mon thème puisse attirer davantage l'attention. Je ne suis pas sûr de la meilleure façon de s'y prendre? Est-il possible d'ajouter une catégorie par défaut de 'sélectionnée' à un thème qui sera disponible en option lorsque quelqu'un installera mon thème?

edit: Adoptez l’approche consistant à ajouter une méta-boîte personnalisée à l’écran de l’administrateur: une solution similaire devrait-elle fonctionner?

function featured_post() { ?>
  <label><input type="checkbox" id="featured_post"  value="featured_post">Make this a featured post</label>;
<?php }

add_action('add_meta_boxes', 'cd_meta_box_add');
function cd_meta_box_add() {
add_meta_box(1, 'Featured Post', 'featured_post');
}

function save_custom_meta_box($post_id, $post, $update)
{
if (!isset($_POST["meta-box-nonce"]) || !wp_verify_nonce($_POST["meta-box-nonce"], basename(__FILE__)))
    return $post_id;

if(!current_user_can("edit_post", $post_id))
    return $post_id;

if(defined("DOING_AUTOSAVE") && DOING_AUTOSAVE)
    return $post_id;

$slug = "post";
if($slug != $post->post_type)
    return $post_id;


$featured_post_value = "";


if(isset($_POST["featured_post"]))
{
    $featured_post_value = $_POST["featured_post"];
}   
update_post_meta($post_id, "featured_post",      $featured_post_value);
}

add_action("save_post", "save_custom_meta_box", 10, 3);

function annframe_featured_class( $classes ) {
global $post;
if ( get_post_meta( $post->ID, 'featured_post' ) || '' !=    get_post_meta( $post->ID, 'featured_post' ) ) {
$classes[] = 'featured-post';
}
return $classes;
}
add_filter( 'post_class', 'annframe_featured_class' );
1
olliew

WordPress fournit par défaut une telle fonctionnalité nommée "Postes collants". vous pouvez marquer toute publication comme collante à partir du lien "Modification rapide". et WordPress ajoutera une classe de publication nommée sticky avec toutes les publications collantes. afin que vous puissiez utiliser cette classe dans votre CSS pour donner des styles personnalisés.

et une autre solution consiste à créer des méta-boîtes postales et des méta-boîtes personnalisées dans wp-admin. et fournissez à vos utilisateurs un moyen de marquer tout message comme "En vedette". et ensuite, en fonction de la valeur de ce champ méta, vous pouvez facilement modifier la classe de publication.

trouver plus d'informations sur Meta Box et Champs personnalisés à partir de WordPress Codex. et ensuite, si vous avez ajouté un custom field dans une publication intitulée "featured_post", vous pouvez modifier la classe de publication à l'aide de la fonction ci-dessous. il ajoutera une classe nommée 'featured-post' avec tous les articles marqués comme étant en vedette.

add_action( 'load-post.php', 'annframe_meta_boxes_setup' );
add_action( 'load-post-new.php', 'annframe_meta_boxes_setup' );
add_action( 'save_post', 'annframe_save_post_meta', 10, 2 );

function annframe_meta_boxes_setup() {
  add_action( 'add_meta_boxes', 'annframe_add_meta_box' );
}

function annframe_add_meta_box() {
  add_meta_box(
      'featured_post',                    // Unique ID
      __( 'Featured Post' ),    // Title
      'annframe_display_meta_box',        // Callback function
      'post',  // Admin page (or post type)
      'side',    // Context
      'high'
    );
}

function annframe_display_meta_box( $post ) {
  wp_nonce_field( basename( __FILE__ ), 'ann_meta_boxes_nonce' );
  ?>
   <label for="meta-box-checkbox"><?php _e( 'Mark as featured'); ?></label>
   <input type="checkbox" id="meta-box-checkbox"  name="meta-box-checkbox" value="yes" <?php if ( get_post_meta( $post->ID, 'featured_post', true ) == 'yes' ) echo ' checked="checked"'; ?>>
  <?php
}

// Save meta value.
function annframe_save_post_meta( $post_id, $post ) {

  /* Verify the nonce before proceeding. */
  if ( !isset( $_POST['ann_meta_boxes_nonce'] ) || !wp_verify_nonce( $_POST['ann_meta_boxes_nonce'], basename( __FILE__ ) ) )
    return $post_id;

  /* Get the post type object. */
  $post_type = get_post_type_object( $post->post_type );

  /* Check if the current user has permission to edit the post. */
  if ( !current_user_can( $post_type->cap->edit_post, $post_id ) )
    return $post_id;

  $meta_box_checkbox_value = '';
  if( isset( $_POST["meta-box-checkbox"] ) ) {
    $meta_box_checkbox_value = $_POST["meta-box-checkbox"];
  }

  update_post_meta( $post_id, "featured_post", $meta_box_checkbox_value );
}

// add class.
function annframe_featured_class( $classes ) {
global $post;
if ( get_post_meta( $post->ID, 'featured_post' ) &&  get_post_meta( $post->ID, 'featured_post', true ) == 'yes' ) {
$classes[] = 'featured-post';
}
return $classes;
}
add_filter( 'post_class', 'annframe_featured_class' ); 
3
Anwer AR

Vous pouvez le faire de différentes manières, en utilisant des catégories, des balises, des plug-ins ou des champs ACF.

Pour utiliser votre méthode suggérée, vous pouvez utiliser la fonction wp_insert_category en combinaison avec un hook tel que admin_init .

function add_featured_category() {
    $mcat = array(
        'cat_name' => 'Featured', 
        'category_description' => 'A Featured Category', 
        'category_nicename' => 'category-featured', 
        'category_parent' => ''
    );
    $my_cat_id = wp_insert_category($mcat);
}

add_action('admin_init', 'add_featured_category');
2
Twentyonehundred