Type de publication personnalisé - champ de commande

14

Dans un type de publication personnalisé, existe-t-il un moyen d'inclure le champ "commande" disponible pour les pages?

Existe-t-il une logique intégrée qui empêche les valeurs en double dans le champ "ordre"?

L'idée est de pouvoir trier un type de publication personnalisé par un ordre spécifié par l'utilisateur, puis par ordre alphabétique par un champ personnalisé basé sur une chaîne.

Flux de force
la source

Réponses:

25

Lorsque vous déclarez votre type de publication personnalisé à l'aide de la fonction register_post_type, vous devez ajouter des «attributs de page» au champ de prise en charge, comme dans l'exemple suivant:

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

Vous devrez également ajouter toutes les autres métadonnées prises en charge au champ «supports», voir http://codex.wordpress.org/Function_Reference/register_post_type pour plus d'informations sur les champs register_post_type.

Aussi pour autant que je sache, il n'y a pas de moyen intégré pour empêcher deux du même ordre, c'est parce que vous pouvez créer un sous-ordre basé sur la hiérarchie (donc un groupe de pages enfants peut avoir un ordre différent d'un autre)

Dave Hunt
la source
l'utilisation page-attributesprésente à la fois le orderchamp et le parentchamp. Comment puis-je me débarrasser du parentterrain?
Force Flow
Ça ne fait rien. Mettre hierarchicalà faux s'en débarrasse.
Force Flow
Mon mauvais, je n'avais pas réalisé que tu ne voulais pas aussi la page des parents. Je mettrai à jour ma réponse pour l'exclure.
Dave Hunt
Salut. J'ai ce code mais je ne vois rien: `` `// 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 Je me rends compte que c'est très tard, mais il me semble que votre 'supports' => $ supports_args, 'hierarchical' => false est dans la mauvaise partie du tableau. Vous l'avez imbriqué sous le tableau des étiquettes dans votre exemple, il devrait être dans le tableau de base, au même niveau que «public» => true
Dave Hunt
4

En plus de la réponse de @ Dave-Hunt, vous pouvez également ajouter un filtre, tel que le suivant, pour définir une commande personnalisée - dans ce cas, alphabétique par titre. (Code grâce au billet de blog de Mark Leong. ) Retirez la is_admin()coche, si vous voulez également que vous personnalisiez order_by sur le front-end.

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

    // Récupère le type de message à partir de la requête
    $ post_type = $ wp_query-> query ['post_type'];

    if ($ post_type == 'POST_TYPE') {

      // La valeur 'orderby' peut être n'importe quel nom de colonne
      $ wp_query-> set ('orderby', 'title');

      // la valeur de la commande peut être ASC ou DESC
      $ wp_query-> set ('order', 'ASC');
    }
  }
}
add_action ('pre_get_posts', 'set_custom_post_types_admin_order');

Mise à jour

Pour la validation préalable à l'enregistrement, consultez cette réponse: /wordpress//a/40095/4645 où vos options sont discutées. Fondamentalement, cela revient à jQuery personnalisé, car WordPress n'a pas de hooks de pré-sauvegarde.

Aussi (en dupliquant mon commentaire précédent ici pour référence future), voici comment exposer le champ `` ordre de menu '' dans l'admin, donc il est modifiable par l'utilisateur, comme c'est le cas pour les pages: Ajout de la colonne `` ordre de menu '' à l'écran d'administration de type de message personnalisé

marfarma
la source