Tipo de publicación personalizada - campo de orden

18 sept 2012, 16:50:22
Vistas: 50.8K
Votos: 21

En un tipo de publicación personalizada, ¿hay alguna manera de incluir el campo "order" que está disponible para las páginas?

¿Existe alguna lógica incorporada que evite valores duplicados en el campo "order"?

La idea es poder ordenar un tipo de publicación personalizada mediante un orden especificado por el usuario, y luego alfabéticamente por un campo personalizado basado en texto.

1
Todas las respuestas a la pregunta 2
5
38

Al declarar tu tipo de publicación personalizada usando la función register_post_type, debes agregar 'page-attributes' al campo de soporte, como en el siguiente ejemplo:

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

También necesitarás agregar cualquier otra caja meta soportada al campo 'supports', consulta https://developer.wordpress.org/reference/functions/register_post_type/ para más información sobre los campos de register_post_type.

Además, hasta donde sé, no hay una forma incorporada de prevenir dos órdenes iguales, esto se debe a que puedes crear sub-ordenamientos basados en jerarquía (así que un grupo de páginas hijas puede tener un orden diferente a otro).

18 sept 2012 16:58:39
Comentarios

usar page-attributes muestra tanto el campo order como el campo parent. ¿Cómo puedo eliminar el campo parent?

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

No importa. Configurar hierarchical como false lo elimina.

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

Mi error, no me di cuenta de que tampoco querías los padres de página. Actualizaré mi respuesta para excluirlo.

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

Hola. Tengo este código pero no veo nada:

```

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

@Sylar Me doy cuenta de que es muy tarde, pero me parece que tu 'supports' => $supports_args, 'hierarchical' => false está en la parte equivocada del array. Lo tienes anidado dentro del array de labels en tu ejemplo, debería estar en el array base, al mismo nivel que 'public' => true

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

Además de la respuesta de @Dave-Hunt, también puedes agregar un filtro, como el siguiente, para definir un orden personalizado - en este caso, alfabético por título. (Código gracias al post del blog de Mark Leong). Elimina la verificación is_admin() si deseas que tu orden personalizado también se aplique en el front-end.

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

    // Obtener el tipo de publicación desde la consulta
    $post_type = $wp_query->query['post_type'];

    if ( $post_type == 'POST_TYPE') {

      // El valor 'orderby' puede ser cualquier nombre de columna
      $wp_query->set('orderby', 'title');

      // El valor 'order' puede ser ASC o DESC
      $wp_query->set('order', 'ASC');
    }
  }
}
add_action('pre_get_posts', 'set_custom_post_types_admin_order');

Actualización

Para validación antes de guardar, consulta esta respuesta: https://wordpress.stackexchange.com/a/40095/4645 donde se discuten tus opciones. Básicamente, se reduce a jQuery personalizado, ya que WordPress no tiene hooks antes de guardar.

También (duplicando mi comentario anterior aquí para referencia futura), aquí está cómo exponer el campo 'orden del menú' en el admin, para que sea editable por el usuario, como lo es para páginas: Agregar columna 'orden del menú' a la pantalla de admin de tipos de publicación personalizados

18 sept 2012 17:04:32