如何在WordPress仪表板中检索和显示数据库表

时间:2016-09-21 作者:user103328

enter image description here

function add_plugin_page_options(){

        ?>

            <div align = "center">
                    <h2>Usability Reviewer</h2>
                    <P>Main Page</P>
            </div>    

       <?php
}
我想在此页面上显示名为issue的表中的数据。列为“id”和“issue”

1 个回复
SO网友:Ahmed Fouad

我认为你有两个选择来实现你在这里的尝试。

选项1:使用自定义帖子类型,这是最简单的方法。WordPress为您完成大部分工作,同时您可以定义自定义管理列、添加帖子元等。WordPress将进行分页,您可以选择将自定义帖子类型的帖子设置为私有或公共。

在哪里可以了解帖子类型

请参阅此处的codex以注册帖子类型:https://codex.wordpress.org/Function_Reference/register_post_type

选项2:如果您仍然喜欢使用自己的数据库表并拥有完全控制权,请使用自己的SQL数据库表。你不需要学习/利用WP_List_Table 班可以扩展该类以显示自定义SQL结果。

下面是一个扩展WP\\u List\\u表的示例。

<?php

if ( ! defined( \'ABSPATH\' ) ) {
    exit;
}

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

class Custom_List_Table extends WP_List_Table {

    /**
     * Initialize the table list.
     */
    public function __construct() {
        parent::__construct( array(
            \'singular\' => __( \'issue\', \'textdomain\' ),
            \'plural\'   => __( \'issues\', \'textdomain\' ),
            \'ajax\'     => false
        ) );
    }

    /**
     * Get list columns.
     *
     * @return array
     */
    public function get_columns() {
        return array(
            \'cb\'            => \'<input type="checkbox" />\',
            \'id\'            => __( \'ID\', \'textdomain\' ),
            \'issue\'         => __( \'Issue\', \'textdomain\' ),
        );
    }

    /**
     * Column cb.
     */
    public function column_cb( $issue ) {
        return sprintf( \'<input type="checkbox" name="issue[]" value="%1$s" />\', $issue[\'id\'] );
    }

    /**
     * Return ID column
     */
    public function column_id( $issue ) {
        return \'\';
    }

    /**
     * Return issue column
     */
    public function column_issue( $issue ) {
        return \'\';
    }

    /**
     * Get bulk actions.
     *
     * @return array
     */
    protected function get_bulk_actions() {
        return array(

        );
    }

    /**
     * Prepare table list items.
     */
    public function prepare_items() {
        global $wpdb;

        $per_page = 10;
        $columns  = $this->get_columns();
        $hidden   = array();
        $sortable = $this->get_sortable_columns();

        // Column headers
        $this->_column_headers = array( $columns, $hidden, $sortable );

        $current_page = $this->get_pagenum();
        if ( 1 < $current_page ) {
            $offset = $per_page * ( $current_page - 1 );
        } else {
            $offset = 0;
        }

        $search = \'\';

        if ( ! empty( $_REQUEST[\'s\'] ) ) {
            $search = "AND description LIKE \'%" . esc_sql( $wpdb->esc_like( $_REQUEST[\'s\'] ) ) . "%\' ";
        }

        $items = $wpdb->get_results(
            "SELECT id, issue FROM YOUR_TABLE WHERE 1 = 1 {$search}" .
            $wpdb->prepare( "ORDER BY id DESC LIMIT %d OFFSET %d;", $per_page, $offset ), ARRAY_A
        );

        $count = $wpdb->get_var( "SELECT COUNT(id) FROM YOUR_TABLE WHERE 1 = 1 {$search};" );

        $this->items = $items;

        // Set the pagination
        $this->set_pagination_args( array(
            \'total_items\' => $count,
            \'per_page\'    => $per_page,
            \'total_pages\' => ceil( $count / $per_page )
        ) );
    }
}
现在,您需要在管理页面的输出中调用此表(例如,从add\\u menu()函数)

$_table_list = new Custom_List_Table();
$_table_list->prepare_items();
echo \'<input type="hidden" name="page" value="" />\';
echo \'<input type="hidden" name="section" value="issues" />\';

$_table_list->views();
$_table_list->search_box( __( \'Search Key\', \'textdomain\' ), \'key\' );
$_table_list->display();

相关推荐

Reducing Database Query Time

在这里寻找一些建议。有一位客户已经在WooCommerce上工作了大约一年半。我们为他们建了一个新网站。他们开始增加一条新的家具生产线。每个项目有700-800个产品变体组合。由于从生产线中添加了大约8个新产品,当您在管理中查看产品列表时,加载需要花费很长时间。如果您快速编辑一个产品,并说将其添加到第二个类别,然后单击“更新”,则完成查询平均需要10.2-10.8秒(根据查询监视器)。意识到有700-800个变体需要迭代,如果可以理解的话,可能需要更长的时间。我已经恢复到2017主题,禁用了除woocom