Tworzenie niestandardowego typu postu zorientowanego na obraz?


17

Czy ktoś ma jakieś wskazówki dotyczące tworzenia niestandardowego typu postu zorientowanego na obraz?

Aby to rozwinąć, mój blog ma obracane obrazy nagłówków, pokazane poniżej:

Nagłówek blogu przedstawiający losowe obrazy

Dwa obrazy w lewym górnym rogu są losowe i istnieją jako załączniki do określonej strony, która istnieje tylko po to, aby je zawierać. Zastanawiam się, czy możliwe jest przechowywanie ich w inny sposób przy użyciu niestandardowych typów postów. Stworzyłem nowy typ postu, „obraz nagłówka”, i staram się dowiedzieć, dokąd pójść. Chciałbym, aby każdy „post” obrazu nagłówka miał jeden załącznik obrazu. Zamiast wyciągać losowe obrazy ze strony, wyciągałbym losowe posty z typu postu z nagłówkiem-obrazem. Biorąc to pod uwagę

  1. Jak mogę włączyć prosty interfejs do procesu załączania, który jest dostępny na stronie administratora „Nowy obraz nagłówka”?
  2. Czy mogę usunąć pole wprowadzania tytułu i treści, aby uporządkować tę stronę?

Celem jest stworzenie lepszego interfejsu do bieżącego procesu przesyłania, a ostatecznie stworzenie taksonomii do oznaczania obrazów jako lewe / prawe. (Patrząc na powyższe zdjęcie, możesz zobaczyć zdjęcie po prawej stronie zakrywające twarz na drugim zdjęciu. Mogłem tego uniknąć, zaznaczając zdjęcia do wyświetlania po lewej i / lub po prawej stronie.) To drugie nie będzie stanowiło problemu, jeśli Mogę wdrożyć to pierwsze.

Aktualizacja: na podstawie odpowiedzi tutaj udało mi się wdrożyć tę konfigurację. Pełny kod znajduje się poniżej .


2
Sugeruję, abyś dał tej osobie odpowiedź, która zaprowadziła cię tam, gdzie musisz udać się na kredyt Akceptuj odpowiedź.
Ryan Gibbons,

Odpowiedzi:


18

Początkowa odpowiedź goldenapple dała mi start, którego potrzebowałem, aby to zakończyć.

functions.php

Oto pełny kod, którego używam, aby dodać nowy typ „nagłówka-obrazu” i odpowiednio zmodyfikować inne ekrany administratora:

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

Zrzuty ekranu administratora

Lista postów Obrazy nagłówka

Zdjęcia nagłówka po edycji

Kod szablonu

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

Dobra robota! Kocham to!
John P Bloch,

A jak dodać link do miniatury? Zarówno w adminie, jak i szablonie? Dobrze wyglądający!
Florescu Adrian

Czy można to zmodyfikować, aby przypisać obraz do strony?
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' );

To powinno zarejestrować twój typ wpisu z niczym innym jak polem dla polecanego obrazu. Zobacz kodeks http://codex.wordpress.org/Function_Reference/register_post_type, aby uzyskać listę argumentów do przekazania.


1
Obsługiwana wartość „wyróżnionego obrazu” daje mi pusty ekran podczas tworzenia nowego obrazu nagłówka, ale „miniatura” dodaje nowe pole meta o nazwie „Polecany obraz”. Dzięki!
Annika Backstrom

Masz rację. Mój błąd w tym.
goldenapples,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.