Formate Personalizate pentru Tipuri de Postări Personalizate

31 oct. 2011, 00:48:12
Vizualizări: 13.9K
Voturi: 4

Opinia majoritară pare să favorizeze utilizarea tipurilor de postări personalizate în locul formatelor de postări personalizate.

Am mai multe tipuri de postări personalizate pe care doresc să le stilizez în 4 formate diferite, într-un mod care nu este public, adică nu ca o categorie, etichetă sau taxonomie personalizată.

Formatele de postări personalizate par să ofere o soluție ideală pentru aceasta - sunt funcționalități încorporate, ușor de implementat, vin cu o casetă meta utilă, pot fi aplicate ușor cu declarații condiționale etc.

Principalul dezavantaj fiind că nu sunt ușor personalizabile - aș putea să le redenumesc pentru claritate.

Având în vedere gândirea dominantă, care ar fi o abordare mai bună pentru a crea aceeași funcționalitate.

0
Toate răspunsurile la întrebare 4
3

Aveți mai multe opțiuni aici, așa că voi clarifica ce puteți face.

  1. Creați un șablon personalizat pentru tipul de postare folosind ceva de genul single-customposttype.php și profitați de ierarhia de șabloane, http://codex.wordpress.org/Template_Hierarchy

  2. Utilizați o interogare condițională pentru stilizarea în buclă (sau orice altceva folosiți), de genul if (post type= your custom one) style it this way;. Sau utilizați alte condiționale WordPress. http://codex.wordpress.org/Class_Reference/WP_Query

  3. Utilizați o taxonomie pentru organizarea în back-end, taxonomiile personalizate nu trebuie să fie publice.

  4. Utilizați formate de postare pentru tipul dvs. personalizat de postare, CPT-urile pot suporta post-formats, http://codex.wordpress.org/Function_Reference/register_post_type

Cei mai mulți oameni aleg prima opțiune, dar depinde de ceea ce încercați să faceți.

31 oct. 2011 01:21:18
Comentarii

Mulțumesc pentru răspunsul tău, Wyck. Am 3 CPT-uri pe care vreau să le formatez în funcție de 4 subtipuri, așa cum ar face post formats. S-ar putea să folosesc template-uri mai târziu, dar în acest moment caut o modalitate de a aplica formatul fără a folosi taxonomii care sunt vizibile în front-end. Deci, fie trebuie să găsesc o cale de a restricționa vizibilitatea taxonomiei personalizate doar la back-end, fie să folosesc post formats redenumite pentru claritate, care sunt deja restricționate frumos la back-end. Orice sugestii despre cum să realizez taxonomiile doar pentru back-end sunt apreciate, deoarece aceasta este probabil opțiunea mai bună.

Rothbert Rothbert
31 oct. 2011 04:36:38

Când înregistrezi o taxonomie, ai multe opțiuni, unele dintre ele fiind să nu le faci publice, http://codex.wordpress.org/Function_Reference/register_taxonomy

Wyck Wyck
31 oct. 2011 05:36:51

Mulțumesc, Wyck - OK, am văzut opțiunea public => false și am încercat-o, dar tot vedeam taxonomia în subsolul postării mele, dar am realizat că această opțiune o elimină din norii de etichete etc. Îmi dau seama că va trebui să găsesc o modalitate de a exclude anumite taxonomii personalizate din funcția care generează subsolul postării. Voi începe o nouă întrebare.

Rothbert Rothbert
1 nov. 2011 00:51:20
0

Rothbert, elimini vizibilitatea taxonomiilor în fișierele temei tale.

Diferența esențială între "Tipuri Personalizate de Postări" (Custom Post Types) și "Formate de Postări" (Post Formats) este cuvântul 'personalizat'.

Cu alte cuvinte, nu poți schimba numele formatelor personalizate de postări. Ești limitat la cele 10 implicite native WordPress. Nu poți adăuga noi formate de postări. Și nu poți schimba numele celor existente.

4 ian. 2012 23:55:50
1

Puteți activa suportul pentru formatele de articole într-un CPT (Custom Post Type). Când înregistrați tipul de postare, setați 'post-formats' în argumentul 'supports'.

8 ian. 2014 01:14:47
Comentarii

poți îmbunătăți răspunsul tău cu niște exemple de cod și link-uri către documentație suplimentară?

Aurovrata Aurovrata
17 apr. 2021 17:28:49
0

Am găsit acest articol interesant scris de Nathan Swartz care creează formate personalizate pentru postări folosind o taxonomie personalizată. Reproduc codul său aici pentru ca, în cazul în care blogul său dispare, soluția să rămână disponibilă.

Pașii de bază implicați sunt:

  1. Crearea unei taxonomii personalizate și atribuirea acesteia la postări.
  2. Crearea programatică a termenilor în acea taxonomie personalizată, astfel încât non-administratorii să nu poată crea, edita sau șterge termeni noi, dar să le poată atribui postărilor.
  3. Setarea unui termen implicit pentru postări.
  4. Modificarea modului în care taxonomia personalizată este afișată în pagina de editare a postării, astfel încât să poată fi ales un singur format.

Iată codul:

// atașează acțiunea la inițializare și apelează funcția pentru taxonomiile de formate personalizate
add_action( 'init', 'custom_post_formats_taxonomies', 0 );
// creează o nouă taxonomie numită 'format'
function custom_post_formats_taxonomies() {
    // Adaugă o taxonomie nouă, fă-o ierarhică (ca categoriile)
    $labels = array(
        'name'              => _x( 'Formate', 'nume general taxonomie', 'textdomain' ),
        'singular_name'     => _x( 'Format', 'nume singular taxonomie', 'textdomain' ),
        'search_items'      => __( 'Caută Formate', 'textdomain' ),
        'all_items'         => __( 'Toate Formatele', 'textdomain' ),
        'parent_item'       => __( 'Format Părinte', 'textdomain' ),
        'parent_item_colon' => __( 'Format Părinte:', 'textdomain' ),
        'edit_item'         => __( 'Editează Format', 'textdomain' ),
        'update_item'       => __( 'Actualizează Format', 'textdomain' ),
        'add_new_item'      => __( 'Adaugă Format Nou', 'textdomain' ),
        'new_item_name'     => __( 'Nume Format Nou', 'textdomain' ),
        'menu_name'         => __( 'Format', 'textdomain' ),
    );

    $args = array(
        'hierarchical'      => true,
        'labels'            => $labels,
        'show_ui'           => true,
        'show_admin_column' => true,
        'query_var'         => true,
        'rewrite'           => array( 'slug' => 'format' ),
        'capabilities' => array(
            'manage_terms' => '',
            'edit_terms' => '',
            'delete_terms' => '',
            'assign_terms' => 'edit_posts'
        ),
        'public' => true,
        'show_in_nav_menus' => false,
        'show_tagcloud' => false,
    );
    register_taxonomy( 'format', array( 'post' ), $args ); // noua noastră taxonomie 'format'
}

// creează programatic câțiva termeni pentru format
function example_insert_default_format() { // ulterior, îl vom defini ca implicit, astfel încât toate postările să aibă cel puțin un format
    wp_insert_term(
        'Implicit',
        'format',
        array(
          'description' => '',
          'slug'        => 'default'
        )
    );
}
add_action( 'init', 'example_insert_default_format' );

// repetă următoarele 11 linii pentru fiecare format dorit
function example_insert_map_format() {
    wp_insert_term(
        'Hartă', // schimbă acest nume
        'format',
        array(
          'description' => 'Adaugă o hartă mare în partea de sus a postării tale.',
          'slug'        => 'map'
        )
    );
}
add_action( 'init', 'example_insert_map_format' );

// asigură-te că există un format implicit și că este ales dacă nu a fost selectat altul
function moseyhome_default_format_term( $post_id, $post ) {
    if ( 'publish' === $post->post_status ) {
        $defaults = array(
            'format' => 'default' // schimbă 'default' cu slug-ul termenului creat mai sus pe care dorești să fie implicit
            );
        $taxonomies = get_object_taxonomies( $post->post_type );
        foreach ( (array) $taxonomies as $taxonomy ) {
            $terms = wp_get_post_terms( $post_id, $taxonomy );
            if ( empty( $terms ) && array_key_exists( $taxonomy, $defaults ) ) {
                wp_set_object_terms( $post_id, $defaults[$taxonomy], $taxonomy );
            }
        }
    }
}
add_action( 'save_post', 'moseyhome_default_format_term', 100, 2 );

// înlocuiește casetele de selectare pentru taxonomia format cu butoane radio și o cutie meta personalizată
function wpse_139269_term_radio_checklist( $args ) {
    if ( ! empty( $args['taxonomy'] ) && $args['taxonomy'] === 'format' ) {
        if ( empty( $args['walker'] ) || is_a( $args['walker'], 'Walker' ) ) { // Nu suprascrie walker-ele terților.
            if ( ! class_exists( 'WPSE_139269_Walker_Category_Radio_Checklist' ) ) {
                class WPSE_139269_Walker_Category_Radio_Checklist extends Walker_Category_Checklist {
                    function walk( $elements, $max_depth, $args = array() ) {
                        $output = parent::walk( $elements, $max_depth, $args );
                        $output = str_replace(
                            array( 'type="checkbox"', "type='checkbox'" ),
                            array( 'type="radio"', "type='radio'" ),
                            $output
                        );
                        return $output;
                    }
                }
            }
            $args['walker'] = new WPSE_139269_Walker_Category_Radio_Checklist;
        }
    }
    return $args;
}

add_filter( 'wp_terms_checklist_args', 'wpse_139269_term_radio_checklist' );
17 apr. 2021 17:38:21