Listar as últimas mensagens no Administrador do WP

4

Eu gerencio um site com vários autores e criei um plug-in no wp-admin, no qual os autores podem se conectar e colaborar uns com os outros. Para melhorá-lo, quero exibir uma lista das postagens mais recentes. Essa lista deve ficar assim:

Comomostraafoto,alistadeveconteras10postagensmaisrecentescomonomedeusuário,otítulodapostagemvinculadoequandofoipostado(háquantotempoouahoraexatadapublicação).

OHTMLparaissodeveser:

<tableclass="widefat">

            <thead><tr><th scope="col">User</th><th scope="col">Post</th><th scope="col">Time</th></tr></thead>
            <tfoot><tr><th scope="col">User</th><th scope="col">Post</th><th scope="col">Time</th></tr></tfoot>
            <tbody>
                <tr>
                    <td title="Username">Username</td>
                    <td><a href="URL">Post title</a></td>
                    <td title="2012-11-07 16:16:37">8 hours ago</td>
                </tr>       
            </tbody>
    </table>

Como posso criar uma lista como essa? Note que esta lista será usada apenas no wp-admin.     

    
por Amanda Duke 08.11.2012 / 01:54

1 resposta

4

Tudo o que você precisa é de uma tabela com class='widefat' e get_posts() . Em seguida, você percorre os resultados (se houver algum) e imprime as linhas da tabela.

Aqui está um exemplo muito simples como um widget de painel. Observe a falta de I18n - não está pronto para usar!

<?php
/**
 * Plugin Name: Last posts table
 * Plugin URI:  http://wordpress.stackexchange.com/q/71887/73
 */

add_action( 'wp_dashboard_setup', 'wpse_71887_register_dashboard_widget' );

function wpse_71887_register_dashboard_widget()
{
    wp_add_dashboard_widget(
        __FUNCTION__,
        'Last Posts',
        'wpse_71887_render_dashboard_widget'
    );
}

function wpse_71887_render_dashboard_widget()
{
    $header = '
        <tr>
            <th>User</th>
            <th>Post</th>
            <th>Time</th>
        </tr>';

    print "<table class='widefat'>
    <thead>$header</thead>
    <tfoot>$header</tfoot>
    <tbody>";

    // get 10 last private and published posts
    $posts = get_posts(
        array (
            'numberposts' => 10,
            'post_type'   => array ( 'post', 'page' )
        )
    );

    if ( ! $posts )
    {
        print '<tr><td cols="3">No posts found. <a href="'
            . admin_url( 'post-new.php' ) . '">Write one!</a>';
    }
    else
    {
        foreach ( $posts as $post )
        {
            printf(
                '<tr>
                    <td>%1$s</td>
                    <td><a href="%2$s">%3$s</a></td>
                    <td>%4$s ago</td>
                </tr>',
                esc_html( get_user_by( 'id', $post->post_author )->display_name ),
                get_permalink( $post->ID ),
                esc_html( $post->post_title ),
                human_time_diff( mysql2date( 'U', $post->post_date ) )
            );
        }
    }

    print '</table>';
}

Resultado

    
por fuxia 08.11.2012 / 04:07