Créer un type de publication personnalisé centré sur l'image?

17

Quelqu'un a-t-il des conseils pour créer un type de publication personnalisé centré sur l'image?

Pour élaborer, mon blog a des images d'en-tête tournantes, illustrées ci-dessous:

En-tête de blog montrant des images aléatoires

Les deux images en haut à gauche sont randomisées et existent en tant que pièces jointes à une page spécifique qui n'existe que pour contenir ces images. Je me demande s'il est possible de les stocker d'une manière différente en utilisant des types de publication personnalisés. J'ai créé un nouveau type de message, "header-image", et j'essaie de savoir où aller à partir d'ici. Je voudrais que chaque "post" d'image d'en-tête ait une pièce jointe d'image. Au lieu de tirer des images aléatoires d'une page, je tirerais des publications aléatoires du type de publication image d'en-tête. Compte tenu de cela,

  1. Comment puis-je intégrer une interface simple au processus de pièce jointe qui est disponible à partir de la page d'administration "Nouvelle image d'en-tête"?
  2. Puis-je supprimer le titre du message et les zones de saisie de contenu pour désencombrer cette page?

Les objectifs sont de créer une meilleure interface avec le processus de téléchargement en cours, et éventuellement de créer une taxonomie pour marquer les images comme image de gauche / image de droite. (En regardant l'image ci-dessus, vous pouvez voir la photo de droite recouvrir le visage sur l'autre photo. Je pourrais éviter cela en marquant les photos pour l'affichage gauche et / ou droit.) Ce dernier ne sera pas un problème si Je peux mettre en œuvre l'ancien.

Mise à jour: basé sur une réponse ici, j'ai pu implémenter cette configuration. Le code complet est affiché ci-dessous .

Annika Backstrom
la source
2
Je suggérerais que vous donniez à la personne la réponse qui vous a amené là où vous devez aller le crédit Accept Answer.
Ryan Gibbons

Réponses:

18

La réponse initiale de goldenapple m'a donné le coup de pouce dont j'avais besoin pour terminer cela.

functions.php

Voici le code complet que j'utilise pour ajouter un nouveau type de message "header-image" et modifier les autres écrans d'administration en conséquence:

/**
 * Register the Header Image custom post type.
 */
function sixohthree_init() {
    $labels = array(
        'name' => 'Header Images',
        'singular_name' => 'Header Image',
        'add_new_item' => 'Add Header Image',
        'edit_item' => 'Edit Header Image',
        'new_item' => 'New Header Image',
        'view_item' => 'View Header Image',
        'search_items' => 'Search Header Images',
        'not_found' => 'No Header Images found',
        'not_found_in_trash' => 'No Header Images found in Trash'
    );

    $args = array(
        'labels' => $labels,
        'public' => false,
        'show_ui' => true,
        'supports' => array('thumbnail')
    );

    register_post_type( 'header-image', $args );
}
add_action( 'init', 'sixohthree_init' );

/**
 * Modify which columns display when the admin views a list of header-image posts.
 */
function sixohthree_headerimage_posts_columns( $posts_columns ) {
    $tmp = array();

    foreach( $posts_columns as $key => $value ) {
        if( $key == 'title' ) {
            $tmp['header-image'] = 'Header Image';
        } else {
            $tmp[$key] = $value;
        }
    }

    return $tmp;
}
add_filter( 'manage_header-image_posts_columns', 'sixohthree_headerimage_posts_columns' );

/**
 * Custom column output when admin is view the header-image post list.
 */
function sixohthree_headerimage_custom_column( $column_name ) {
    global $post;

    if( $column_name == 'header-image' ) {
        echo "<a href='", get_edit_post_link( $post->ID ), "'>", get_the_post_thumbnail( $post->ID ), "</a>";
    }
}
add_action( 'manage_posts_custom_column', 'sixohthree_headerimage_custom_column' );

/**
 * Make the "Featured Image" metabox front and center when editing a header-image post.
 */
function sixohthree_headerimage_metaboxes( $post ) {
    global $wp_meta_boxes;

    remove_meta_box('postimagediv', 'header-image', 'side');
    add_meta_box('postimagediv', __('Featured Image'), 'post_thumbnail_meta_box', 'header-image', 'normal', 'high');
}
add_action( 'add_meta_boxes_header-image', 'sixohthree_headerimage_metaboxes' );

/**
 * Enable thumbnail support in the theme, and set the thumbnail size.
 */
function sixohthree_after_setup() {
    add_theme_support( 'post-thumbnails' );
    set_post_thumbnail_size(150, 100, true);
}
add_action( 'after_setup_theme', 'sixohthree_after_setup' );

Captures d'écran d'administration

Liste de publication des images d'en-tête

Post-édition des images d'en-tête

Code de modèle

$header_images = get_posts('post_type=header-image&orderby=rand&numberposts=2');

foreach( $header_images as $idx => $post ) {
    setup_postdata($post);
    the_post_thumbnail('post-thumbnail', array('class' => 'snapshot snapshot' . ($idx+1) ) );
}
Annika Backstrom
la source
Bon travail! Aimer!
John P Bloch
Et comment ajouter un lien à la vignette? À la fois en tant qu'administrateur et modèle? Belle recherche!
Florescu Adrian le
Cela pourrait-il être modifié pour attribuer une image à une page?
Doidgey
13
function register_header_image() {
     register_post_type( 'header-image', 
                         array( 
                             'label'=>'Header Images',
                             'name'=>'Header Images',
                             'singular_name'=>'Header Image',
                             'public'=>true,
                             'show_ui'=>true,
                             'hierarchical'=>true,
                             'supports'=>array('thumbnail') ) );
}

add_action ('init','register_header_image');
add_theme_support( 'post-thumbnails' );

Cela devrait enregistrer votre type de publication avec rien d'autre qu'un champ pour une image sélectionnée. Voir le codex http://codex.wordpress.org/Function_Reference/register_post_type pour une liste des arguments à passer.

pommes dorées
la source
1
Une valeur prise en charge de "vedette-image" me donne un écran vide lors de la création d'une nouvelle image d'en-tête, mais "miniature" ajoute une nouvelle boîte de méta appelée "Image vedette". Merci!
Annika Backstrom
Tu as raison. Mon erreur là-dessus.
goldenapples