Tipo di posta personalizzato - campo dell'ordine


14

In un tipo di post personalizzato, c'è un modo per includere il campo "ordine" disponibile per le pagine?

Esiste una logica incorporata che impedisce valori duplicati nel campo "ordine"?

L'idea è quella di poter ordinare un tipo di post personalizzato in base a un ordine specificato dall'utente, quindi in ordine alfabetico in base a un campo personalizzato basato su stringa.


Risposte:


25

Quando dichiari il tuo tipo di post personalizzato utilizzando la funzione register_post_type, devi aggiungere "attributi di pagina" al campo di supporto, come nell'esempio seguente:

register_post_type('myposttype', array(
    'supports' => array('title', 'editor', 'page-attributes'),
    'hierarchical' => false
));

Dovrai aggiungere qualsiasi altra meta box supportata anche al campo "support", vedi http://codex.wordpress.org/Function_Reference/register_post_type per maggiori informazioni sui campi register_post_type.

Inoltre, per quanto ne so, non esiste alcun modo integrato per impedire due dello stesso ordine, questo perché è possibile creare un ordine secondario basato sull'erirarchia (quindi un gruppo di pagine secondarie può avere un ordine diverso rispetto a un altro)


usando page-attributespresenta sia il ordercampo che il parentcampo. Come mi libero dal parentcampo?
Force Flow

Non importa. L'impostazione hierarchicalsu false lo elimina.
Force Flow

Mio male, non avevo capito che non volevi anche i genitori della pagina. Aggiornerò la mia risposta per escluderla.
Dave Hunt,

Ciao. Ho questo codice ma non vedo nulla: `` // Servizio Post personalizzato Tipo add_action ('init', 'create_post_type'); funzione create_post_type () {$ supports_args = array ('title', 'editor', 'page-attributi'); register_post_type ('service', array ('labels' => array ('name' => __ ('Services'), 'singular_name' => __ ('Service'), 'supports' => $ supports_args, 'hierarchical' => false), 'public' => true, 'has_archive' => true, // 'menu_position' => 2)); } ``
Sylar,

@Sylar Mi rendo conto che è molto tardi, ma mi sembra che il tuo 'supports' => $ supports_args, 'hierarchical' => false sia nella parte sbagliata dell'array. Lo hai annidato sotto l'array di etichette nel tuo esempio, dovrebbe essere nell'array di base, allo stesso livello di 'public' => true
Dave Hunt

4

Oltre alla risposta di @ Dave-Hunt, puoi anche aggiungere un filtro, come il seguente, per definire un ordine personalizzato - in questo caso, in ordine alfabetico per titolo. (Codice grazie al post sul blog di Mark Leong. ) Rimuovi il is_admin()segno di spunta, se vuoi anche un ordine personalizzato sul front-end.

funzione set_custom_post_types_admin_order ($ wp_query) {
  if (is_admin ()) {

    // Ottieni il tipo di post dalla query
    $ post_type = $ wp_query-> query ['post_type'];

    if ($ post_type == 'POST_TYPE') {

      // Il valore 'orderby' può essere qualsiasi nome di colonna
      $ wp_query-> set ('orderby', 'title');

      // Il valore 'ordine' può essere ASC o DESC
      $ wp_query-> set ('order', 'ASC');
    }
  }
}
add_action ('pre_get_posts', 'set_custom_post_types_admin_order');

Aggiornare

Per la convalida pre-salvataggio, vedere questa risposta: /wordpress//a/40095/4645 dove vengono discusse le opzioni. Fondamentalmente, si tratta di jQuery personalizzato, poiché WordPress non ha alcun hook di pre-salvataggio.

Inoltre (duplicando il mio commento precedente qui per riferimento futuro), ecco come esporre il campo "ordine menu" nell'amministratore, quindi è modificabile dall'utente, come lo è per le pagine: aggiunta della colonna "ordine menu" alla schermata di amministrazione del tipo di messaggio personalizzato

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.