Câmp de ordonare pentru tipuri de postări personalizate

18 sept. 2012, 16:50:22
Vizualizări: 50.8K
Voturi: 21

Într-un tip de postare personalizat, există vreo modalitate de a include câmpul "order" care este disponibil pentru pagini?

Există vreo logică incorporată care să prevină valorile duplicate în câmpul "order"?

Ideea este de a putea sorta un tip de postare personalizat după o ordine specificată de utilizator, apoi alfabetic după un câmp personalizat bazat pe șiruri de caractere.

1
Toate răspunsurile la întrebare 2
5
38

Când declarați tipul de postare personalizat folosind funcția register_post_type, trebuie să adăugați 'page-attributes' în câmpul supports, ca în exemplul următor:

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

Va trebui să adăugați și orice alte meta box-uri suportate în câmpul 'supports', consultați https://developer.wordpress.org/reference/functions/register_post_type/ pentru mai multe informații despre câmpurile register_post_type.

De asemenea, din câte știu eu, nu există nicio metodă încorporată pentru a preveni două postări cu aceeași ordine, acest lucru se datorează faptului că puteți crea sub-ordonare bazate pe ierarhie (astfel încât un grup de pagini copil poate avea o ordonare diferită față de altul).

18 sept. 2012 16:58:39
Comentarii

folosirea page-attributes afișează atât câmpul order cât și câmpul parent. Cum pot elimina câmpul parent?

Force Flow Force Flow
19 sept. 2012 22:21:07

Nu mai contează. Setarea hierarchical la false îl elimină.

Force Flow Force Flow
20 sept. 2012 01:03:11

Greșeala mea, nu am realizat că nu doreai și părinții paginilor. Voi actualiza răspunsul meu pentru a-l exclude.

Dave Hunt Dave Hunt
20 sept. 2012 17:02:31

Salut. Am acest cod dar nu văd nimic:

```

// 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 iul. 2017 12:41:39

@Sylar Îmi dau seama că e foarte târziu, dar mi se pare că 'supports' => $supports_args, 'hierarchical' => false se află în partea greșită a array-ului. În exemplul tău sunt cuibate sub array-ul labels, dar ar trebui să fie în array-ul de bază, la același nivel cu 'public' => true

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

În plus față de răspunsul lui @Dave-Hunt, poți adăuga și un filtru, precum cel de mai jos, pentru a defini o ordine personalizată - în acest caz, alfabetic după titlu. (Codul mulțumită postării de pe blogul lui Mark Leong.) Elimină verificarea is_admin(), dacă dorești ca ordinea personalizată să fie aplicată și în front-end.

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

    // Obține tipul de post din interogare
    $post_type = $wp_query->query['post_type'];

    if ( $post_type == 'POST_TYPE') {

      // Valoarea 'orderby' poate fi orice nume de coloană
      $wp_query->set('orderby', 'title');

      // Valoarea 'order' poate fi ASC sau DESC
      $wp_query->set('order', 'ASC');
    }
  }
}
add_action('pre_get_posts', 'set_custom_post_types_admin_order');

Actualizare

Pentru validare pre-salvare, vezi acest răspuns: https://wordpress.stackexchange.com/a/40095/4645 unde sunt discutate opțiunile tale. Practic, se reduce la jQuery personalizat, deoarece WordPress nu are hook-uri pre-salvare.

De asemenea (repetând aici comentariul meu anterior pentru referință viitoare), iată cum poți expune câmpul 'menu order' în administrație, astfel încât să poată fi editat de utilizator, așa cum este pentru pagini: Adăugarea coloanei 'menu order' în ecranul de administrare al tipului de post personalizat

18 sept. 2012 17:04:32