programing

워드프레스 플러그인의 옵션 페이지에 페이지 번호를 붙이고 싶습니다.

javamemo 2023. 3. 26. 09:16
반응형

워드프레스 플러그인의 옵션 페이지에 페이지 번호를 붙이고 싶습니다.

마이 데모

워드프레스 데이터베이스에서 얻은 결과에 따라 페이지 번호 매기기...이 모든 작업은 워드프레스 플러그인의 옵션 페이지에서 수행됩니다.

데이터베이스에서 검색할 내 코드는 다음과 같습니다.

$per_page=5;
$sql = "SELECT * FROM wp_dive ";
$result = $wpdb->get_results($sql_10) or die(mysql_error());
$length=count($result);
$pages = ceil($length/$per_page);
foreach( $result as $results ) 

    {
    $id=$results->id;
    $name= $results->name_cust;
    $gender= $results->gender_cust;
    $dob= $results->dob_cust;

<?php $html= "<div class=\"divContentBody\">";?>
<?php $html .= "<span class=\"clsOrderNo\">". $id."</span>";?>
<?php $html .= "<span class=\"clsName\">". $name."</span>";?>
<?php $html .= "<span class=\"clsGender\">".$gender."</span>";?>
<?php $html .= "<span class=\"clsDOB\">".  $dob ."</span>";?>
<?php $html .= "</div>"?>
<?php
$data_html .=$html; 
 }

 ?> 

데이터를 동적으로 취득하고 있습니다.첫 페이지에 5개의 엔트리를 표시하기 위해 페이지네이션만 추가하고 싶습니다.따라서...

이것을 하는 기본적인 방법은 수업을 연장하는 것이다.WP_List_TableWord Press가 테이블의 모든 세부사항을 처리하도록 합니다.kaiser플러그인 Internal Link Check를 통해 알고 있습니다.아래 예는 매우 간단한 SQL 쿼리를 수행하는 제거 버전입니다.

우선 도우미 페이지(PHP5.3+ 익명 함수 사용)가 필요합니다.

add_action('admin_menu', function() 
{
    add_menu_page(
        'TE', 
        '<span style="color:#e57300;">Table Example</span>', 
        'edit_pages', 
        'table-example', 
        function() { 
            echo '<div class="wrap">';
            screen_icon('edit');
            echo '<h2>Table Example</h2>';
            new B5F_WP_Table(); 
            echo '</div>';
        },
        'http://sstatic.net/stackexchange/img/favicon.ico',
        1  // create before Dashboard menu item
    );
});

최종 결과는 다음과 같습니다.

커스텀 wp 테이블

여기서 모든 작업을 수행하는 클래스(메인 클래스 Import 필요성 있음)가 표시됩니다.데이터에 대한 쿼리 및 테이블 열을 조정해야 합니다.

if( is_admin() && !class_exists( 'WP_List_Table' ) )
    require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );

class B5F_WP_Table extends WP_List_Table
{
    private $order;
    private $orderby;
    private $posts_per_page = 5;

    public function __construct()
    {
        parent :: __construct( array(
            'singular' => 'table example',
            'plural'   => 'table examples',
            'ajax'     => true
        ) );
        $this->set_order();
        $this->set_orderby();
        $this->prepare_items();
        $this->display();
    }

    private function get_sql_results()
    {
        global $wpdb;
        $args = array( 'ID', 'post_title', 'post_date', 'post_content', 'post_type' );
        $sql_select = implode( ', ', $args );
        $sql_results = $wpdb->get_results("
                SELECT $sql_select
                    FROM $wpdb->posts
                WHERE post_status = 'publish'
                ORDER BY $this->orderby $this->order "
        );
        return $sql_results;
    }

    public function set_order()
    {
        $order = 'DESC';
        if ( isset( $_GET['order'] ) AND $_GET['order'] )
            $order = $_GET['order'];
        $this->order = esc_sql( $order );
    }

    public function set_orderby()
    {
        $orderby = 'post_date';
        if ( isset( $_GET['orderby'] ) AND $_GET['orderby'] )
            $orderby = $_GET['orderby'];
        $this->orderby = esc_sql( $orderby );
    }

    /**
     * @see WP_List_Table::ajax_user_can()
     */
    public function ajax_user_can() 
    {
        return current_user_can( 'edit_posts' );
    }

    /**
     * @see WP_List_Table::no_items()
     */
    public function no_items() 
    {
        _e( 'No posts found.' );
    }

    /**
     * @see WP_List_Table::get_views()
     */
    public function get_views()
    {
        return array();
    } 

    /**
     * @see WP_List_Table::get_columns()
     */
    public function get_columns()
    {
        $columns = array(
            'ID'         => __( 'ID' ),
            'post_title' => __( 'Title' ),
            'post_date'  => __( 'Date' ),
            'post_type'  => __( 'Type' )
        );
        return $columns;        
    }

    /**
     * @see WP_List_Table::get_sortable_columns()
     */
    public function get_sortable_columns()
    {
        $sortable = array(
            'ID'         => array( 'ID', true ),
            'post_title' => array( 'post_title', true ),
            'post_date'  => array( 'post_date', true )
        );
        return $sortable;
    }

    /**
     * Prepare data for display
     * @see WP_List_Table::prepare_items()
     */
    public function prepare_items()
    {
        $columns  = $this->get_columns();
        $hidden   = array();
        $sortable = $this->get_sortable_columns();
        $this->_column_headers = array( 
            $columns,
            $hidden,
            $sortable 
        );

        // SQL results
        $posts = $this->get_sql_results();
        empty( $posts ) AND $posts = array();

        # >>>> Pagination
        $per_page     = $this->posts_per_page;
        $current_page = $this->get_pagenum();
        $total_items  = count( $posts );
        $this->set_pagination_args( array (
            'total_items' => $total_items,
            'per_page'    => $per_page,
            'total_pages' => ceil( $total_items / $per_page )
        ) );
        $last_post = $current_page * $per_page;
        $first_post = $last_post - $per_page + 1;
        $last_post > $total_items AND $last_post = $total_items;

        // Setup the range of keys/indizes that contain 
        // the posts on the currently displayed page(d).
        // Flip keys with values as the range outputs the range in the values.
        $range = array_flip( range( $first_post - 1, $last_post - 1, 1 ) );

        // Filter out the posts we're not displaying on the current page.
        $posts_array = array_intersect_key( $posts, $range );
        # <<<< Pagination

        // Prepare the data
        $permalink = __( 'Edit:' );
        foreach ( $posts_array as $key => $post )
        {
            $link     = get_edit_post_link( $post->ID );
            $no_title = __( 'No title set' );
            $title    = ! $post->post_title ? "<em>{$no_title}</em>" : $post->post_title;
            $posts[ $key ]->post_title = "<a title='{$permalink} {$title}' href='{$link}'>{$title}</a>";
        }
        $this->items = $posts_array;
    }

    /**
     * A single column
     */
    public function column_default( $item, $column_name )
    {
        return $item->$column_name;
    }

    /**
     * Override of table nav to avoid breaking with bulk actions & according nonce field
     */
    public function display_tablenav( $which ) {
        ?>
        <div class="tablenav <?php echo esc_attr( $which ); ?>">
            <!-- 
            <div class="alignleft actions">
                <?php # $this->bulk_actions( $which ); ?>
            </div>
             -->
            <?php
            $this->extra_tablenav( $which );
            $this->pagination( $which );
            ?>
            <br class="clear" />
        </div>
        <?php
    }

    /**
     * Disables the views for 'side' context as there's not enough free space in the UI
     * Only displays them on screen/browser refresh. Else we'd have to do this via an AJAX DB update.
     * 
     * @see WP_List_Table::extra_tablenav()
     */
    public function extra_tablenav( $which )
    {
        global $wp_meta_boxes;
        $views = $this->get_views();
        if ( empty( $views ) )
            return;

        $this->views();
    }
}

관리자를 스타일링하는 도우미 플러그인:WordPress Admin Style, bueltge별

이 https://stackoverflow.com/a/16358219/1596547을 사용하여 다음과 같은 니즈에 맞게 도입하십시오.

$pagenum = isset( $_GET['pagenum'] ) ? absint( $_GET['pagenum'] ) : 1;

$limit = 5; // number of rows in page
$offset = ( $pagenum - 1 ) * $limit;
$total = $wpdb->get_var( "SELECT COUNT(`id`) FROM `wp_dive`" );
$num_of_pages = ceil( $total / $limit );
$result = $wpdb->get_results( "SELECT `id`,`name_cust`,`gender_cust`,`dob_cust` FROM `wp_dive` LIMIT $offset, $limit" );

$data_html = '';

foreach( $result as $results ) 

    {
    $id=$results->id;
    $name= $results->name_cust;
    $gender= $results->gender_cust;
    $dob= $results->dob_cust;
?>
<?php $html= "<div class=\"divContentBody\">";?>
<?php $html .= "<span class=\"clsOrderNo\">". $id."</span>";?>
<?php $html .= "<span class=\"clsName\">". $name."</span>";?>
<?php $html .= "<span class=\"clsGender\">".$gender."</span>";?>
<?php $html .= "<span class=\"clsDOB\">".  $dob ."</span>";?>
<?php $html .= "</div>"?>
<?php
$data_html .=$html; 
 }
echo $data_html;


$page_links = paginate_links( array(
    'base' => add_query_arg( 'pagenum', '%#%' ),
    'format' => '',
    'prev_text' => __( '&laquo;', 'aag' ),
    'next_text' => __( '&raquo;', 'aag' ),
    'total' => $num_of_pages,
    'current' => $pagenum
) );

if ( $page_links ) {
    echo '<div class="tablenav"><div class="tablenav-pages" style="margin: 1em 0">' . 
$page_links . '</div></div>';
}
<?php

global $wpdb;
$paged = isset( $_GET['paged'] ) ? (int) $_GET['paged'] : 1;

$limit = 10; // Row in a single
$offset = ( $paged - 1 ) * $limit;
$total = $wpdb->get_var( 'SELECT COUNT(`id`) FROM `wp_dive`' );
$num_of_pages = ceil( $total / $limit );
$result = $wpdb->get_results( "SELECT `id`,`name_cust`,`gender_cust`,`dob_cust` FROM `wp_dive` LIMIT $offset, $limit" );

$data_html = '';

foreach( $result as $results ) 

    {
    $id=$results->id;
    $name= $results->name_cust;
    $gender= $results->gender_cust;
    $dob= $results->dob_cust;
?>
<?php $html= "<div class=\"divContentBody\">";?>
<?php $html .= "<span class=\"clsOrderNo\">". $id."</span>";?>
<?php $html .= "<span class=\"clsName\">". $name."</span>";?>
<?php $html .= "<span class=\"clsGender\">".$gender."</span>";?>
<?php $html .= "<span class=\"clsDOB\">".  $dob ."</span>";?>
<?php $html .= "</div>"?>
<?php
$data_html .=$html; 
 }
echo $data_html;


$page_links = paginate_links( array(
    'base' => add_query_arg( 'paged', '%#%' ),
    'format' => '',
    'prev_text' => '&laquo;',
    'next_text' => '&raquo;',
    'total' => $total,
    'current' => $paged
) );

if ( $page_links ) {
    echo '<div class="tablenav"><div class="tablenav-pages" style="margin: 1em 0">' . 
$page_links . '</div></div>';
}

?>

언급URL : https://stackoverflow.com/questions/17379792/i-want-a-pagination-to-my-options-page-of-wordpress-plugin

반응형