Tipo de publicación personalizada: campo de pedido

14

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

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

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

Flujo de fuerza
fuente

Respuestas:

25

Al declarar su tipo de publicación personalizada utilizando la función register_post_type, debe agregar 'atributos de página' al campo de soporte, como en el siguiente ejemplo:

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

Deberá agregar cualquier otro cuadro meta también al campo 'apoyos', consulte http://codex.wordpress.org/Function_Reference/register_post_type para obtener más información sobre los campos register_post_type.

Además, por lo que sé, no hay ninguna forma integrada para evitar dos del mismo orden, esto se debe a que puede crear subordenes basadas en la jerarquía (por lo que un grupo de páginas secundarias puede tener un orden diferente que otro)

Dave Hunt
fuente
El uso page-attributespresenta tanto el ordercampo como el parentcampo. ¿Cómo me deshago del parentcampo?
Force Flow
No importa. Establecer hierarchicalen falso lo elimina.
Force Flow
Lo malo es que no me di cuenta de que tampoco querías la página de los padres. Actualizaré mi respuesta para excluirla.
Dave Hunt
Hola. Tengo este código pero no veo nada: `` `// Tipo de publicación personalizada del servicio add_action ('init', 'create_post_type'); function create_post_type () {$ supports_args = array ('título', 'editor', 'atributos de página'); register_post_type ('service', array ('labels' => array ('name' => __ ('Services'), 'singular_name' => __ ('Service'), 'admite' => $ supports_args, 'jerárquico' => false), 'public' => true, 'has_archive' => true, // 'menu_position' => 2)); } `` `
Sylar
@ Sylar Me doy cuenta de que esto es muy tarde, pero me parece que su 'soporta' => $ supports_args, 'jerárquico' => falso está en la parte incorrecta de la matriz. Lo tiene anidado debajo de la matriz de etiquetas en su ejemplo, debe estar en la matriz base, al mismo nivel que 'public' => true
Dave Hunt
4

Además de la respuesta de @ Dave-Hunt, también puede agregar un filtro, como el siguiente, para definir un orden personalizado, en este caso, alfabético por título. (Codifique gracias a la publicación del blog de Mark Leong ) . Elimine el is_admin()cheque, si desea personalizar order_by también en el front-end.

función set_custom_post_types_admin_order ($ wp_query) {
  if (is_admin ()) {

    // Obtener el tipo de publicación de 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 'orden' puede ser ASC o DESC
      $ wp_query-> set ('orden', 'ASC');
    }
  }
}
add_action ('pre_get_posts', 'set_custom_post_types_admin_order');

Actualizar

Para la validación previa al guardado, consulte esta respuesta: /wordpress//a/40095/4645 donde se analizan sus opciones. Básicamente, se trata de jQuery personalizado, ya que WordPress no tiene ningún gancho de pre-guardado.

Además (duplicando mi comentario anterior aquí para referencia futura), aquí se explica cómo exponer el campo 'orden de menú' en el administrador, para que sea editable por el usuario, como lo es para las páginas: Agregar columna 'orden de menú' a la pantalla de administración de tipo de publicación personalizada

marfarma
fuente