Tengo un tipo de publicación personalizado llamado domicile
. Cada publicación (domicilio) tiene un propietario (no el autor ). Los propietarios son usuarios con un rol personalizado. Almaceno el ID de usuario como un valor meta de publicación ( dmb_owner
) para el tipo de publicación domicile
.
¿Cómo ordeno la tabla de la lista ( wp-admin/edit.php?post_type=domicile
) por los nombres para mostrar de los propietarios?
El código relevante de mi clase, setup_columns()
se llama en init
:
/**
* Manage columns for List Table.
*
* @wp-hook init
* @return void
*/
protected function setup_columns()
{
add_filter(
"manage_edit-{$this->post_type}_columns",
array ( $this, 'set_column_header' )
);
add_action(
"manage_{$this->post_type}_posts_custom_column",
array ( $this, 'render_columns' ),
10,
2
);
add_filter(
"manage_edit-{$this->post_type}_sortable_columns",
array ( $this, 'set_sortable_columns' )
);
add_filter(
'request',
array ( $this, 'prepare_orderby' )
);
}
/**
* Register column headers.
*
* @wp-hook manage_edit-{$this->post_type}_columns
* @param array $columns
* @return array
*/
public function set_column_header( $columns )
{
unset (
$columns['author'],
$columns['comments'],
$columns['date']
);
$columns['owner'] = __( 'Owner', 't5_domicile_manager' );
return $columns;
}
/**
* Display cell content.
*
* @wp-hook manage_{$this->post_type}_posts_custom_column
* @param string $column_name
* @param int $post_id
* @return void
*/
public function render_columns( $column_name, $post_id = 0 )
{
if ( 'owner' === $column_name )
{
$owner_id = get_post_meta( $post_id, 'dmb_owner', TRUE );
if ( $owner_id )
{
$owner = get_user_by( 'id', $owner_id );
print $owner ? $owner->display_name : '<i>not set</i>';
}
}
}
/**
* Register sortable columns
*
* @wp-hook manage_edit-{$this->post_type}_sortable_columns
* @param array $columns
* @return array
*/
public function set_sortable_columns( $columns )
{
$columns['owner'] = 'owner';
return $columns;
}
/**
* Set custom sort order.
*
* @wp-hook request
* @param array $vars
* @return array
*/
public function prepare_orderby( $vars )
{
if ( isset ( $vars['orderby'] ) && 'owner' == $vars['orderby'] )
{
$vars = array_merge(
$vars,
array (
'meta_key' => 'dmb_owner',
'orderby' => 'meta_value_num'
)
);
}
return $vars;
}
Esto ... funciona, pero obviamente está mal, porque se ordena por la ID almacenada. Tengo que filtrar la consulta, pero no estoy seguro de cómo exactamente debo hacer eso.
Lo siento por el título, pero quiero asegurarme de que se encontrará. Busqué mucho y no encontré nada útil.