2016-11-29 9 views
3

Ich entwickle ein Plugin, bei dem ich die Klasse WP_List_Table erweitern musste. Ich habe die Klasse in meinem Plugin-Datei erweitert (ich weiß nicht, ob dies der richtige Weg ist, dies zu tun?) Und enthalten WP_List_Table wie folgt aus:Aufruf zu undefinierter Funktion convert_to_screen()

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

dann den Code kommt die Klasse für die Verlängerung und dann ich mache eine Instanz von meinem Tisch Klasse wie folgt erstellen:

<?php 

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


Class Wp_Ban_User extends WP_List_Table 
{ 

    public function __construct() 
    { 
      add_action('admin_menu',array($this,'WBU_adminMenu')); 
      parent::__construct(array(
        'singular'=> 'wp_list_text_link', //Singular label 
        'plural' => 'wp_list_test_links', //plural label, also this well be one of the table css class 
        'ajax' => false //We won't support Ajax for this table 
       ));  
      $this->prepare_items(); 
      $this->display();   

    } 
    function get_columns() { 
     $columns = array(
      'id' => 'ID', 
      'user_login'  => 'User Name', 
      'user_email' => 'User Email'    
     ); 
     return $columns; 
    } 


    function column_default($item, $column_name) { 
     switch($column_name) { 
      case 'id': 
      case 'user_login': 
      case 'user_email': 

       return $item[ $column_name ]; 
      default: 
       return print_r($item, true) ; 
     } 
    } 
    function prepare_items() { 

     $example_data = array(
       array(
         'id'  => 1, 
         'user_login'  => 'vasim', 
         'user_email' => '[email protected]'       
       ), 
       array(
         'id'  => 2, 
         'user_login'  => 'Asma', 
         'user_email' => '[email protected]'       
       ), 
       array(
         'id'  => 3, 
         'user_login'  => 'Nehal', 
         'user_email' => '[email protected]'       
       ), 
      ); 

     $columns = $this->get_columns(); 
     $hidden = array(); 
     $sortable = $this->get_sortable_columns(); 
     $this->_column_headers = array($columns, $hidden, $sortable); 
     $this->items = $example_data; 
    } 

    public function WBU_adminMenu() 
    { 
      add_menu_page('Currently Logged In User', 'Banned User', 'manage_options', 'ban_admin_init', array($this,'ban_admin_init')); 
    } 
function ban_admin_init(){ 
     global $wpdb; 

     $sql="SELECT * from {$wpdb->prefix}users"; 
     $sql_result=$wpdb->get_results($sql,'ARRAY_A'); 
     print_r($sql_result); 
     //$this->items=$sql_result;  
    } 

} 

global $Obj_Wp_Ban_User; 

$Obj_Wp_Ban_User=new Wp_Ban_User(); 

aber wenn ich dies tun, ich tun, um diese Fehlermeldung erhalten:

Fatal error: Call to undefined function convert_to_screen() in D:\xampp\htdocs\developplugin\wp-admin\includes\class-wp-list-table.php on line 143

ich tat etwas Forschung, aber nicht verstehen, wie es zu beheben .

Weiß jemand, wie man das repariert?

Danke für Ihre Hilfe!

Mit freundlichen Grüßen.

+0

versuchen 'add_action ('admin_menu', array ($ this, 'WBU_adminMenu')) zu entfernen;' von Konstruktor –

+0

Ihre Klasse instanziiert wird, bevor Wordpress die notwendigen Bibliotheken geladen ist. – Devon

+0

@ShravanShrama Entfernt immer noch denselben Fehler –

Antwort

1

Sorry für mein schlechtes Englisch, im Französisch.

Ich habe das Problem gefunden. Ihre Klasse korrigiert (am unteren Rand des Codes sehen):

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


Class Wp_Ban_User extends WP_List_Table 
{ 

    public function __construct() 
    { 
      parent::__construct(array(
        'singular'=> 'wp_list_text_link', //Singular label 
        'plural' => 'wp_list_test_links', //plural label, also this well be one of the table css class 
        'ajax' => false //We won't support Ajax for this table 
       ));  
      $this->prepare_items(); 
      $this->display();   

    } 

    function get_columns() { 
     $columns = array(
      'id' => 'ID', 
      'user_login'  => 'User Name', 
      'user_email' => 'User Email'    
     ); 
     return $columns; 
    } 

    function column_default($item, $column_name) { 
     switch($column_name) { 
      case 'id': 
      case 'user_login': 
      case 'user_email': 

       return $item[ $column_name ]; 
      default: 
       return print_r($item, true) ; 
     } 
    } 

    function prepare_items() { 

     $example_data = array(
       array(
         'id'  => 1, 
         'user_login'  => 'vasim', 
         'user_email' => '[email protected]'       
       ), 
       array(
         'id'  => 2, 
         'user_login'  => 'Asma', 
         'user_email' => '[email protected]'       
       ), 
       array(
         'id'  => 3, 
         'user_login'  => 'Nehal', 
         'user_email' => '[email protected]'       
       ), 
      ); 

     $columns = $this->get_columns(); 
     $hidden = array(); 
     $sortable = $this->get_sortable_columns(); 
     $this->_column_headers = array($columns, $hidden, $sortable); 
     $this->items = $example_data; 
    } 

} 


// Render your admin menu outside the class 
public function WBU_adminMenu() 
{ 
    add_menu_page('Currently Logged In User', 'Banned User', 'manage_options', 'render_admin_page', 'render_admin_page'); 
} 

// Create your menu outside the class 
add_action('admin_menu','WBU_adminMenu'); 

// Render your page outside the class 
function render_admin_page(){ 
    global $wpdb; 

    $Obj_Wp_Ban_User=new Wp_Ban_User(); 
    $Obj_Wp_Ban_User->prepare_items(); 

    $sql="SELECT * from {$wpdb->prefix}users"; 
    $sql_result=$wpdb->get_results($sql,'ARRAY_A'); 
    print_r($sql_result);  
} 

Dieses einfach: Für den Fehler beheben Call to undefined function convert_to_screen() Sie müssen:

  • Fügen Sie das Menü außerhalb der Klasse
  • die admin_menu Aktion hinzufügen außerhalb der Klasse
  • Ihre Admin-Seite außerhalb der Klasse Render

Nach 3 Tage, es ist Arbeit für mich!

+0

Es funktioniert für mich auch. Danke für die Korrektur. –

0

Ich habe Ihren Code mit meinem frisch Wordpress über diesen Link Ich denke, überprüft es Ihr Problem gelöst überprüfen Sie bitte diesen Link I want a pagination to my options page of wordpress plugin?

Lassen Sie mich wissen, wenn Sie irgendeine Verwirrung haben.

+0

Arbeitet es direkt ?? In 4.6.1 –

Verwandte Themen