web-dev-qa-db-de.com

Erstellen eines Image-zentrierten benutzerdefinierten Beitragstyps?

Hat jemand Tipps zum Erstellen eines bildzentrierten benutzerdefinierten Beitragstyps?

Mein Blog enthält die folgenden rotierenden Header-Bilder:

Blog header showing random images

Die beiden Bilder oben links sind zufällig angeordnet und existieren als Anhänge zu einer bestimmten Seite, die nur zur Aufnahme dieser Bilder existiert. Ich frage mich, ob es möglich ist, diese mit benutzerdefinierten Beitragstypen auf andere Weise zu speichern. Ich habe den neuen Post-Typ "Header-Image" erstellt und versuche herauszufinden, wie es weitergeht. Ich möchte, dass jedes Header-Bild "post" einen Bildanhang hat. Anstatt zufällige Bilder von einer Seite zu ziehen, würde ich zufällige Posts vom Typ "Header-Image-Post" ziehen. Vor diesem Hintergrund

  1. Wie kann ich eine einfache Schnittstelle zum Anhängeprozess integrieren, die auf der Administrationsseite "New Header Image" verfügbar ist?
  2. Kann ich die Eingabefelder für den Posttitel und den Inhalt entfernen, um die Seite übersichtlicher zu gestalten?

Ziel ist es, eine bessere Schnittstelle zu erstellen den aktuellen Upload-Prozess zu unterstützen und schließlich eine Taxonomie zu erstellen Bilder als linkes Bild/rechtes Bild zu kennzeichnen. (Wenn Sie sich das Bild oben ansehen, sehen Sie, dass das Foto rechts das Gesicht des anderen Fotos verdeckt. Dies könnte ich vermeiden, indem Sie Fotos für die linke und/oder rechte Seite markieren.) Letzteres ist kein Problem, wenn Ersteres kann ich umsetzen.

Update: Aufgrund einer Antwort hier konnte ich dieses Setup implementieren. Der vollständige Code ist unten angegeben .

16

die erste Antwort von goldenapple gab mir die Starthilfe, die ich brauchte, um dies zu beenden.

functions.php

Hier ist der vollständige Code, den ich verwende, um einen neuen Beitragstyp "Header-Image" hinzuzufügen und andere Admin-Bildschirme entsprechend zu ändern:

/**
 * 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' );

Admin-Screenshots

Header Images post list

Header Images post editing

Vorlagencode

$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) ) );
}
17
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' );

Damit sollte Ihr Beitragstyp mit nichts anderem als einem Feld für ein ausgewähltes Bild registriert werden. Eine Liste der zu übergebenden Argumente finden Sie im Codex http://codex.wordpress.org/Function_Reference/register_post_type .

13
goldenapples