Custom post type - campo ordinamento

18 set 2012, 16:50:22
Visualizzazioni: 50.8K
Voti: 21

In un custom post type, è possibile includere il campo "ordinamento" che è disponibile per le pagine?

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

L'idea è quella di poter ordinare un custom post type secondo un ordine specificato dall'utente, e successivamente in ordine alfabetico in base a un campo personalizzato basato su stringhe.

1
Tutte le risposte alla domanda 2
5
38

Quando dichiari il tuo custom post type utilizzando la funzione register_post_type, devi aggiungere 'page-attributes' al campo supports, come nell'esempio seguente:

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

Dovrai aggiungere anche altri meta box supportati al campo 'supports', consulta https://developer.wordpress.org/reference/functions/register_post_type/ per maggiori informazioni sui campi di register_post_type.

Inoltre, per quanto ne so, non esiste un modo integrato per prevenire due ordini uguali, questo perché puoi creare sotto-ordini basati sulla gerarchia (quindi un gruppo di pagine figlie può avere un ordinamento diverso da un altro).

18 set 2012 16:58:39
Commenti

usando page-attributes vengono mostrati sia il campo order che il campo parent. Come posso eliminare il campo parent?

Force Flow Force Flow
19 set 2012 22:21:07

Non importa. Impostando hierarchical a false si elimina.

Force Flow Force Flow
20 set 2012 01:03:11

Colpa mia, non avevo capito che non volevi neanche i genitori della pagina. Aggiornerò la mia risposta per escluderlo.

Dave Hunt Dave Hunt
20 set 2012 17:02:31

Ciao. Ho questo codice ma non vedo nulla:

```

// Service Custom Post Type add_action( 'init', 'create_post_type' ); function create_post_type() {

$supports_args = array( 'title', 'editor', 'page-attributes' ); 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
20 lug 2017 12:41:39

@Sylar Mi rendo conto che è molto tardi, ma mi sembra che il tuo 'supports' => $supports_args, 'hierarchical' => false si trovi nella parte sbagliata dell'array. Nel tuo esempio è annidato sotto l'array labels, dovrebbe invece essere nell'array base, allo stesso livello di 'public' => true

Dave Hunt Dave Hunt
14 mar 2018 19:43:27
0

Oltre alla risposta di @Dave-Hunt, puoi anche aggiungere un filtro, come il seguente, per definire un ordinamento personalizzato - in questo caso, alfabetico per titolo. (Codice grazie al post sul blog di Mark Leong.) Rimuovi il controllo is_admin() se desideri che il tuo order_by personalizzato sia applicato anche nel front-end.

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

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

    if ( $post_type == 'POST_TYPE') {

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

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

Aggiornamento

Per la validazione pre-salvataggio, consulta questa risposta: https://wordpress.stackexchange.com/a/40095/4645 dove vengono discusse le tue opzioni. Fondamentalmente, si riduce all'uso di jQuery personalizzato, poiché WordPress non dispone di hook pre-salvataggio.

Inoltre (duplicando qui il mio precedente commento per riferimento futuro), ecco come esporre il campo 'ordine del menu' nell'amministrazione, rendendolo modificabile dall'utente, come avviene per le pagine: Aggiungere la colonna 'ordine del menu' alla schermata di amministrazione del post type personalizzato

18 set 2012 17:04:32