web-dev-qa-db-fra.com

Le type de message personnalisé 'orderby' => 'meta_value' ne fonctionne pas

J'ai un type de publication personnalisé appelé Membre. J'ai ajouté du code à mon fichier functions.php pour ajouter quelques en-têtes de colonne personnalisés (qui fonctionnent) pour Prénom et nom et Type de membre, mais je ne parviens pas à obtenir la colonne post_title par défaut. trier de AZ. Je suis sûr que cela a quelque chose à voir avec title vs post_title ou quelque chose mais c'est nouveau pour moi. Qu'est-ce que je fais mal?

/*add custom columns to the member post type*/
add_filter( 'manage_edit-member_columns', 'my_edit_member_columns' );

function my_edit_member_columns( $columns ) {

    $columns = array(
        'cb' => '<input type="checkbox" />',
        'title' => __( 'Member' ),
        'first_name' => __( 'First' ),
        'last_name' => __( 'Last' ),
        'member_type' => __( 'Member Type' ),
        'date' => __( 'Date' )
    );

    return $columns;
}

/*add hooks to add content to the columns*/
add_action( 'manage_member_posts_custom_column', 'my_manage_member_columns', 10, 2 );

function my_manage_member_columns( $column, $post_id ) {
    global $post;

    switch( $column ) {

        /* If displaying the 'first name' column. */
        case 'first_name' :

            /* Get the post meta. */
            $first_name = get_post_meta( $post_id, 'first_name', true );

            /* If no first_name is found, output a default message. */
            if ( empty( $first_name ) )
                echo ( 'Unknown' );
            else
                printf( $first_name );
            break;

        /* If displaying the 'last_name' column. */
        case 'last_name' :

            /* Get the post meta. */
            $last_name = get_post_meta( $post_id, 'last_name', true );

            /* If no first_name is found, output a default message. */
            if ( empty( $last_name ) )
                echo ( 'Unknown' );
            else
                printf( $last_name );
            break;

        /* If displaying the 'member_type' column. */
        case 'member_type' :

            /* Get the post meta. */
            $member_type = get_post_meta( $post_id, 'member_type', true );

            /* If no first_name is found, output a default message. */
            if ( empty( $member_type ) )
                echo ( 'Unknown' );
            else
                printf( $member_type );
            break;
        /* Just break out of the switch statement for everything else. */
        default :
            break;
    }
}

//make the title sortable
add_filter( 'manage_edit-member_sortable_columns', 'my_member_sortable_columns' );

function my_member_sortable_columns( $columns ) {

    $columns['post_title'] = 'post_title';

    return $columns;
}

// now do the sorting of the member post type
// Only run our customization on the 'edit.php' page in the admin.
add_action( 'load-edit.php', 'my_edit_member_load' );

function my_edit_member_load() {
    add_filter( 'request', 'my_sort_member' );
}

/* Sorts the member. */
function my_sort_member( $vars ) {

    /* Check if we're viewing the 'member' post type. */
    if ( isset( $vars['post_type'] ) && 'member' == $vars['post_type'] ) {

        /* Check if 'orderby' is set to 'title'. */
        if ( isset( $vars['orderby'] ) && 'post_title' == $vars['orderby'] ) {

            /* Merge the query vars with our custom variables. */
            $vars = array_merge(
                $vars,
                array(
                    'meta_key' => 'post_title',
                    'orderby' => 'meta_value', /*use meta_value_num if the meta_key is numeric*/
                    'order' => 'asc'
                )
            );
        }
    }

    return $vars;
}
1
Renshi

Le titre de l'article n'est pas une méta-donnée, il se trouve dans la table principale de l'article. Vous pouvez commander par titre avec:

'orderby' => 'title'

Vous pouvez spécifier une clé/ordre méta par valeur méta si le champ était des données personnalisées stockées dans la table méta post.

2
Milo