2016-05-20 9 views
1

拡張クラスを作成してwp_list_tableを使用しようとしています。私は、提供されている一括アップデート機能を実行するには2つのアクションがあります。しかし、私はかなり適切なcase switchステートメントを書く方法を知っていないので、結果として得られるチェックボックスを、取られたアクションに基づいていずれかのアレイアクションに適用するように設定しています...(私は何をする必要があるか分かりますが、それを行う方法を知っている)。wp_list_tableで一括編集チェックボックスをレンダリングするには

これは、私が仕事をしなければならない関係づけコードの最小ビットである。この1つの最後の時間を確認

/** 
    * 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; 
    } 

、私は右のエコーエスケープPHPとしてnameプロパティに呼び出される関数が必要だと思います?その関数は、$_post['delete-*']に基づいてバルクリセット[]またはバルク削除[]を返しますか?

以上、これを熟慮しているので、私は私が作ったaction_type関数が呼び出されないことを一緒にペンにソリューションを試してみましたが、何らかの理由できました:

/** 
    * 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; 

    } 

編集2:それがために動作しません実現これは値postを設定し、私はページロードの前に設定する必要があった...これは、配列名を汎用にする必要があることを意味し、ポストアクションはデータを処理する方法を処理する...多分簡単にするために設定するべき最終的には同じセットのチェックボックスと同じバルク削除データセットに対する編集アクションを実行する。

編集3:アクションを実行するコードの部分がポストの配列名に依存し、その配列名がページのロード時に設定されているため、edit2の最後に示唆することはできません。私は何をすべきか分かりません。

答えて

1

あなたの要件ごとに

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

私はあなたが私はこのように移入されたレコードごと削除インラインについて話して考えていると思います?:http://puu.sh/oYE3s/daf006755d.png私は同じ単一のチェックボックスにリンクされているすべてのアクションの可能性について話しています:http://puu.sh/oYE8x/5079d4d3c1.png私は今、コードの一部を欠いていて、その2つのd場合によっては – Frankenmint

+0

の解決策がありますか? –

+0

いいえ私はまだそれを介して作業して....私の2番目の提案は動作しません – Frankenmint

0

をクラスと修正「クラスMy_Example_List_TableはWP_List_Tableを拡張する」で、この3つの機能を試すには、ここで私はこれを解決した方法は次のとおりです。

  1. 変更(またはしない )チェックボックス配列何かに価値がある。私はmyCheckboxes[]
  2. を選択しましたが、この部分は上記の回答には表示されていませんが、更新または削除クエリを実行する部分がデータが設定されたポイントでした...その値を変更すると、すべてのアクションに適用されます。 (これはコードのリプリケート全体ではないので、私は関連する問題を解決したらコードをさらにリファクタリングするつもりです(つまり、これはコピー/ペーストの置き換えではなく、どのように解決したのですか)。
ここで

あなたが見ることができ、関連する行方不明の底部は、新しいチェックボックスの値と一致するように変更された次のとおりです。

// // 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; 
} 
関連する問題