Creazione di un plug-in di tipo di post personalizzato dinamico

Spesso, puoi fare una scelta e decidere come implementare una determinata funzionalità. WordpPress ha un approccio abbastanza flessibile per quasi tutti i problemi, e in questo tutorial daremo un'occhiata a quanto sia flessibile l'API del tipo di post personalizzato.

Ci sono molte cose che puoi fare con i tipi di messaggi personalizzati, tra cui la generazione e la gestione di determinati post su alcune pagine personalizzate, presentazioni, gallerie, articoli di portfolio. Alcune persone non sanno ancora di esistere, altri non comprendono appieno le loro opzioni e come usarle. Proveremo, nei seguenti passaggi, a creare un plug-in specifico che utilizzi i tipi di post personalizzati al meglio. Per essere più precisi, stiamo costruendo un plugin che crea un tipo di post personalizzato, che crea e gestisce dinamicamente, altri tipi di post personalizzati (è come Inception qui!).


Step 1 The Plan

Prima ancora di iniziare, esamineremo in dettaglio cosa costruiremo in questo tutorial, come e perché. Lo scopo di questo tutorial è di aiutare a familiarizzare con i tipi di post personalizzati in WordPress.

Per fare questo costruiamo un plugin che crea un tipo di post personalizzato principale, quindi utilizziamo i post in quel tipo di post personalizzato, con una meta box delle impostazioni, per creare tipi di post personalizzati dinamici aggiuntivi basati sulle opzioni dell'interfaccia del meta-box. Questo ti aiuterà a capire in dettaglio tutte le opzioni di post personalizzate e alcune delle possibilità che può dare. Ai fini di questo tutorial, è implicito che tu abbia un server Apache funzionante con PHP e MySQL in esecuzione e WordPress installato, in modo da poter testare il codice del plugin su una versione 3.0+ di WordPress.

Ogni post verrà interpretato come un nuovo tipo di post personalizzato e stiamo andando a salvare le opzioni di configurazione di ogni post nei campi personalizzati utilizzando una meta-box con molti moduli, caselle di controllo, caselle a discesa e caselle di testo che memorizzeranno e mostreranno il dati, rendendo facile per l'utente modificare qualsiasi cosa.

Poiché il plug-in ha 450 righe di codice, non tutte le righe di codice saranno presenti nel tutorial poiché la maggior parte del codice viene ripetuta e solo le variabili sono diverse. Ma verranno spiegate tutte le funzionalità del plugin e il codice sorgente fornito come esempio.


Passaggio 2 Creazione e comprensione dei ganci

Se vogliamo raggiungere la funzionalità del tipo di post personalizzato, la funzionalità di metabox e vogliamo salvare i dati durante l'aggiornamento o pubblicare l'azione, abbiamo bisogno di ganci e dobbiamo implementarli in modo specifico per ottenere l'effetto desiderato.

 add_action ('save_post', 'cpt_save_postdata'); add_action ('add_meta_boxes', 'cpt_add_meta_boxes'); add_action ('init', 'init_custom_post_types');

Abbiamo solo bisogno di tre hook in questo tutorial, nessun filtro, nient'altro alla funzionalità di base. Per prima cosa abbiamo bisogno di un hook per generare il tipo di post personalizzato nella sua funzione di callback. Per questo useremo il dentro tag hook e la funzione di callback con il nome di '' init_custom_post_types. Qui è dove avviene tutta la magia, ovvero è qui che dichiariamo i nostri tipi di post personalizzati e dove li rendiamo dinamici estraendo i valori dal database e generando tipi di post personalizzati dinamici in un loop. Questa parte del codice verrà discussa in seguito.

Un altro gancio di cui abbiamo bisogno è il '' add_meta_boxes tag hook che punta alla funzione di callback '' cpt_add_meta_boxes e viene utilizzato per generare le meta box all'interno del tipo di post personalizzato principale che genera tutti gli altri tipi di post personalizzati. Qui è dove creiamo le forme che memorizzeranno e aggiorneranno i dati che dobbiamo manipolare per creare la nostra funzionalità.

L'ultimo gancio che usiamo è 'Save_post' con la funzione di callback di 'Cpt_save_postdata' e lo scopo di salvare i meta dati pubblicati. Quando la pagina del tipo di post principale principale viene inviata dal pannello di amministrazione dall'utente, vengono inviati tutti i campi del modulo e questo è il gancio che utilizziamo per afferrare quel contenuto e salvarlo / aggiornarlo nel database per un uso successivo.


Passaggio 3 Creazione del tipo di post principale personalizzato

Innanzitutto, dobbiamo creare un tipo di post personalizzato generale che gestirà tutto il contenuto dinamico. Per fare questo, per prima cosa creiamo un tipo di messaggio personalizzato generico utilizzando dati codificati come nell'esempio seguente. Per prima cosa creiamo le etichette. Il parametro labels è uno dei valori dell'argomento principale che viene interpretato come una matrice. I valori dell'array sono dati dai rispettivi identificatori, in particolare nome per il nome generale principale del tipo di post personalizzato che di solito è una stringa plurale del nome del tipo di post personalizzato, singular_name per il nome dell'oggetto tipo di post personalizzato nel singolare, aggiungere nuova aggiungere un nuovo testo di stringa, Aggiungi un nuovo elemento questo è il default aggiungi un nuovo post / testo di pagina, edit_item come testo predefinito per modificare post o pagina, tutti gli articoli viene utilizzato per mostrare tutti i nomi dei nomi dei messaggi personalizzati dove richiesto (esempio: tutte le auto), view_items e search_items sono usati proprio come nell'esempio precedente solo per gli scopi ovviamente diversi, non trovato, not_fount_in_trash, parent_item_colon sono anche testi sostitutivi utilizzati per determinate pagine dei post (tipi di post personalizzati) funzionalità che potresti voler cambiare per qualsiasi tipo di post personalizzato che crei.

Nel prossimo esempio, il $ etichette array usa CPT in sostituzione del testo predefinito post / post / pagina / pagine. Suppongo che non sia necessario per alcuni lettori ma solo per essere sicuro di non perdere l'idea, CPT è l'acronimo di Custom Post Type e lo è e verrà utilizzato in vari modi durante il tutorial.

Una nota importante, questo codice è inserito nel init_custom_post_types funzione di callback per farlo funzionare correttamente.

 $ labels = array ('name' => _x ('CPT', 'nome generale del tipo di post'), 'singular_name' => _x ('CPT', 'post type singular name'), 'add_new' => _x ( "Aggiungi nuovo CPT", "CPT"), "add_new_item" => __ ("Aggiungi nuovo tipo di post"), "edit_item" => __ ("Modifica CPT"), "new_item" => __ ("Nuovo CPT" ), 'all_items' => __ ('Tutti i CPT'), 'view_item' => __ ('Visualizza CPT'), 'search_items' => __ ('Cerca CPT'), 'not_found' => __ ('No Trovato CPT '),' not_found_in_trash '=> __ (' Nessun CPT trovato nel cestino '),' parent_item_colon '=> ",' menu_name '=> __ (' CPT ')); $ args = array (' labels '= > $ labels, 'public' => true, 'public_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => true, 'capability_type' = > 'post', 'has_archive' => true, 'hierarchical' => false, 'menu_position' => null, 'supports' => array ('title')); register_post_type ('CPT', $ args);

L'array principale necessario per generare il tipo di post personalizzato è il $ args array, utilizzato al solo scopo di impostare le opzioni principali del tipo di post personalizzato e gestirne la funzionalità.

  • La prima variabile di matrice è denominata etichette e in precedenza ci siamo presi cura della struttura di quel valore.
  • pubblico - una variabile booleana, vera o falsa, che rappresenta la disponibilità del tipo di post personalizzato, se è pubblica per l'interfaccia di amministrazione o dagli utenti front-end nel tema.
  • publicly_queryable - di nuovo un valore booleano che imposta se il front-end ha la capacità di interrogare i risultati del tipo di messaggio personalizzato.
  • show_ui - un valore booleano che indica se il contenuto di amministrazione predefinito viene generato per il tipo di post personalizzato o meno.
  • show_in_menu - ancora un'altra variabile booleana che richiede show_ui essere fedele alla funzione, poiché il suo scopo è mostrare o non mostrare il tipo di messaggio nel menu del pannello di amministrazione di WordPress.
  • query_var - crea una query chiave var per questo tipo di messaggio personalizzato. Puoi usarlo come booleano o stringa, se è vero è predefinito, false disabilita l'uso della query var per la chiave e la stringa imposta una chiave personalizzata. Nel nostro esempio usiamo il valore predefinito e lo impostiamo su true.
  • riscrivere - questo impedisce riscritture per questo tipo di messaggio.
  • capability_type - infine, una stringa che imposta se il tipo di post personalizzato è un post o una pagina, in una stringa di testo semplice. Stiamo usando post.
  • has_archive - questo parametro abilita gli archivi postali e gli usi post_type di default come slug di archivio.
  • gerarchica - un booleano che imposta se il tipo di post è gerarchico o meno, cioè se consente ai genitori di essere specificati o meno.
  • menu_position - una stringa che rappresenta la posizione per il tipo di messaggio da mostrare nel menu. I valori vanno approssimativamente da 5 fino a 100.
  • supporti - questo valore ha di nuovo un valore di matrice, questa volta con valori come titolo, editor, miniatura, campi personalizzati, trackback, revisioni, attributi della pagina e formati successivi.

L'array di argomenti principale viene utilizzato nel prossimo register_post_type funzione che ha il primo parametro il nome del tipo di messaggio personalizzato (nel nostro caso CPT) e il secondo il $ args variabile.

Questo copre praticamente la creazione del nostro principale tipo di post personalizzato, con l'esempio fornito e spiegato sopra.


Passaggio 4 Codifica della casella Meta

Per prima cosa, abbiamo trattato gli hook, uno degli hook implementava un tag che aveva una funzione di callback fatta appositamente per l'implementazione di meta-box. Quella funzione assomiglia a questa:

 function cpt_add_meta_boxes () add_meta_box ('cpt_meta_id', 'Impostazioni tipo di messaggio personalizzato', 'cpt_inner_custom_box', 'CPT', 'normale'); 

All'interno della funzione abbiamo il add_meta_box funzione che ha i parametri di default per l'implementazione di una meta-scatola, vale a dire l'id univoco della casella, il titolo di essa, la funzione di callback e il tipo di post personalizzato dove dovrebbe essere applicato, anche per ultimo, la posizione (siamo andando a impostarlo su normale come lo vogliamo proprio sotto l'editor).

Questo è tutto per generare usando l'API, ma con cosa lo riempiamo? Bene, dobbiamo riempirlo con tutte le opzioni precedentemente discusse dal punto 3 e per fare questo, stiamo andando a creare campi modulo e riempirli con dati a seconda del loro tipo.

Alcuni saranno caselle di controllo

Stiamo usando le checkbox per gli argomenti dell'array che richiedono valori booleani. Selezionato è vero e deselezionato è falso.

  name = "cp_publicly_queryable" /> pubblicamente interrogabile 

Altri cadranno nelle scatole

Alcuni argomenti dell'array richiedono più elementi tra cui scegliere. Per questo stiamo usando scatole a discesa con valori hardcoded che si adattano alle nostre esigenze.

 Posizione del menu:

E altri campi di testo

Stiamo andando a memorizzare valori stringa in questi campi modulo.

 Nome generale:

Potresti aver notato che sono pieni di variabili PHP e funzionano con i dati. Ma dove sono queste variabili che vengono da te potresti chiederti, e che dire dei dati? Per rispondere a questa domanda, dobbiamo andare al passaggio successivo e salvare i campi del modulo creati proprio ora. Ma poiché non voglio farti andare avanti e indietro attraverso i passaggi, ti chiederò di presumere che tutti i dati siano salvati in qualche modo nel database, ti mostrerò come, e tutto ciò che dobbiamo fare è estrarlo in variabili come nell'esempio seguente:

 $ globale post; $ cp_public = get_post_meta ($ post-> ID, 'cp_public', true);

Nella nostra funzione di call box meta dichiariamo la variabile globale $ postale per ottenere l'ID post corrente più tardi e poiché i dati sono memorizzati come post personalizzati, useremo il comando get_post_meta funzione per ottenere il valore della chiave metrica memorizzato per ciascuna variabile come nell'esempio precedente, dove il primo parametro è l'id del post, il secondo è la meta key e il terzo è un valore booleano che indica la funzione per restituire una stringa e non una matrice.

Ci sono un certo numero di 27 variabili usate in questo tutorial memorizzate come post personalizzati e assomigliano a questo:

 $ cp_public = get_post_meta ($ post-> ID, 'cp_public', true); $ cp_publicly_queryable = get_post_meta ($ post-> ID, 'cp_publicly_queryable', true); $ cp_show_ui = get_post_meta ($ post-> ID, 'cp_show_ui', vero); $ cp_show_in_menu = get_post_meta ($ post-> ID, 'cp_show_in_menu', vero); $ cp_query_var = get_post_meta ($ post-> ID, 'cp_query_var', true); $ cp_rewrite = get_post_meta ($ post-> ID, 'cp_rewrite', vero); $ cp_has_archive = get_post_meta ($ post-> ID, 'cp_has_archive', true); $ cp_hierarchical = get_post_meta ($ post-> ID, 'cp_hierarchical', true); $ cp_capability_type = get_post_meta ($ post-> ID, 'cp_capability_type', true); $ cp_menu_position = get_post_meta ($ post-> ID, 'cp_menu_position', vero); $ cp_s_title = get_post_meta ($ post-> ID, 'cp_s_title', true); $ cp_s_editor = get_post_meta ($ post-> ID, 'cp_s_editor', vero); $ cp_s_author = get_post_meta ($ post-> ID, 'cp_s_author', true); $ cp_s_thumbnail = get_post_meta ($ post-> ID, 'cp_s_thumbnail', true); $ cp_s_excerpt = get_post_meta ($ post-> ID, 'cp_s_excerpt', true); $ cp_s_comments = get_post_meta ($ post-> ID, 'cp_s_comments', true); $ cp_general_name = get_post_meta ($ post-> ID, 'cp_general_name', true); $ cp_singular_name = get_post_meta ($ post-> ID, 'cp_singular_name', true); $ cp_add_new = get_post_meta ($ post-> ID, 'cp_add_new', vero); $ cp_add_new_item = get_post_meta ($ post-> ID, 'cp_add_new_item', true); $ cp_edit_item = get_post_meta ($ post-> ID, 'cp_edit_item', vero); $ cp_new_item = get_post_meta ($ post-> ID, 'cp_new_item', true); $ cp_all_items = get_post_meta ($ post-> ID, 'cp_all_items', vero); $ cp_view_item = get_post_meta ($ post-> ID, 'cp_view_item', vero); $ cp_search_items = get_post_meta ($ post-> ID, 'cp_search_items', true); $ cp_not_found = get_post_meta ($ post-> ID, 'cp_not_found', true); $ cp_not_found_in_trash = get_post_meta ($ post-> ID, 'cp_not_found_in_trash', true); $ cp_parent_item_colon = get_post_meta ($ post-> ID, 'cp_parent_item_colon', true);

Quello che devi capire è che sono tutti estratti allo stesso modo, non c'è niente di speciale o diverso in questo lungo elenco di variabili, tranne i loro valori. Ovviamente, l'idea è che questo codice recuperi i dati dal database e venga utilizzato successivamente in ogni campo del modulo per mostrare i dati nella casella meta del pannello di amministrazione come valore selezionato, come stringa o come casella di spunta per il valore booleano valori. Tutte le funzionalità possono essere viste meglio nei file scaricabili allegati.

Come risultato finora, questo è il modo in cui un post personalizzato del contenuto di meta box del tipo di post personalizzato sembra basato sulla nostra implementazione.


Passaggio 5 Salvataggio dei dati

Tutti i dati del modulo inviati dalla meta-box devono essere salvati nel database in modo che possano essere utilizzati in un secondo momento per rendere dinamico il tipo di post personalizzato e anche nella funzionalità della meta-box. Per salvare i dati abbiamo il cpt_save_postdata funzione come funzione di callback che abbiamo creato per fare proprio questo. Ma questa funzione deve essere piena di funzionalità che in realtà salva i dati. Quindi, come salviamo i dati per tutti questi elementi. La risposta facile e più ovvia è campi personalizzati. Stiamo andando a memorizzare tutti questi valori nei campi personalizzati del post individuale del tipo di post principale principale, in quanto è molto più facile da gestire in seguito quando li estraiamo in base a un determinato post interrogato.

Ecco tutto il codice necessario per eseguire la funzione specificata in precedenza al fine di salvare tutti i dati di cui abbiamo bisogno.

 $ globale post; if ($ _POST ['cpt-hidd'] == 'true') $ cp_public = get_post_meta ($ post-> ID, 'cp_public', true); $ cp_publicly_queryable = get_post_meta ($ post-> ID, 'cp_publicly_queryable', true); $ cp_show_ui = get_post_meta ($ post-> ID, 'cp_show_ui', vero); $ cp_show_in_menu = get_post_meta ($ post-> ID, 'cp_show_in_menu', vero); $ cp_query_var = get_post_meta ($ post-> ID, 'cp_query_var', true); $ cp_rewrite = get_post_meta ($ post-> ID, 'cp_rewrite', vero); $ cp_has_archive = get_post_meta ($ post-> ID, 'cp_has_archive', true); $ cp_hierarchical = get_post_meta ($ post-> ID, 'cp_hierarchical', true); $ cp_capability_type = get_post_meta ($ post-> ID, 'cp_capability_type', true); $ cp_menu_position = get_post_meta ($ post-> ID, 'cp_menu_position', vero); $ cp_s_title = get_post_meta ($ post-> ID, 'cp_s_title', true); $ cp_s_editor = get_post_meta ($ post-> ID, 'cp_s_editor', vero); $ cp_s_author = get_post_meta ($ post-> ID, 'cp_s_author', true); $ cp_s_thumbnail = get_post_meta ($ post-> ID, 'cp_s_thumbnail', true); $ cp_s_excerpt = get_post_meta ($ post-> ID, 'cp_s_excerpt', true); $ cp_s_comments = get_post_meta ($ post-> ID, 'cp_s_comments', true); $ cp_general_name = get_post_meta ($ post-> ID, 'cp_general_name', true); $ cp_singular_name = get_post_meta ($ post-> ID, 'cp_singular_name', true); $ cp_add_new = get_post_meta ($ post-> ID, 'cp_add_new', vero); $ cp_add_new_item = get_post_meta ($ post-> ID, 'cp_add_new_item', true); $ cp_edit_item = get_post_meta ($ post-> ID, 'cp_edit_item', vero); $ cp_new_item = get_post_meta ($ post-> ID, 'cp_new_item', true); $ cp_all_items = get_post_meta ($ post-> ID, 'cp_all_items', vero); $ cp_view_item = get_post_meta ($ post-> ID, 'cp_view_item', vero); $ cp_search_items = get_post_meta ($ post-> ID, 'cp_search_items', true); $ cp_not_found = get_post_meta ($ post-> ID, 'cp_not_found', true); $ cp_not_found_in_trash = get_post_meta ($ post-> ID, 'cp_not_found_in_trash', true); $ cp_parent_item_colon = get_post_meta ($ post-> ID, 'cp_parent_item_colon', true); update_post_meta ($ post-> ID, 'cp_public', $ _POST ['cp_public'], $ cp_public); update_post_meta ($ post-> ID, 'cp_publicly_queryable', $ _POST ['cp_publicly_queryable'], $ cp_publicly_queryable); update_post_meta ($ post-> ID, 'cp_show_ui', $ _POST ['cp_show_ui'], $ cp_show_ui); update_post_meta ($ post-> ID, 'cp_show_in_menu', $ _POST ['cp_show_in_menu'], $ cp_show_in_menu); update_post_meta ($ post-> ID, 'cp_query_var', $ _POST ['cp_query_var'], $ cp_query_var); update_post_meta ($ post-> ID, 'cp_rewrite', $ _POST ['cp_rewrite'], $ cp_rewrite); update_post_meta ($ post-> ID, 'cp_has_archive', $ _POST ['cp_has_archive'], $ cp_has_archive); update_post_meta ($ post-> ID, 'cp_hierarchical', $ _POST ['cp_hierarchical'], $ cp_hierarchical); update_post_meta ($ post-> ID, 'cp_capability_type', $ _POST ['cp_capability_type'], $ cp_capability_type); update_post_meta ($ post-> ID, 'cp_menu_position', $ _POST ['cp_menu_position'], $ cp_menu_position); update_post_meta ($ post-> ID, 'cp_s_title', $ _POST ['cp_s_title'], $ cp_s_title); update_post_meta ($ post-> ID, 'cp_s_editor', $ _POST ['cp_s_editor'], $ cp_s_editor); update_post_meta ($ post-> ID, 'cp_s_author', $ _POST ['cp_s_author'], $ cp_s_author); update_post_meta ($ post-> ID, 'cp_s_thumbnail', $ _POST ['cp_s_thumbnail'], $ cp_s_thumbnail); update_post_meta ($ post-> ID, 'cp_s_excerpt', $ _POST ['cp_s_excerpt'], $ cp_s_excerpt); update_post_meta ($ post-> ID, 'cp_s_comments', $ _POST ['cp_s_comments'], $ cp_s_comments); update_post_meta ($ post-> ID, 'cp_general_name', $ _POST ['cp_general_name'], $ cp_general_name); update_post_meta ($ post-> ID, 'cp_singular_name', $ _POST ['cp_singular_name'], $ cp_singular_name); update_post_meta ($ post-> ID, 'cp_add_new', $ _POST ['cp_add_new'], $ cp_add_new); update_post_meta ($ post-> ID, 'cp_add_new_item', $ _POST ['cp_add_new_item'], $ cp_add_new_item); update_post_meta ($ post-> ID, 'cp_edit_item', $ _POST ['cp_edit_item'], $ cp_edit_item); update_post_meta ($ post-> ID, 'cp_new_item', $ _POST ['cp_new_item'], $ cp_new_item); update_post_meta ($ post-> ID, 'cp_all_items', $ _POST ['cp_all_items'], $ cp_all_items); update_post_meta ($ post-> ID, 'cp_view_item', $ _POST ['cp_view_item'], $ cp_view_item); update_post_meta ($ post-> ID, 'cp_search_items', $ _POST ['cp_search_items'], $ cp_search_items); update_post_meta ($ post-> ID, 'cp_not_found', $ _POST ['cp_not_found'], $ cp_not_found); update_post_meta ($ post-> ID, 'cp_not_found_in_trash', $ _POST ['cp_not_found_in_trash'], $ cp_not_found_in_trash); update_post_meta ($ post-> ID, 'cp_parent_item_colon', $ _POST ['cp_parent_item_colon'], $ cp_parent_item_colon); 

Per prima cosa, estraiamo le variabili come abbiamo fatto precedentemente nella parte superiore della funzionalità del meta-box, e quindi le aggiorniamo usando il update_post_meta funzione, che diamo i parametri: post id, meta key name, nuovo valore, vecchio valore. Voilà, abbiamo aggiornato il campo personalizzato di un valore. Abbiamo bisogno di ripetere il processo come vedi nell'esempio sopra per coprire tutti i valori e tutte le opzioni di cui abbiamo bisogno.

Questo è tutto per il salvataggio dei dati.


Passaggio 6 Creazione dei tipi di post personalizzati dinamici

Quindi, come prendiamo tutti quei dati che abbiamo appena salvato e rendendoli dinamici? come lo usiamo per generare tipi di post personalizzati? Semplice, richiediamo il tipo di post personalizzato principale e per ogni post del ciclo estrapiamo i campi personalizzati e inseriamo i dati all'interno dell'array di conseguenza.

Diamo un'occhiata a come farlo. Innanzitutto, inseriamo questo codice proprio sotto il codice del tipo di post personalizzato principale, all'interno di init_custom_post_types funzione. E così, iniziamo creando la query:

 $ the_query = new WP_Query (array ('post_type' => array ('CPT'))); while ($ the_query-> have_posts ()): $ the_query-> the_post ();

Creiamo una variabile denominata $ the_query in cui memorizziamo il contenuto della funzione di classe principale invocata WP_Query con i parametri di una matrice che ha il valore di post_type il nome del principale tipo di messaggio personalizzato, vale a dire, CPT. Quindi iniziamo il ciclo. All'interno del ciclo generiamo le variabili che vogliamo mantenere i valori di cui abbiamo bisogno utilizzando lo stesso approccio per estrarli dal database come campi personalizzati:

 $ globale post; // ************************* ottiene i valori $ cp_public = get_post_meta ($ post-> ID, 'cp_public', true); if ($ cp_public == "on") $ cp_public = true;  else $ cp_public = false;  $ cp_publicly_queryable = get_post_meta ($ post-> ID, 'cp_publicly_queryable', true); if ($ cp_publicly_queryable == "on") $ cp_publicly_queryable = true;  else $ cp_publicly_queryable = false;  $ cp_show_ui = get_post_meta ($ post-> ID, 'cp_show_ui', true); if ($ cp_show_ui == "on") $ cp_show_ui = true;  else $ cp_show_ui = false;  $ cp_show_in_menu = get_post_meta ($ post-> ID, 'cp_show_in_menu', true); // if ($ cp_show_in_menu == "on") $ cp_show_in_menu = true;  else $ cp_show_in_menu = false;  $ cp_query_var = get_post_meta ($ post-> ID, 'cp_query_var', true); // if ($ cp_query_var == "on") $ cp_query_var = true;  else $ cp_query_var = falso;  $ cp_rewrite = get_post_meta ($ post-> ID, 'cp_rewrite', vero); // if ($ cp_rewrite == "on") $ cp_rewrite = true;  else $ cp_rewrite = false;  $ cp_has_archive = get_post_meta ($ post-> ID, 'cp_has_archive', true); // if ($ cp_has_archive == "on") $ cp_has_archive = true;  else $ cp_has_archive = false;  $ cp_hierarchical = get_post_meta ($ post-> ID, 'cp_hierarchical', true); if ($ cp_hierarchical == "on") $ cp_hierarchical = true;  else $ cp_hierarchical = false;  $ cp_capability_type = get_post_meta ($ post-> ID, 'cp_capability_type', true); $ cp_menu_position = get_post_meta ($ post-> ID, 'cp_menu_position', vero); $ cp_s_title = get_post_meta ($ post-> ID, 'cp_s_title', true); if ($ cp_s_title == "on") $ cp_s [] = 'titolo';  $ cp_s_editor = get_post_meta ($ post-> ID, 'cp_s_editor', true); if ($ cp_s_editor == "on") $ cp_s [] = 'editor';  $ cp_s_author = get_post_meta ($ post-> ID, 'cp_s_author', true); if ($ cp_s_author == "on") $ cp_s [] = 'autore';  $ cp_s_thumbnail = get_post_meta ($ post-> ID, 'cp_s_thumbnail', true); if ($ cp_s_thumbnail == "on") $ cp_s [] = 'miniatura';  $ cp_s_excerpt = get_post_meta ($ post-> ID, 'cp_s_excerpt', true); if ($ cp_s_excerpt == "on") array_push ($ cp_s, 'excerpt');  $ cp_s_comments = get_post_meta ($ post-> ID, 'cp_s_comments', true); if ($ cp_s_comments == "on") array_push ($ cp_s, 'comments');  $ cp_general_name = get_post_meta ($ post-> ID, 'cp_general_name', true); $ cp_singular_name = get_post_meta ($ post-> ID, 'cp_singular_name', true); $ cp_add_new = get_post_meta ($ post-> ID, 'cp_add_new', vero); $ cp_add_new_item = get_post_meta ($ post-> ID, 'cp_add_new_item', true); $ cp_edit_item = get_post_meta ($ post-> ID, 'cp_edit_item', vero); $ cp_new_item = get_post_meta ($ post-> ID, 'cp_new_item', true); $ cp_all_items = get_post_meta ($ post-> ID, 'cp_all_items', vero); $ cp_view_item = get_post_meta ($ post-> ID, 'cp_view_item', vero); $ cp_search_items = get_post_meta ($ post-> ID, 'cp_search_items', true); $ cp_not_found = get_post_meta ($ post-> ID, 'cp_not_found', true); $ cp_not_found_in_trash = get_post_meta ($ post-> ID, 'cp_not_found_in_trash', true); $ cp_parent_item_colon = get_post_meta ($ post-> ID, 'cp_parent_item_colon', true);

Perché siamo ora all'interno del ciclo di query, possiamo usare un globale $ postale variabile per ottenere l'ID di cui abbiamo bisogno. Inoltre potresti aver notato alcune condizioni impostate da un se qua e là per la maggior parte delle variabili. Questi esistono perché il vero valore booleano o determinati altri valori stringa devono essere convertiti correttamente dal "sopra" stringa che rappresentano nel vero valore booleano che devono essere.

Dopo aver risolto tutto, inseriremo le variabili nell'array dell'implementazione dinamica del tipo di post personalizzato:

 $ labels = array ('name' => _x (get_the_title ($ post-> ID), 'post tipo nome generale'), 'singular_name' => _x ($ cp_singular_name, 'post type singular name'), 'add_new' => _x ($ cp_add_new, get_the_title ($ post-> ID)), 'add_new_item' => __ ($ cp_add_new_item), 'edit_item' => __ ($ cp_edit_item), 'new_item' => __ ($ cp_new_item), 'all_items' => __ ($ cp_all_items), 'view_item' => __ ($ cp_view_item), 'search_items' => __ ($ cp_search_items), 'not_found' => __ ($ cp_not_found), 'not_found_in_trash' => __ ($ cp_not_found_in_trash), 'parent_item_colon' => __ ($ cp_parent_item_colon), 'menu_name' => __ (get_the_title ($ post-> ID))); $ args = array ('labels' => $ labels, 'public' => $ cp_public, 'public_queryable' => $ cp_publicly_queryable, 'show_ui' => $ cp_show_ui, 'show_in_menu' => $ cp_show_in_menu, 'query_var' => $ cp_query_var, 'rewrite' => $ cp_rewrite, 'capability_type' => 'post', 'has_archive' => $ cp_has_archive, 'hierarchical' => $ cp_hierarchical, 'menu_position' => $ cp_menu_position, 'supports' => $ cp_s); register_post_type (get_the_title ($ post-> ID), $ args); ENDWHILE;

Il titolo del post viene utilizzato come nome principale del tipo di post personalizzato e le impostazioni della meta-box come il resto delle proprietà. Questo è tutto, tutto ciò che è necessario per implementare i tipi di post personalizzati dinamici in WordPress. Quello che potresti aver notato è che chiudiamo anche il loop alla fine del codice precedente.


Conclusione

I tipi di post personalizzati non sono difficili da gestire e sono piuttosto flessibili in qualsiasi funzionalità che potresti richiedere anche con altri hook, filtri o funzioni personalizzate. In questo tutorial siamo riusciti a coprire un'implementazione dinamica specifica della gestione dei tipi di post personalizzati in un singolo plug-in, spiegato, con codice e file, per le tue esigenze. Ovviamente, l'uso del tipo di post personalizzato non limita questi esempi in quanto può essere utilizzato in molti tipi di implementazioni, plugin e temi aggrovigliati in molti hook, interrogati in modi diversi, filtrati o manipolati in molti modi.