web-dev-qa-db-fra.com

Type de message personnalisé: Ajoutez les liens "Édition | Édition rapide | Corbeille | Vue" à la date (si le titre n'est pas affiché dans la colonne)?

J'ai créé un type de message personnalisé pour mes "Témoignages", je n'ai pas besoin d'un titre, comment puis-je écrire une fonction qui ajoute le " Édition | Édition rapide | Corbeille | Vue " liens vers "date" si le titre n'est pas affiché dans la colonne.

J'utilise le plugin "Admin Columns" pour masquer les colonnes que je ne souhaite pas afficher.

 base 

J'essaie de réutiliser ce code de cette précédente question StackExchange ( Aucun lien Modifier/Supprimer pour le type de message personnalisé? ), mais j'ai déjà créé les champs "Auteur", etc.

L'utilisation de ce code donne ce résultat.

 result 

6
Josh

Ce n'est pas facile à faire car il n'y a pas de crochet pour ajouter les actions de lignes. Vous pouvez toutefois annuler l'inscription de la colonne de date et réinscrire votre propre colonne de date avec les actions de ligne ajoutées. Un peu hacky malheureusement.

J'ai essayé de m'assurer que le code suivant était destiné au type de message 'testimonials'

Commencez par enregistrer votre nouvelle colonne de date et annulez l'inscription de l'ancien: (utilisez manage_{post_type}_posts_columns hook)

add_filter('manage_testimonials_posts_columns', 'my_custom_date_column_head'); 
function my_custom_date_column_head($columns) {  
    $columns['date2'] = 'Date';  
    unset( $columns['date'] );
    return $columns;  
}

Ensuite, rendez votre nouvelle colonne de date triable (par 'date'). Utilisez le crochet manage_edit-{post_type}_sortable_columns)

add_filter( 'manage_edit-testimonials_sortable_columns', 'my_custom_date_column_sort' );
function my_custom_date_column_sort( $columns ) {
    $columns['date2'] = 'date';
    return $columns;
}

Vient maintenant le bit amusant - afficher le contenu de la colonne. J'ai à peu près copié et collé ce que WordPress fait pour remplir la colonne de date, puis ajouté les actions à la fin.

Utilisez le crochet manage_{post_type}_posts_custom_columns)

add_action( "manage_testimonials_posts_custom_column", 'my_custom_date_column_content',10,2);
function my_custom_date_column_content($column, $post_id ){
    global $post,$mode;

    if( 'date2' != $column )
        return;

    //**** Display default content of date column *******//

    if ( '0000-00-00 00:00:00' == $post->post_date ) {
        $t_time = $h_time = __( 'Unpublished' );
        $time_diff = 0;
    } else {
        $t_time = get_the_time( __( 'Y/m/d g:i:s A' ) );
        $m_time = $post->post_date;
        $time = get_post_time( 'G', true, $post );

        $time_diff = time() - $time;

        if ( $time_diff > 0 && $time_diff < 24*60*60 )
            $h_time = sprintf( __( '%s ago' ), human_time_diff( $time ) );
        else
            $h_time = mysql2date( __( 'Y/m/d' ), $m_time );
    }

    if ( 'excerpt' == $mode )
        echo apply_filters( 'post_date_column_time', $t_time, $post, $column, $mode );
    else
        echo '<abbr title="' . $t_time . '">' . apply_filters( 'post_date_column_time', $h_time, $post, $column, $mode ) . '</abbr>';

    echo '<br />';

    if ( 'publish' == $post->post_status ) {
        _e( 'Published' );

    } elseif ( 'future' == $post->post_status ) {
        if ( $time_diff > 0 )
            echo '<strong class="attention">' . __( 'Missed schedule' ) . '</strong>';
        else
        _e( 'Scheduled' );

    } else {
        _e( 'Last Modified' );
    }

    //***** END  -- Display default content of date column *******//


    //***** START  -- Our actions  *******//

    //First set up some variables
    $actions = array();
    $post_type_object = get_post_type_object( $post->post_type );
    $can_edit_post = current_user_can( $post_type_object->cap->edit_post, $post->ID );


    //Actions to edit
    if ( $can_edit_post && 'trash' != $post->post_status ) {
        $actions['edit'] = '<a href="' . get_edit_post_link( $post->ID, true ) . '" title="' . esc_attr( __( 'Edit this item' ) ) . '">' . __( 'Edit' ) . '</a>';
        $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="' . esc_attr( __( 'Edit this item inline' ) ) . '">' . __( 'Quick&nbsp;Edit' ) . '</a>';
    }

    //Actions to delete/trash
    if ( current_user_can( $post_type_object->cap->delete_post, $post->ID ) ) {
        if ( 'trash' == $post->post_status )
            $actions['untrash'] = "<a title='" . esc_attr( __( 'Restore this item from the Trash' ) ) . "' href='" . wp_nonce_url( admin_url( sprintf( $post_type_object->_edit_link . '&amp;action=untrash', $post->ID ) ), 'untrash-' . $post->post_type . '_' . $post->ID ) . "'>" . __( 'Restore' ) . "</a>";

        elseif ( EMPTY_TRASH_DAYS )
            $actions['trash'] = "<a class='submitdelete' title='" . esc_attr( __( 'Move this item to the Trash' ) ) . "' href='" . get_delete_post_link( $post->ID ) . "'>" . __( 'Trash' ) . "</a>";

        if ( 'trash' == $post->post_status || !EMPTY_TRASH_DAYS )
            $actions['delete'] = "<a class='submitdelete' title='" . esc_attr( __( 'Delete this item permanently' ) ) . "' href='" . get_delete_post_link( $post->ID, '', true ) . "'>" . __( 'Delete Permanently' ) . "</a>";
    }

    //Actions to view/preview
        if ( in_array( $post->post_status, array( 'pending', 'draft', 'future' ) ) ) {
            if ( $can_edit_post )
                $actions['view'] = '<a href="' . esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) . '" title="' . esc_attr( sprintf( __( 'Preview &#8220;%s&#8221;' ), $title ) ) . '" rel="permalink">' . __( 'Preview' ) . '</a>';

        } elseif ( 'trash' != $post->post_status ) {
                $actions['view'] = '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( sprintf( __( 'View &#8220;%s&#8221;' ), $title ) ) . '" rel="permalink">' . __( 'View' ) . '</a>';
        }

    //***** END  -- Our actions  *******//

    //Echo the 'actions' HTML, let WP_List_Table do the hard work
    echo WP_List_Table::row_actions( $actions );
}
3
Stephen Harris

Je sais que ce fil est ancien, mais j’ajoute une meilleure réponse qui fonctionne depuis Wordpress 4.3. Vous pouvez utiliser un filtre pour affecter la colonne principale de la table. Pour cette solution, vous devez connaître le type de publication et l'ID de la colonne (inspectez le code HTML avec votre navigateur pour le trouver). Dans mon exemple, le type de publication est "event" (la variable $ screen est donc "edit-event") et la colonne est une taxonomie personnalisée "event-places" (WP appelle la colonne "taxonomy-event-places"). .

add_filter( 'list_table_primary_column', 'fix_actions_primary_column', 10, 2 );
function fix_actions_primary_column( $default, $screen ) {
    if ( 'edit-event' === $screen ) {
        $default = 'taxonomy-event-places';
    }
    return $default;
}
1
zod