Wordpress屏幕选项未显示在自定义主题中

Wordpress屏幕选项未显示在自定义主题中,wordpress,themes,screen,options,Wordpress,Themes,Screen,Options,我试图在我的一个孩子的主题中写一个自定义屏幕选项,但我似乎无法让它工作。我已经浏览了很多在谷歌上找到的文章,不管出于什么原因,都没有显示出来。希望有人能给我指出正确的方向。提前谢谢 下面是通过主题安装创建自定义管理选项页面的所有类 class country_class { public function __construct(){ if (!class_exists('WP_List_Table')) { require_once(ABSPA

我试图在我的一个孩子的主题中写一个自定义屏幕选项,但我似乎无法让它工作。我已经浏览了很多在谷歌上找到的文章,不管出于什么原因,都没有显示出来。希望有人能给我指出正确的方向。提前谢谢

下面是通过主题安装创建自定义管理选项页面的所有类

class country_class {

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

        add_action("load-lp_manage_countries", "lp_screen_options");
    }

    function lp_screen_options() {

        global $pippin_sample_page;
        $lp_manage_countries_page = "lp_manage_countries";

        $screen = get_current_screen();

        // get out of here if we are not on our settings page
        if(!is_object($screen) || $screen->id != $lp_manage_countries_page)
            return;

        $args = array(
            'label' => __('Countries per page'),
            'default' => 25,
            'option' => 'per_page'
        );
        add_screen_option( 'per_page', $args );
    }

    public function install_countries_page(){
        add_menu_page('LP Countries', 'LP Countries', 'manage_options', 'lp_manage_countries', array($this, 'show_country_page'));
    }

    public function show_country_page(){
        echo "<div class=\"wrap\">
                <h2>Manage Countries</h2>
                <form method=\"post\" action=\"options.php\">";

                //Prepare Table of elements
                $categories_list_table = new category_list_table();
                $categories_list_table->prepare_items();
                //Table of elements
                $categories_list_table->display();


        echo "<input type=\"submit\" value=\"Submit\">
                </form>
                </div>";
    }

    public function create_countries_table(){
        global $wpdb;
        $charset = $wpdb->get_charset_collate();
    $sql = "CREATE TABLE IF NOT EXISTS `countries` (
            `id` int(11) NOT NULL AUTO_INCREMENT,
            `name` varchar(45) NOT NULL,
            `parent_id` int(11) DEFAULT NULL,
            `image` varchar(45) DEFAULT NULL,
            PRIMARY KEY (`id`)
            ) $charset; ";

        $wpdb->query( $sql );

    }

    public function drop_countries_table(){
        global $wpdb;
        $sql = "DROP TABLE `countries`;";
        $wpdb->query($sql);
    }

}


class category_list_table extends WP_List_Table {

public function __construct(){
    parent::__construct( array(
        'singular' => 'Country',
        'plural' => 'Countries',
            'ajax' => false)
    );
}

public function get_columns(){
    return $columns = array(
        'cb' => '<input type="checkbox" />',
        'id' => __('ID'),
        'name' => __('Name'),
        'parent_id' => __('Parent ID'),
        'image' => __('Image')
    );
}

function column_name($item) {
    $actions = array(
        'edit' => sprintf('<a href="?page=%s&action=%s&country=%s">Edit</a>',$_REQUEST['page'],'edit',$item['id']),
        'delete' => sprintf('<a href="?page=%s&action=%s&country=%s">Delete</a>',$_REQUEST['page'],'delete',$item['id']),
    );
    return sprintf('%1$s %2$s', $item['name'], $this->row_actions($actions) );
}

public function get_sortable_columns(){

    return $sortable = array(
        'id' => false,
        'name' => true
    );
}

public function prepare_items(){
    global $wpdb, $_wp_column_headers;


    $screen = get_current_screen();

    /* Prepare the query */
    $query = "SELECT * FROM `countries`";

    /** Process bulk action */
    $this->process_bulk_action();

    /* Order Parameters */
    $orderby = !empty($_GET["orderby"]) ? mysql_real_escape_string($_GET["orderby"]) : 'ASC';
    $order = !empty($_GET["order"]) ? mysql_real_escape_string($_GET["order"]) : '';
    if(!empty($orderby) & !empty($order)){ $query.=' ORDER BY '.$orderby.' '.$order; }

    /* Pagination Params */
    //Number of elements in your table?
    $totalitems = $wpdb->query($query); //return the total number of affected rows

    //How many to display per page?
    $perpage = 30;

    //Which page is this?
    $paged = !empty($_GET["paged"]) ? mysql_real_escape_string($_GET["paged"]) : '';

    //Page Number
    if(empty($paged) || !is_numeric($paged) || $paged<=0 ){ $paged=1; }

    //How many pages do we have in total?
    $totalpages = ceil($totalitems/$perpage);

    //adjust the query to take pagination into account
    if(!empty($paged) && !empty($perpage)){
        $offset=($paged-1)*$perpage;
        $query.=' LIMIT '.(int)$offset.','.(int)$perpage;
    }

    /* Register pagination */
    $this->set_pagination_args( array(
        "total_items" => $totalitems,
        "total_pages" => $totalpages,
        "per_page" => $perpage
    )
    );

    /* register the columns */
    $columns = $this->get_columns();
    $_wp_column_headers[$screen->id]=$columns;

    /* Get the items */
    $this->items = $wpdb->get_results($query, 'ARRAY_A');

    $hidden_columns = array();
    $sortable_columns = array();
    $this->_column_headers = array($columns, $hidden_columns, $sortable_columns, "name");
}

public function column_default($item, $column_name) {
    return $item[$column_name];
}

public function no_items() {
    return 'No countries avaliable.';
}

function column_cb( $item ) {
    return sprintf(
        '<input type="checkbox" name="bulk-delete[]" value="%s" />', $item['ID']
    );
}

public function get_bulk_actions() {
    $actions = [
        'bulk-delete' => 'Delete'
    ];
    return $actions;
}

public function process_bulk_action() {

    //Detect when a bulk action is being triggered...
    if ( 'delete' === $this->current_action() ) {

        // In our file that handles the request, verify the nonce.
        $nonce = esc_attr( $_REQUEST['_wpnonce'] );

        if ( ! wp_verify_nonce( $nonce, 'lp_delete_country' ) ) {
            die( 'Go get a life script kiddies' );
        }
        else {
            self::delete_country( absint( $_GET['country'] ) );

            wp_redirect( esc_url( add_query_arg() ) );
            exit;
        }

    }

    // If the delete bulk action is triggered
    if ( ( isset( $_POST['action'] ) && $_POST['action'] == 'bulk-delete' )
        || ( isset( $_POST['action2'] ) && $_POST['action2'] == 'bulk-delete' )
    ) {

        $delete_ids = esc_sql( $_POST['bulk-delete'] );

        // loop over the array of record IDs and delete them
        foreach ( $delete_ids as $id ) {
            self::delete_country( $id );

        }

        wp_redirect( esc_url( add_query_arg() ) );
        exit;
    }

}

function delete_country( $id ) {
    global $wpdb;

    $wpdb->delete(
        "countries",
        [ 'ID' => $id ],
        [ '%d' ]
    );
}

}
class国家/地区\u类{
公共函数构造(){
如果(!class_存在('WP_列表_表')){
require_once(ABSPATH.'wp admin/includes/class wp list table.php');
}
添加操作(“加载-lp\U管理\U国家”,“lp\U屏幕\U选项”);
}
功能lp_屏幕_选项(){
全局$pippin\u示例\u页面;
$lp\u manage\u countries\u page=“lp\u manage\u countries”;
$screen=获取当前屏幕();
//如果我们不在设置页面,请离开这里
如果(!is_object($screen)|$screen->id!=$lp_manage_countries_page)
返回;
$args=数组(
“标签”=>(每页国家/地区),
“默认值”=>25,
'选项'=>'每页'
);
添加屏幕选项('per_page',$args);
}
公共功能安装\u国家/地区\u页面(){
添加_菜单_页面(“LP国家”,“LP国家”,“管理_选项”,“LP管理_国家”,“数组”(“显示_国家/地区页面”));
}
公共功能显示\国家\页面(){
回声“
管理国家
";
//编制要素表
$categories_list_table=新的categories_list_table();
$categories_list_table->prepare_items();
//要素表
$categories_list_table->display();
回声“
";
}
公共函数create_countries_table(){
全球$wpdb;
$charset=$wpdb->get_charset_collate();
$sql=“创建表(如果不存在)`countries`(
`id`int(11)非空自动增量,
`name`varchar(45)不为空,
`父_id`int(11)默认为空,
`image`varchar(45)默认为空,
主键(`id`)
)$charset;“;
$wpdb->query($sql);
}
公共功能下拉列表(){
全球$wpdb;
$sql=“DROP TABLE`countries`;”;
$wpdb->query($sql);
}
}
类类别列表扩展了WP列表{
公共函数构造(){
父项::_构造(数组)(
“单数”=>“国家”,
“复数”=>“国家”,
'ajax'=>false)
);
}
公共函数get_columns(){
返回$columns=array(
“cb'=>”,
“id'=>”(id'),
“名称”=>(名称),
“父项id”=>“(“父项id”),
'image'=>\'image')
);
}
函数列名称($item){
$actions=数组(
'edit'=>sprintf('',$\u请求['page'],'edit',$item['id']),和,
'delete'=>sprintf('',$\u请求['page'],'delete',$item['id']),和,
);
返回sprintf(“%1$s%2$s”,$item['name'],$this->row_actions($actions));
}
公共函数get_sortable_columns(){
返回$sortable=array(
'id'=>false,
'name'=>true
);
}
公共职能准备_项目(){
全局$wpdb,$\u wp\u列\u标题;
$screen=获取当前屏幕();
/*准备查询*/
$query=“从“国家”中选择*”;
/**处理批量操作*/
$this->process_bulk_action();
/*顺序参数*/
$orderby=!empty($\u GET[“orderby”])?mysql\u real\u escape\u string($\u GET[“orderby”]):'ASC';
$order=!empty($\u GET[“order”])?mysql\u real\u escape\u string($\u GET[“order”]):“”;
如果(!empty($orderby)&!empty($order)){$query.='orderby'.$orderby.'.$order;}
/*分页参数*/
//表中的元素数?
$totalitems=$wpdb->query($query);//返回受影响行的总数
//每页显示多少?
每页$30;
//这是哪一页?
$paged=!empty($\u GET[“paged”])?mysql\u real\u escape\u string($\u GET[“paged”]):“”;
//页码
if(empty($paged)| |!是_numeric($paged)| |$pagedset_pagination_参数(数组(
“总计项目”=>$totalitems,
“总页数”=>$totalpages,
“每页”=>每页$
)
);
/*注册列*/
$columns=$this->get_columns();
$\u wp\u column\u标题[$screen->id]=$columns;
/*拿到物品*/
$this->items=$wpdb->get_results($query,'ARRAY_A');
$hidden_columns=array();
$sortable_columns=array();
$this->_column_headers=数组($columns,$hidden_columns,$sortable_columns,“name”);
}
公共函数列\u默认值($item,$column\u name){
返回$item[$column_name];
}
公共功能无项目(){
返回“无可用国家/地区”;
}
功能栏\u cb($项){
回程冲刺(
''$item['ID']
);
}
公共函数get_bulk_actions(){
$actions=[
“批量删除”=>“删除”
];
返回$actions;
}
公共职能流程\批量\行动(){
//检测何时触发批量操作。。。
如果('delete'==$this->current_action()){
//在处理请求的文件中,验证nonce。
$nonce=esc_attr($_请求[''wpnce']);
如果(!wp\u verify\u nonce($nonce,'lp\u delete\u country')){
死(‘孩子们,去拿一本人生剧本’);
}
否则{
self::delete_country(absint($_GET['country']);
wp_重定向(esc_url(add_query_arg());
出口
}
}
//如果触发了删除批量操作
如果((isset($\u POST['action'])和&$\u POST['action']==='bulk delete')
||(isset($\u POST['action2'])和&$\u POST['action2']=='bulk delete')
) {
$delete_id=esc_sql($_POST['bulk-delete']);
//循环记录ID数组并删除它们
foreach($delete_id as$id){
add_action("load-lp_manage_countries", array( $this, "lp_screen_options" ));
add_menu_page('LP Countries', 'LP Countries', 'manage_options', 'lp_manage_countries', array($this, 'show_country_page'));
add_menu_page('LP Countries', 'LP Countries', 'manage_options', 'lp-manage-countries', array($this, 'show_country_page'));