Вход Регистрация
Файл: wordpress/wp-admin/includes/class-wp-comments-list-table.php
Строк: 952
<?php
/**
 * Comments and Post Comments List Table classes.
 *
 * @package WordPress
 * @subpackage List_Table
 * @since 3.1.0
 */

/**
 * Comments List Table class.
 *
 * @package WordPress
 * @subpackage List_Table
 * @since 3.1.0
 * @access private
 */
class WP_Comments_List_Table extends WP_List_Table {

    public 
$checkbox true;

    public 
$pending_count = array();

    public 
$extra_items;

    private 
$user_can;

    
/**
     * Constructor.
     *
     * @since 3.1.0
     * @access public
     *
     * @see WP_List_Table::__construct() for more information on default arguments.
     *
     * @param array $args An associative array of arguments.
     */
    
public function __construct$args = array() ) {
        global 
$post_id;

        
$post_id = isset( $_REQUEST['p'] ) ? absint$_REQUEST['p'] ) : 0;

        if ( 
get_option('show_avatars') )
            
add_filter'comment_author''floated_admin_avatar' );

        
parent::__construct( array(
            
'plural' => 'comments',
            
'singular' => 'comment',
            
'ajax' => true,
            
'screen' => isset( $args['screen'] ) ? $args['screen'] : null,
        ) );
    }

    public function 
ajax_user_can() {
        return 
current_user_can('edit_posts');
    }

    public function 
prepare_items() {
        global 
$post_id$comment_status$search$comment_type;

        
$comment_status = isset( $_REQUEST['comment_status'] ) ? $_REQUEST['comment_status'] : 'all';
        if ( !
in_array$comment_status, array( 'all''moderated''approved''spam''trash' ) ) )
            
$comment_status 'all';

        
$comment_type = !empty( $_REQUEST['comment_type'] ) ? $_REQUEST['comment_type'] : '';

        
$search = ( isset( $_REQUEST['s'] ) ) ? $_REQUEST['s'] : '';

        
$post_type = ( isset( $_REQUEST['post_type'] ) ) ? sanitize_key$_REQUEST['post_type'] ) : '';

        
$user_id = ( isset( $_REQUEST['user_id'] ) ) ? $_REQUEST['user_id'] : '';

        
$orderby = ( isset( $_REQUEST['orderby'] ) ) ? $_REQUEST['orderby'] : '';
        
$order = ( isset( $_REQUEST['order'] ) ) ? $_REQUEST['order'] : '';

        
$comments_per_page $this->get_per_page$comment_status );

        
$doing_ajax defined'DOING_AJAX' ) && DOING_AJAX;

        if ( isset( 
$_REQUEST['number'] ) ) {
            
$number = (int) $_REQUEST['number'];
        }
        else {
            
$number $comments_per_page min8$comments_per_page ); // Grab a few extra
        
}

        
$page $this->get_pagenum();

        if ( isset( 
$_REQUEST['start'] ) ) {
            
$start $_REQUEST['start'];
        } else {
            
$start = ( $page ) * $comments_per_page;
        }

        if ( 
$doing_ajax && isset( $_REQUEST['offset'] ) ) {
            
$start += $_REQUEST['offset'];
        }

        
$status_map = array(
            
'moderated' => 'hold',
            
'approved' => 'approve',
            
'all' => '',
        );

        
$args = array(
            
'status' => isset( $status_map[$comment_status] ) ? $status_map[$comment_status] : $comment_status,
            
'search' => $search,
            
'user_id' => $user_id,
            
'offset' => $start,
            
'number' => $number,
            
'post_id' => $post_id,
            
'type' => $comment_type,
            
'orderby' => $orderby,
            
'order' => $order,
            
'post_type' => $post_type,
        );

        
$_comments get_comments$args );

        
update_comment_cache$_comments );

        
$this->items array_slice$_comments0$comments_per_page );
        
$this->extra_items array_slice$_comments$comments_per_page );

        
$total_comments get_commentsarray_merge$args, array('count' => true'offset' => 0'number' => 0) ) );

        
$_comment_post_ids = array();
        foreach ( 
$_comments as $_c ) {
            
$_comment_post_ids[] = $_c->comment_post_ID;
        }

        
$_comment_post_ids array_unique$_comment_post_ids );

        
$this->pending_count get_pending_comments_num$_comment_post_ids );

        
$this->set_pagination_args( array(
            
'total_items' => $total_comments,
            
'per_page' => $comments_per_page,
        ) );
    }

    public function 
get_per_page$comment_status 'all' ) {
        
$comments_per_page $this->get_items_per_page'edit_comments_per_page' );
        
/**
         * Filter the number of comments listed per page in the comments list table.
         *
         * @since 2.6.0
         *
         * @param int    $comments_per_page The number of comments to list per page.
         * @param string $comment_status    The comment status name. Default 'All'.
         */
        
$comments_per_page apply_filters'comments_per_page'$comments_per_page$comment_status );
        return 
$comments_per_page;
    }

    public function 
no_items() {
        global 
$comment_status;

        if ( 
'moderated' == $comment_status )
            
_e'No comments awaiting moderation.' );
        else
            
_e'No comments found.' );
    }

    protected function 
get_views() {
        global 
$post_id$comment_status$comment_type;

        
$status_links = array();
        
$num_comments = ( $post_id ) ? wp_count_comments$post_id ) : wp_count_comments();
        
//, number_format_i18n($num_comments->moderated) ), "<span class='comment-count'>" . number_format_i18n($num_comments->moderated) . "</span>"),
        //, number_format_i18n($num_comments->spam) ), "<span class='spam-comment-count'>" . number_format_i18n($num_comments->spam) . "</span>")
        
$stati = array(
                
'all' => _nx_noop('All''All''comments'), // singular not used
                
'moderated' => _n_noop('Pending <span class="count">(<span class="pending-count">%s</span>)</span>''Pending <span class="count">(<span class="pending-count">%s</span>)</span>'),
                
'approved' => _n_noop('Approved''Approved'), // singular not used
                
'spam' => _n_noop('Spam <span class="count">(<span class="spam-count">%s</span>)</span>''Spam <span class="count">(<span class="spam-count">%s</span>)</span>'),
                
'trash' => _n_noop('Trash <span class="count">(<span class="trash-count">%s</span>)</span>''Trash <span class="count">(<span class="trash-count">%s</span>)</span>')
            );

        if ( !
EMPTY_TRASH_DAYS )
            unset(
$stati['trash']);

        
$link 'edit-comments.php';
        if ( !empty(
$comment_type) && 'all' != $comment_type )
            
$link add_query_arg'comment_type'$comment_type$link );

        foreach ( 
$stati as $status => $label ) {
            
$class = ( $status == $comment_status ) ? ' class="current"' '';

            if ( !isset( 
$num_comments->$status ) )
                
$num_comments->$status 10;
            
$link add_query_arg'comment_status'$status$link );
            if ( 
$post_id )
                
$link add_query_arg'p'absint$post_id ), $link );
            
/*
            // I toyed with this, but decided against it. Leaving it in here in case anyone thinks it is a good idea. ~ Mark
            if ( !empty( $_REQUEST['s'] ) )
                $link = add_query_arg( 's', esc_attr( wp_unslash( $_REQUEST['s'] ) ), $link );
            */
            
$status_links[$status] = "<a href='$link'$class>" sprintf(
                
translate_nooped_plural$label$num_comments->$status ),
                
number_format_i18n$num_comments->$status )
            ) . 
'</a>';
        }

        
/**
         * Filter the comment status links.
         *
         * @since 2.5.0
         *
         * @param array $status_links An array of fully-formed status links. Default 'All'.
         *                            Accepts 'All', 'Pending', 'Approved', 'Spam', and 'Trash'.
         */
        
$status_links apply_filters'comment_status_links'$status_links );
        return 
$status_links;
    }

    protected function 
get_bulk_actions() {
        global 
$comment_status;

        
$actions = array();
        if ( 
in_array$comment_status, array( 'all''approved' ) ) )
            
$actions['unapprove'] = __'Unapprove' );
        if ( 
in_array$comment_status, array( 'all''moderated' ) ) )
            
$actions['approve'] = __'Approve' );
        if ( 
in_array$comment_status, array( 'all''moderated''approved''trash' ) ) )
            
$actions['spam'] = _x'Mark as Spam''comment' );

        if ( 
'trash' == $comment_status )
            
$actions['untrash'] = __'Restore' );
        elseif ( 
'spam' == $comment_status )
            
$actions['unspam'] = _x'Not Spam''comment' );

        if ( 
in_array$comment_status, array( 'trash''spam' ) ) || !EMPTY_TRASH_DAYS )
            
$actions['delete'] = __'Delete Permanently' );
        else
            
$actions['trash'] = __'Move to Trash' );

        return 
$actions;
    }

    protected function 
extra_tablenav$which ) {
        global 
$comment_status$comment_type;
?>
        <div class="alignleft actions">
<?php
        
if ( 'top' == $which ) {
?>
            <label class="screen-reader-text" for="filter-by-comment-type"><?php _e'Filter by comment type' ); ?></label>
            <select id="filter-by-comment-type" name="comment_type">
                <option value=""><?php _e'All comment types' ); ?></option>
<?php
                
/**
                 * Filter the comment types dropdown menu.
                 *
                 * @since 2.7.0
                 *
                 * @param array $comment_types An array of comment types. Accepts 'Comments', 'Pings'.
                 */
                
$comment_types apply_filters'admin_comment_types_dropdown', array(
                    
'comment' => __'Comments' ),
                    
'pings' => __'Pings' ),
                ) );

                foreach ( 
$comment_types as $type => $label )
                    echo 
"t" '<option value="' esc_attr$type ) . '"' selected$comment_type$typefalse ) . ">$label</option>n";
            
?>
            </select>
<?php
            
/**
             * Fires just before the Filter submit button for comment types.
             *
             * @since 3.5.0
             */
            
do_action'restrict_manage_comments' );
            
submit_button__'Filter' ), 'button''filter_action'false, array( 'id' => 'post-query-submit' ) );
        }

        if ( ( 
'spam' == $comment_status || 'trash' == $comment_status ) && current_user_can'moderate_comments' ) ) {
            
wp_nonce_field'bulk-destroy''_destroy_nonce' );
            
$title = ( 'spam' == $comment_status ) ? esc_attr__'Empty Spam' ) : esc_attr__'Empty Trash' );
            
submit_button$title'apply''delete_all'false );
        }
        
/**
         * Fires after the Filter submit button for comment types.
         *
         * @since 2.5.0
         *
         * @param string $comment_status The comment status name. Default 'All'.
         */
        
do_action'manage_comments_nav'$comment_status );
        echo 
'</div>';
    }

    public function 
current_action() {
        if ( isset( 
$_REQUEST['delete_all'] ) || isset( $_REQUEST['delete_all2'] ) )
            return 
'delete_all';

        return 
parent::current_action();
    }

    public function 
get_columns() {
        global 
$post_id;

        
$columns = array();

        if ( 
$this->checkbox )
            
$columns['cb'] = '<input type="checkbox" />';

        
$columns['author'] = __'Author' );
        
$columns['comment'] = _x'Comment''column name' );

        if ( !
$post_id )
            
$columns['response'] = _x'In Response To''column name' );

        return 
$columns;
    }

    protected function 
get_sortable_columns() {
        return array(
            
'author'   => 'comment_author',
            
'response' => 'comment_post_ID'
        
);
    }

    public function 
display() {
        
wp_nonce_field"fetch-list-" get_class$this ), '_ajax_fetch_list_nonce' );

        
$this->display_tablenav'top' );

?>
<table class="<?php echo implode' '$this->get_table_classes() ); ?>">
    <thead>
    <tr>
        <?php $this->print_column_headers(); ?>
    </tr>
    </thead>

    <tbody id="the-comment-list" data-wp-lists="list:comment">
        <?php $this->display_rows_or_placeholder(); ?>
    </tbody>

    <tbody id="the-extra-comment-list" data-wp-lists="list:comment" style="display: none;">
        <?php $this->items $this->extra_items$this->display_rows(); ?>
    </tbody>

    <tfoot>
    <tr>
        <?php $this->print_column_headersfalse ); ?>
    </tr>
    </tfoot>

</table>
<?php

        $this
->display_tablenav'bottom' );
    }

    public function 
single_row$a_comment ) {
        global 
$post$comment;

        
$comment $a_comment;
        
$the_comment_class wp_get_comment_status$comment->comment_ID );
        if ( ! 
$the_comment_class ) {
            
$the_comment_class '';
        }
        
$the_comment_class join' 'get_comment_class$the_comment_class$comment->comment_ID$comment->comment_post_ID ) );

        
$post get_post$comment->comment_post_ID );

        
$this->user_can current_user_can'edit_comment'$comment->comment_ID );

        echo 
"<tr id='comment-$comment->comment_ID' class='$the_comment_class'>";
        
$this->single_row_columns$comment );
        echo 
"</tr>n";
    }

    public function 
column_cb$comment ) {
        if ( 
$this->user_can ) { ?>
        <label class="screen-reader-text" for="cb-select-<?php echo $comment->comment_ID?>"><?php _e'Select comment' ); ?></label>
        <input id="cb-select-<?php echo $comment->comment_ID?>" type="checkbox" name="delete_comments[]" value="<?php echo $comment->comment_ID?>" />
        <?php
        
}
    }

    public function 
column_comment$comment ) {
        global 
$comment_status;
        
$post get_post();

        
$comment_url esc_urlget_comment_link$comment->comment_ID ) );
        
$the_comment_status wp_get_comment_status$comment->comment_ID );

        if ( 
$this->user_can ) {
            
$del_nonce esc_html'_wpnonce=' wp_create_nonce"delete-comment_$comment->comment_ID) );
            
$approve_nonce esc_html'_wpnonce=' wp_create_nonce"approve-comment_$comment->comment_ID) );

            
$url "comment.php?c=$comment->comment_ID";

            
$approve_url esc_url$url "&action=approvecomment&$approve_nonce);
            
$unapprove_url esc_url$url "&action=unapprovecomment&$approve_nonce);
            
$spam_url esc_url$url "&action=spamcomment&$del_nonce);
            
$unspam_url esc_url$url "&action=unspamcomment&$del_nonce);
            
$trash_url esc_url$url "&action=trashcomment&$del_nonce);
            
$untrash_url esc_url$url "&action=untrashcomment&$del_nonce);
            
$delete_url esc_url$url "&action=deletecomment&$del_nonce);
        }

        echo 
'<div class="comment-author">';
            
$this->column_author$comment );
        echo 
'</div>';

        echo 
'<div class="submitted-on">';
        
/* translators: 2: comment date, 3: comment time */
        
printf__'Submitted on <a href="%1$s">%2$s at %3$s</a>' ), $comment_url,
            
/* translators: comment date format. See http://php.net/date */
            
get_comment_date__'Y/m/d' ) ),
            
get_comment_dateget_option'time_format' ) )
        );

        if ( 
$comment->comment_parent ) {
            
$parent get_comment$comment->comment_parent );
            
$parent_link esc_urlget_comment_link$comment->comment_parent ) );
            
$name get_comment_author$parent->comment_ID );
            
printf' | '.__'In reply to <a href="%1$s">%2$s</a>.' ), $parent_link$name );
        }

        echo 
'</div>';
        
comment_text();
        if ( 
$this->user_can ) { ?>
        <div id="inline-<?php echo $comment->comment_ID?>" class="hidden">
        <textarea class="comment" rows="1" cols="1"><?php
            
/** This filter is documented in wp-admin/includes/comment.php */
            
echo esc_textareaapply_filters'comment_edit_pre'$comment->comment_content ) );
        
?></textarea>
        <div class="author-email"><?php echo esc_attr$comment->comment_author_email ); ?></div>
        <div class="author"><?php echo esc_attr$comment->comment_author ); ?></div>
        <div class="author-url"><?php echo esc_attr$comment->comment_author_url ); ?></div>
        <div class="comment_status"><?php echo $comment->comment_approved?></div>
        </div>
        <?php
        
}

        if ( 
$this->user_can ) {
            
// Preorder it: Approve | Reply | Quick Edit | Edit | Spam | Trash.
            
$actions = array(
                
'approve' => '''unapprove' => '',
                
'reply' => '',
                
'quickedit' => '',
                
'edit' => '',
                
'spam' => '''unspam' => '',
                
'trash' => '''untrash' => '''delete' => ''
            
);

            
// Not looking at all comments.
            
if ( $comment_status && 'all' != $comment_status ) {
                if ( 
'approved' == $the_comment_status ) {
                    
$actions['unapprove'] = "<a href='$unapprove_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID:e7e7d3:action=dim-comment&amp;new=unapproved' class='vim-u vim-destructive' title='" esc_attr__'Unapprove this comment' ) . "'>" __'Unapprove' ) . '</a>';
                } elseif ( 
'unapproved' == $the_comment_status ) {
                    
$actions['approve'] = "<a href='$approve_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID:e7e7d3:action=dim-comment&amp;new=approved' class='vim-a vim-destructive' title='" esc_attr__'Approve this comment' ) . "'>" __'Approve' ) . '</a>';
                }
            } else {
                
$actions['approve'] = "<a href='$approve_url' data-wp-lists='dim:the-comment-list:comment-$comment->comment_ID:unapproved:e7e7d3:e7e7d3:new=approved' class='vim-a' title='" esc_attr__'Approve this comment' ) . "'>" __'Approve' ) . '</a>';
                
$actions['unapprove'] = "<a href='$unapprove_url' data-wp-lists='dim:the-comment-list:comment-$comment->comment_ID:unapproved:e7e7d3:e7e7d3:new=unapproved' class='vim-u' title='" esc_attr__'Unapprove this comment' ) . "'>" __'Unapprove' ) . '</a>';
            }

            if ( 
'spam' != $the_comment_status ) {
                
$actions['spam'] = "<a href='$spam_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID::spam=1' class='vim-s vim-destructive' title='" esc_attr__'Mark this comment as spam' ) . "'>" /* translators: mark as spam link */ _x'Spam''verb' ) . '</a>';
            } elseif ( 
'spam' == $the_comment_status ) {
                
$actions['unspam'] = "<a href='$unspam_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID:66cc66:unspam=1' class='vim-z vim-destructive'>" _x'Not Spam''comment' ) . '</a>';
            }

            if ( 
'trash' == $the_comment_status ) {
                
$actions['untrash'] = "<a href='$untrash_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID:66cc66:untrash=1' class='vim-z vim-destructive'>" __'Restore' ) . '</a>';
            }

            if ( 
'spam' == $the_comment_status || 'trash' == $the_comment_status || !EMPTY_TRASH_DAYS ) {
                
$actions['delete'] = "<a href='$delete_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID::delete=1' class='delete vim-d vim-destructive'>" __'Delete Permanently' ) . '</a>';
            } else {
                
$actions['trash'] = "<a href='$trash_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID::trash=1' class='delete vim-d vim-destructive' title='" esc_attr__'Move this comment to the trash' ) . "'>" _x'Trash''verb' ) . '</a>';
            }

            if ( 
'spam' != $the_comment_status && 'trash' != $the_comment_status ) {
                
$actions['edit'] = "<a href='comment.php?action=editcomment&amp;c={$comment->comment_ID}' title='" esc_attr__'Edit comment' ) . "'>"__'Edit' ) . '</a>';

                
$format '<a data-comment-id="%d" data-post-id="%d" data-action="%s" class="%s" title="%s" href="#">%s</a>';

                
$actions['quickedit'] = sprintf$format$comment->comment_ID$post->ID'edit''vim-q comment-inline',esc_attr__'Edit this item inline' ), __'Quick&nbsp;Edit' ) );

                
$actions['reply'] = sprintf$format$comment->comment_ID$post->ID'replyto''vim-r comment-inline'esc_attr__'Reply to this comment' ), __'Reply' ) );
            }

            
/** This filter is documented in wp-admin/includes/dashboard.php */
            
$actions apply_filters'comment_row_actions'array_filter$actions ), $comment );

            
$i 0;
            echo 
'<div class="row-actions">';
            foreach ( 
$actions as $action => $link ) {
                ++
$i;
                ( ( ( 
'approve' == $action || 'unapprove' == $action ) && === $i ) || === $i ) ? $sep '' $sep ' | ';

                
// Reply and quickedit need a hide-if-no-js span when not added with ajax
                
if ( ( 'reply' == $action || 'quickedit' == $action ) && ! defined('DOING_AJAX') )
                    
$action .= ' hide-if-no-js';
                elseif ( ( 
$action == 'untrash' && $the_comment_status == 'trash' ) || ( $action == 'unspam' && $the_comment_status == 'spam' ) ) {
                    if ( 
'1' == get_comment_meta$comment->comment_ID'_wp_trash_meta_status'true ) )
                        
$action .= ' approve';
                    else
                        
$action .= ' unapprove';
                }

                echo 
"<span class='$action'>$sep$link</span>";
            }
            echo 
'</div>';
        }
    }

    public function 
column_author$comment ) {
        global 
$comment_status;

        
$author_url get_comment_author_url();
        if ( 
'http://' == $author_url )
            
$author_url '';
        
$author_url_display preg_replace'|http://(www.)?|i'''$author_url );
        if ( 
strlen$author_url_display ) > 50 )
            
$author_url_display substr$author_url_display049 ) . '&hellip;';

        echo 
"<strong>"comment_author(); echo '</strong><br />';
        if ( !empty( 
$author_url ) )
            echo 
"<a title='$author_url' href='$author_url'>$author_url_display</a><br />";

        if ( 
$this->user_can ) {
            if ( !empty( 
$comment->comment_author_email ) ) {
                
comment_author_email_link();
                echo 
'<br />';
            }

            
$author_ip get_comment_author_IP();
            if ( 
$author_ip ) {
                
$author_ip_url add_query_arg( array( 's' => $author_ip'mode' => 'detail' ), 'edit-comments.php' );
                if ( 
'spam' == $comment_status ) {
                    
$author_ip_url add_query_arg'comment_status''spam'$author_ip_url );
                }
                
printf'<a href="%s">%s</a>'esc_url$author_ip_url ), $author_ip );
            }
        }
    }

    public function 
column_date() {
        return 
get_comment_date__'Y/m/d at g:i a' ) );
    }

    public function 
column_response() {
        
$post get_post();

        if ( isset( 
$this->pending_count[$post->ID] ) ) {
            
$pending_comments $this->pending_count[$post->ID];
        } else {
            
$_pending_count_temp get_pending_comments_num( array( $post->ID ) );
            
$pending_comments $this->pending_count[$post->ID] = $_pending_count_temp[$post->ID];
        }

        if ( 
current_user_can'edit_post'$post->ID ) ) {
            
$post_link "<a href='" get_edit_post_link$post->ID ) . "'>";
            
$post_link .= esc_htmlget_the_title$post->ID ) ) . '</a>';
        } else {
            
$post_link esc_htmlget_the_title$post->ID ) );
        }

        echo 
'<div class="response-links"><span class="post-com-count-wrapper">';
        echo 
$post_link '<br />';
        
$this->comments_bubble$post->ID$pending_comments );
        echo 
'</span> ';
        
$post_type_object get_post_type_object$post->post_type );
        echo 
"<a href='" get_permalink$post->ID ) . "'>" $post_type_object->labels->view_item '</a>';
        echo 
'</div>';
        if ( 
'attachment' == $post->post_type && ( $thumb wp_get_attachment_image$post->ID, array( 8060 ), true ) ) )
            echo 
$thumb;
    }

    public function 
column_default$comment$column_name ) {
        
/**
         * Fires when the default column output is displayed for a single row.
         *
         * @since 2.8.0
         *
         * @param string $column_name         The custom column's name.
         * @param int    $comment->comment_ID The custom column's unique ID number.
         */
        
do_action'manage_comments_custom_column'$column_name$comment->comment_ID );
    }
}

/**
 * Post Comments List Table class.
 *
 * @package WordPress
 * @subpackage List_Table
 * @since 3.1.0
 * @access private
 *
 * @see WP_Comments_Table
 */
class WP_Post_Comments_List_Table extends WP_Comments_List_Table {

    protected function 
get_column_info() {
        return array(
            array(
                
'author'   => __'Author' ),
                
'comment'  => _x'Comment''column name' ),
            ),
            array(),
            array(),
        );
    }

    protected function 
get_table_classes() {
        
$classes parent::get_table_classes();
        
$classes[] = 'comments-box';
        return 
$classes;
    }

    public function 
display$output_empty false ) {
        
$singular $this->_args['singular'];

        
wp_nonce_field"fetch-list-" get_class$this ), '_ajax_fetch_list_nonce' );
?>
<table class="<?php echo implode' '$this->get_table_classes() ); ?>" style="display:none;">
    <tbody id="the-comment-list"<?php
        
if ( $singular ) {
            echo 
" data-wp-lists='list:$singular'";
        } 
?>>
        <?php if ( ! $output_empty ) {
            
$this->display_rows_or_placeholder();
        } 
?>
    </tbody>
</table>
<?php
    
}

    public function 
get_per_page$comment_status false ) {
        return 
10;
    }
}
Онлайн: 1
Реклама