IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WordPress PHP Discussion :

Mettre un filtre sur une wp_list_table.


Sujet :

WordPress PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Mettre un filtre sur une wp_list_table.
    Bonjour,

    La génération de la liste fonctionne bien et le passage à la page suivante également.

    Le problème survient quand j’essaie d’implémenter des filtres en utilisant la fonction extra_tablenav.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
            $selected_section = ( isset( $_GET['filter_section'] ) )   ? sanitize_text_field( wp_unslash( $_GET['filter_section'] ) )   : '';
            $selected_year    = ( isset( $_GET['filter_year'] ) )   ? sanitize_text_field( wp_unslash( $_GET['filter_year'] ) )   : '';
     
            ?>
                <label class="screen-reader-text" for="filter_section"><?php esc_html_e( 'Filter by Section', 'wpsam' ); ?></label>
                <select name ="filter_section" id="filter_section">
                <option value=""><?php esc_html_e( '&mdash; Toutes les sections &mdash;', 'wpsam' ); ?></option>
                <?php foreach ($sectionlist as $section) : ?>
                    <option value="<?php echo $section->sct_fede; ?>" <?php selected( $selected_section, $section->sct_fede  ); ?> name="<?php echo $section->sct_fede ;?>"><?php echo $section->sct_name ;?></option>
                <?php endforeach; ?>
                </select>
     
                <label class="screen-reader-text" for="filter_year"><?php esc_html_e( 'Filter by Year', 'wpsam' ); ?></label>
                <select name ="filter_year" id="filter_year">
                <option value=""><?php esc_html_e( '&mdash; Toutes les années &mdash;', 'wpsam' ); ?></option>
                <?php foreach ($yearlist as $year) : ?>
                    <option value="<?php echo $year->fy_code; ?>" <?php selected( $selected_year, $year->fy_code  ); ?> name="<?php echo $year->fy_code ;?>"><?php echo $year->fy_code ;?></option>
                <?php endforeach; ?>
                </select>
     
     
                <?php submit_button( __( 'Filter', 'wpsam' ), 'button', 'filter_general_ledger', false ); ?>
            <?php

    Cela fonctionne bien sur la première page.

    Malheureusement, quand je passe à la page suivante, les filtres sont réinitialisés.


    Merci d’avance

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    pouvez nous donner le code complet de l'extension pour qu'on puisse le tester de notre coté ? cela permettrai aussi de mieux se représenter ce que vous cherchez à faire.

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    function prepare_items() {
     
            $this->process_bulk_action();
     
            $columns               = $this->get_columns();
            $hidden                = array( );
            $sortable              = $this->get_sortable_columns();
            $this->_column_headers = array( $columns, $hidden, $sortable );
     
            $per_page              = 20;
            $current_page          = $this->get_pagenum();
            $offset                = ( $current_page -1 ) * $per_page;
            $this->page_status     = isset( $_GET['status'] ) ? sanitize_text_field( $_GET['status'] ) : '2';
            $args                  = array();
     
            // only ncessary because we have sample data
            $args = array(
                'offset' => $offset,
                'number' => $per_page,
            );
     
            if ( isset( $_REQUEST['orderby'] ) && isset( $_REQUEST['order'] ) ) {
                $args['orderby'] = $_REQUEST['orderby'];
                $args['order']   = $_REQUEST['order'] ;
            }
     
            if ( isset( $_REQUEST['filter_section'] ) && !empty( $_REQUEST['filter_section'] ) ) {
                $args['filter_section'] = sanitize_text_field( wp_unslash( $_REQUEST['filter_section'] ) );
            }
     
     
            if ( isset( $_REQUEST['filter_year'] ) && !empty( $_REQUEST['filter_year'] ) ) {
                $args['filter_year'] = sanitize_text_field( wp_unslash( $_REQUEST['filter_year'] ) );
            }
     
            $data = wpsam_get_all_general_ledger($args);
            $this->items = $data;
            $data = array_slice( $data, ( ( $current_page - 1 ) * $per_page ), $per_page );
            $total_items = wpsam_get_general_ledger_count($args);
     
            $this->set_pagination_args( array(
                'total_items' => $total_items,
                'per_page'    => $per_page,
                'total_pages' => ceil( $total_items / $per_page ), 
            ) );
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
        public function extra_tablenav( $which ) {
            if ( $which != 'top' ) {
                return;
            }
     
            $sections = wpsam_get_all_section();
            $srole = wpsam_get_user_section_by_role();
            if ( !($srole == 'XX')) {
                $sid = wpsam_get_section_value_by_code_fede($srole,'id');
                $sectionsingle = wpsam_array_filter_by_value($sections, 'id', $sid);
                $sections = $sectionsingle;
            };
            $years = wpsam_get_all_financial_year();
     
            $selected_section = ( isset( $_POST['filter_section'] ) )   ? sanitize_text_field( wp_unslash( $_POST['filter_section'] ) )   : '';
            $selected_year    = ( isset( $_POST['filter_year'] ) )   ? sanitize_text_field( wp_unslash( $_POST['filter_year'] ) )   : '';
     
            ?>
     
            <div class="alignleft actions">
                <label class="screen-reader-text" for="filter_section"><?php esc_html_e( 'Filter by Section', 'wpsam' ); ?></label>
                <select name ="filter_section" id="filter_section">
                    <option value=""><?php esc_html_e( '&mdash; Toutes les sections &mdash;', 'wpsam' ); ?></option>
                    <option <?php echo ( $selected_section == '' ) ? ' selected="selected" ' : ''; ?> value=""><?php esc_html_e( '&mdash; Toutes les sections &mdash;', 'wpsam' ); ?></option>
                    <?php foreach ($sections as $section) : ?>
                        <option value="<?php echo $section->sct_fede; ?>" <?php selected( $selected_section, $section->sct_fede ); ?>  name="<?php echo $section->sct_fede ;?>"><?php echo $section->sct_name ;?></option>
                <?php endforeach; ?>
                </select>
     
                <label class="screen-reader-text" for="filter_year"><?php esc_html_e( 'Filter by Year', 'wpsam' ); ?></label>
                <select name ="filter_year" id="filter_year">
                <option value=""><?php esc_html_e( '&mdash; Toutes les années &mdash;', 'wpsam' ); ?></option>
                <?php foreach ($years as $year) : ?>
                    <option value="<?php echo $year->fy_code; ?>" <?php selected( $selected_year, $year->fy_code ); ?> name="<?php echo $year->fy_code ;?>"><?php echo $year->fy_code ;?></option>
                <?php endforeach; ?>
                </select>
     
     
                <?php submit_button( __( 'Filter', 'wpsam' ), 'button', 'filter_general_ledger', false ); ?>
     
            </div>            
            <?php
     
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    function wpsam_get_all_general_ledger($args = array())
    {
     
        global $wpdb;
        $table_prefix = $wpdb->prefix . 'sam_';
        $table_name = $table_prefix . 'general_ledgers';
        $where_sql = "";
     
        $defaults = array(
            'number'     => 20,
            'offset'     => 0,
            'orderby'    => 'gen_ref',
            'order'      => 'ASC',
            'filter_section' => '',
            'filter_year' => '',
        );
     
        $args      = wp_parse_args($args, $defaults);
        $cache_key = 'general-ledger-all' . md5( serialize( $args ) );
        $items     = wp_cache_get($cache_key, 'wpsam');
     
        if ( ! ($args['filter_section'] === '')){
            $where_sql = "sct_fede = '" . $args['filter_section'] ."'";
        }
     
        if ( ! ($args['filter_year'] === '')){
     
            if ($where_sql != '') {
                $where_sql .= ' AND ';
            }
     
            $where_sql .= "fy_code = '" . $args['filter_year'] . "'";
        }
     
        if ($where_sql == '') {
            $where_sql = '1';
        }
     
        if (false === $items) {
            $sql = 'SELECT * FROM ' . $table_name; 
            $sql .= ' WHERE ' . $where_sql; 
            $sql .= ' ORDER BY ' . $args['orderby'] . ' ' . $args['order'] . ' LIMIT ' . $args['offset'] . ', ' . $args['number'];
    //        $sql .= ' ORDER BY ' . $args['orderby'] . ' ' . $args['order'] ;
     
            $items = $wpdb->get_results($sql);
     
            wp_cache_set($cache_key, $items, 'wpsam');
        }
     
        return $items;
    }

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Voici la page 1

    Nom : Capture Page 1.JPG
Affichages : 72
Taille : 50,3 Ko

    Voici la page 2
    Nom : Capture Page 2.JPG
Affichages : 55
Taille : 47,9 Ko

    Comme vous le voyez sur la page 1, le nombre d'enregistrements sélectionnés est correct, le nombre de pages également.
    Par contre, quand je passe à la page 2, les filtres sont réinitialisés

    Si je resélectionne les mêmes filtres en étant sur la page 2, les résultats affichés sont corrects
    Nom : Capture Page 3.JPG
Affichages : 59
Taille : 34,2 Ko

    Merci pour l'aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. quelques soucis avec word 2000
    Par ramchou dans le forum Word
    Réponses: 3
    Dernier message: 06/09/2004, 18h13
  2. SOucis avec une reequete imbriquee
    Par Ni4k dans le forum Langage SQL
    Réponses: 6
    Dernier message: 30/03/2004, 08h56
  3. souci avec un algorithme
    Par slider16 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 22/03/2004, 17h17
  4. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 16h52
  5. Réponses: 4
    Dernier message: 16/02/2003, 12h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo