2016-05-20 13 views
1

Ich versuche, wp_list_table zu verwenden, indem Sie eine erweiterte Klasse erstellen. Ich habe zwei Aktionen, um die Bulk-Update-Funktionalität zu durchlaufen. Allerdings weiß ich nicht genau, wie man die richtige case switch-Anweisung schreibt, um das resultierende Kontrollkästchen für Array-Aktionen basierend auf der ausgeführten Aktion zu setzen ... (siehe Ich weiß, was ich tun muss, aber nicht ganz weiß, wie es geht).Wie rende ich ein Bulk Edit-Kontrollkästchen auf wp_list_table

Dies ist das kleinste bisschen relatable Code, den ich habe, mit arbeiten:

/** 
    * Render the bulk edit checkbox 
    * 
    * @param array $item 
    * 
    * @return string 
    */ 
    function column_cb($item) { 
    return sprintf(
     '<input type="checkbox" name="bulk-reset[]" value="%s" />', $item['id'] 

    ); 
    } 


    /** 
    * Method for name column 
    * 
    * @param array $item an array of DB data 
    * 
    * @return string 
    */ 
    function column_name($item) { 

    $delete_nonce = wp_create_nonce('sp_delete_customer'); 
    $reset_nonce = wp_create_nonce('sp_reset_payouts'); 

    $title = '<strong>' . $item['name'] . '</strong>'; 

    $actions = [ 
     'delete' => sprintf('<a href="?page=%s&action=%s&customer=%s&_wpnonce=%s">Delete</a>', esc_attr($_REQUEST['page']), 'delete', absint($item['id']), $delete_nonce), 

     'reset' => sprintf('<a href="?page=%s&action=%s&customer=%s&_wpnonce=%s">Reset</a>', esc_attr($_REQUEST['page']), 'reset', absint($item['id']), $reset_nonce) 

    ]; 

    return $title . $this->row_actions($actions); 
    } 

    /** 
    * Returns an associative array containing the bulk action 
    * 
    * @return array 
    */ 
    public function get_bulk_actions() { 
    $actions = array(
     'bulk-delete' => 'Delete', 
     'bulk-reset' => 'Reset' 
    ); 

    return $actions; 
    } 

Überprüfung dieses ein letztes Mal, ich glaube, ich brauche eine Funktion, die auf den Namen Eigenschaft als entkam php echo Recht genannt wird ? Dann sollte diese Funktion entweder bulk-reset [] oder bulk-delete [] basierend auf $_post['delete-*'] richtig ???

Da dies über grübelt, ich habe zu Stift versucht, gemeinsam die Lösung, aber aus irgendeinem Grund, dass action_type Funktion, die ich nicht gemacht nicht aufgerufen:

/** 
    * Render the bulk edit checkbox 
    * 
    * @param array $item 
    * 
    * @return string 
    */ 
    function column_cb($item) { 

    global $action_type; 

    return sprintf(
     '<input type="checkbox" name="'.$action_type.'" value="%s" />', $item['id'] 

    ); 
    } 



    /** 
    * Pick the Checkbox Value based on post Value 
    * 
    * 
    * @return string 
    * 
    */ 

    public function action_type() { 

    if ((isset($_POST['action']) && $_POST['action'] == 'bulk-delete') 
     || (isset($_POST['action2']) && $_POST['action2'] == 'bulk-delete') 
    ) { 
     $output = "bulk-delete[]"; 

    } else { 
     $output = "bulk-reset[]"; 
    } 
    return $output; 

    } 

Edit 2: Die Erkenntnis, dass wird nicht funktionieren, weil Das setzt den Wert post und ich habe es vor dem Laden der Seite gesetzt ... Ich denke, das bedeutet, dass ich den Array-Namen generisch haben muss und die Post-Aktion behandelt, wie man mit den Daten umgeht ... vielleicht sollte ich der Einfachheit halber einstellen Die Edit-Aktion für den gleichen Bulk-Delete-Dataset ist derselbe Satz an Checkboxen.

Edit 3: Ich kann nicht tun, was ich am Ende von edit2 vorschlagen, weil der Teil des Codes zum Ausführen der Aktionen vom Array-Namen des Beitrags abhängt und dass Array-Name beim Laden der Seite festgelegt wird. Ich weiß nicht recht, was ich tun soll.

Antwort

1

versuchen, diese drei Funktion in "Klasse My_Example_List_Table erweitert WP_List_Table" Klasse und Änderung wie pro Ihre Anforderung

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




function get_bulk_actions() { 

    $actions = array(
    'delete' => 'Delete' 
); 
    return $actions; 
} 

function process_bulk_action(){ 

    global $wpdb; 
    $table_name = $wpdb->prefix."tablename"; 

     if ('delete' === $this->current_action()) { 

      $ids = isset($_REQUEST['id']) ? $_REQUEST['id'] : array(); 
      if (is_array($ids)) $ids = implode(',', $ids); 

      if (!empty($ids)) { 
       $wpdb->query("DELETE FROM $table_name WHERE id IN($ids)"); 
      } 

     } 
} 
+0

ich denke, du denkst ich rede über die Inline-löschen pro Datensatz wie folgt aufgefüllt werden ?: http://puu.sh/oYE3s/daf006755d.png Ich spreche über alle Aktionsmöglichkeiten, die mit der gleichen einzelnen Checkbox verknüpft sind: http://puu.sh/oYE8x/5079d4d3c1.png Ich habe es gerade erst gemerkt fehlte ein Stück des Codes, der zeigte, dass seine zwei d verschiedene Aktionen – Frankenmint

+0

jetzt Lösung? –

+0

nein Ich arbeite immer noch durch ... mein zweiter Vorschlag funktioniert nicht – Frankenmint

0

Hier ist, wie ich dieses Problem gelöst:

  1. ändern (oder nicht  ) das Kontrollkästchen Array Wert zu etwas Generischem. Ich wählte myCheckboxes[]
  2. Dieser Teil wird nicht in der Antwort oben gezeigt, aber der Teil des Codes, der die Aktualisierung oder Löschung von Abfragen ausgeführt wurde, war der Punkt, wo die Daten festgelegt wurden ... Ich sah, dass die Änderung der Wert dort meine Checkbox-Spalte zu auf alle Aktionen angewendet werden. (Ich plane, den Code weiter zu refactorieren, sobald ich ein damit zusammenhängendes Problem löse, so dass dies nicht das gesamte Code-Snippet ist (dh dies ist KEIN Fall für Kopieren/Einfügen, nur Kontext für, wie ich das gelöst habe)

Hier ist der relevante fehlenden unteren Teil, die Sie wurde geändert sehen die neue Checkbox Wert übereinstimmen:

// // 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['my_CheckBoxes']); 

    // loop over the array of record IDs and delete them 
    foreach ($delete_ids as $id) { 
    self::delete_customer($id); 
    } 
    wp_redirect(esc_url(add_query_arg())); 
    exit; 
} 
Verwandte Themen