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'));