Formati di Post Personalizzati per Tipi di Post Personalizzati

31 ott 2011, 00:48:12
Visualizzazioni: 13.9K
Voti: 4

L'opinione prevalente sembra favorire l'uso di tipi di post personalizzati invece di formati di post personalizzati.

Ho diversi tipi di post personalizzati che desidero stilizzare in 4 formati diversi in modo non pubblico, cioè non come categoria, tag o tassonomia personalizzata.

I formati di post personalizzati sembrerebbero offrire una soluzione ideale per questo - sono funzionalità integrate, facilmente implementabili, dotate di comodo meta box, applicabili con istruzioni condizionali ecc.

Il principale svantaggio è che non sono facilmente personalizzabili - potrei rinominarli per maggiore chiarezza.

Quindi, considerando il pensiero prevalente, quale sarebbe un approccio migliore per creare la stessa funzionalità.

0
Tutte le risposte alla domanda 4
3

Hai diverse opzioni qui, quindi chiarirò cosa puoi fare.

  1. Crea un template di pagina per il custom post type usando qualcosa come single-customposttype.php e sfrutta la gerarchia dei template, http://codex.wordpress.org/Template_Hierarchy

  2. Usa una query condizionale per lo stile nel loop (o qualunque cosa tu stia usando), qualcosa come if (post type= il tuo custom post type) applicalo stile in questo modo;. Oppure usa altre condizioni di WordPress. http://codex.wordpress.org/Class_Reference/WP_Query

  3. Usa una tassonomia per l'organizzazione nel backend, le tassonomie personalizzate non devono essere pubbliche.

  4. Usa i formati articolo per il tuo custom post type, i CPT possono supportare post-formats, http://codex.wordpress.org/Function_Reference/register_post_type

La maggior parte delle persone opta per la prima opzione, ma dipende da ciò che stai cercando di fare.

31 ott 2011 01:21:18
Commenti

Grazie per la tua risposta Wyck. Ho 3 CPT che voglio formattare secondo 4 sottotipi come farebbero i post format. Potrei usare i template in futuro ma al momento sto cercando un modo per applicare il formato senza usare tassonomie che siano visibili nel front-end. Quindi ho bisogno di trovare un modo per limitare la visibilità della tassonomia personalizzata solo al back-end oppure usare i post format rinominati per chiarezza, che sono già limitati al back-end. Apprezzerei qualsiasi suggerimento su come ottenere tassonomie solo per il back-end, poiché probabilmente è l'opzione migliore.

Rothbert Rothbert
31 ott 2011 04:36:38

Quando registri una tassonomia hai molte opzioni, alcune delle quali servono proprio a non renderle pubbliche, http://codex.wordpress.org/Function_Reference/register_taxonomy

Wyck Wyck
31 ott 2011 05:36:51

Grazie Wyck - OK avevo visto l'opzione public => false e l'ho provata ma vedevo ancora la tassonomia nel footer dei miei post, ma mi sono reso conto che quell'opzione la rimuove solo dai tag cloud ecc. Capisco che dovrò trovare un modo per escludere determinate tassonomie personalizzate dalla funzione che genera il footer del post. Aprirò una nuova domanda.

Rothbert Rothbert
1 nov 2011 00:51:20
0

Rothbert, nel tuo tema rimuovi la visibilità delle tassonomie dai file del tema.

La differenza cruciale tra "Custom Post Types" e "Post Formats" è la parola 'custom'.

In altre parole, non puoi modificare il nome dei formati di post personalizzati. Sei limitato ai 10 predefiniti nativi di WordPress. Non puoi aggiungere nuovi formati di post. E non puoi cambiare i nomi di quelli esistenti.

4 gen 2012 23:55:50
1

Puoi abilitare il supporto per i formati di articolo in un CPT (Custom Post Type). Durante la registrazione del tipo di contenuto, imposta 'post-formats' nell'argomento 'supports'.

8 gen 2014 01:14:47
Commenti

puoi migliorare la tua risposta con alcuni esempi di codice e link a ulteriore documentazione?

Aurovrata Aurovrata
17 apr 2021 17:28:49
0

Ho trovato questo interessante articolo sul blog di Nathan Swartz che fondamentalmente crea formati di post personalizzati per qualsiasi tipo di post utilizzando una tassonomia personalizzata. Riproduco qui il suo codice così che, nel caso il suo blog dovesse scomparire, la sua soluzione rimanga disponibile qui.

I passaggi fondamentali sono:

  1. Creare una tassonomia personalizzata e assegnarla ai post.
  2. Creare programmaticamente i termini in quella tassonomia personalizzata, in modo che gli utenti non amministratori non possano crearne, modificarne o eliminarne di nuovi, ma possano assegnarli ai post.
  3. Impostare un termine di default per i post.
  4. Modificare il modo in cui la tassonomia personalizzata viene visualizzata nella pagina di modifica del post, in modo che possa essere scelto solo un formato.

Ecco il codice:

// agganciarsi all'azione init e chiamare custom_post_formats_taxonomies quando viene attivata
add_action( 'init', 'custom_post_formats_taxonomies', 0 );
// crea una nuova tassonomia chiamata 'format'
function custom_post_formats_taxonomies() {
    // Aggiungi nuova tassonomia, rendila gerarchica (come le categorie)
    $labels = array(
        'name'              => _x( 'Formati', 'nome generale della tassonomia', 'textdomain' ),
        'singular_name'     => _x( 'Formato', 'nome singolare della tassonomia', 'textdomain' ),
        'search_items'      => __( 'Cerca Formati', 'textdomain' ),
        'all_items'         => __( 'Tutti i Formati', 'textdomain' ),
        'parent_item'       => __( 'Formato Genitore', 'textdomain' ),
        'parent_item_colon' => __( 'Formato Genitore:', 'textdomain' ),
        'edit_item'         => __( 'Modifica Formato', 'textdomain' ),
        'update_item'       => __( 'Aggiorna Formato', 'textdomain' ),
        'add_new_item'      => __( 'Aggiungi Nuovo Formato', 'textdomain' ),
        'new_item_name'     => __( 'Nome Nuovo Formato', 'textdomain' ),
        'menu_name'         => __( 'Formato', '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 ); // la nostra nuova tassonomia 'format'
}

// crea programmaticamente alcuni termini per i formati
function example_insert_default_format() { // più avanti lo definiremo come default, così tutti i post avranno almeno un formato
    wp_insert_term(
        'Default',
        'format',
        array(
          'description' => '',
          'slug'        => 'default'
        )
    );
}
add_action( 'init', 'example_insert_default_format' );

// ripeti le seguenti 11 righe per ogni formato che vuoi aggiungere
function example_insert_map_format() {
    wp_insert_term(
        'Mappa', // cambia questo
        'format',
        array(
          'description' => 'Aggiunge una mappa grande in cima al tuo post.',
          'slug'        => 'map'
        )
    );
}
add_action( 'init', 'example_insert_map_format' );

// assicurati che ci sia un Formato di default e che venga selezionato se non ne è stato scelto uno
function moseyhome_default_format_term( $post_id, $post ) {
    if ( 'publish' === $post->post_status ) {
        $defaults = array(
            'format' => 'default' // cambia 'default' con lo slug del termine che hai creato sopra e che vuoi sia quello predefinito
            );
        $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 );

// sostituisci le checkbox per la tassonomia format con pulsanti radio e un meta box personalizzato
function wpse_139269_term_radio_checklist( $args ) {
    if ( ! empty( $args['taxonomy'] ) && $args['taxonomy'] === 'format' ) {
        if ( empty( $args['walker'] ) || is_a( $args['walker'], 'Walker' ) ) { // Non sovrascrivere walker di terze parti.
            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