web-dev-qa-db-fra.com

Tous les utilisateurs> Liste des utilisateurs> Online User Ticket

Je pose quelques questions à l'utilisateur au moment de l'enregistrement avec des cases à cocher comme

Dans le formulaire d'inscription

[] I am blah blah
[] I am blan blah
[] I am blah blah

Maintenant, l'utilisateur viendra pour approbation dans le panneau d'administration, dans l'état en attente.

Je veux ajouter ci-dessus (case à cocher) dans la table des utilisateurs de la liste. Ainsi, l'administrateur peut modifier les données s'il le souhaite, et dès que vous cliquez sur Valider, les données sont enregistrées dans la base de données de cet utilisateur.

C'est ce que j'ai essayé.

function X_member_user_table( $columns ) {
    $columns['dbem_X_member_f'] = 'Member';
    $columns['dbem_X_delegate_f'] = 'Delegate';
    $columns['dbem_X_sponsor_f'] = 'Sponsor';
    return $columns;
}
add_filter( 'manage_users_columns', 'X_member_user_table' );

function X_modify_user_table_row( $val, $column_name, $user_id ) {
    $column_value = get_the_author_meta($column_name,$user_id );
    //return "<input type='checkbox' name='".$column_name_.$user_id."' value='".$column_value."' id='".$column_name_.$user_id."'/>";
    //return "<input onclick='$(form).serialize();' type='checkbox' name='{$column_name}[]' id='{$column_name}_{$user_id}' class='$role'    value='{$user_id}' />";
    $checkbox = '<label class="screen-reader-text" for="cb-select-'.$column_name."_" . $user_id . '">' . '</label>'
                    . "<input type='checkbox' name='{$column_name}[]' id='user_{$column_name}_{$user_id}' class='$role' value='{$column_value}' />";
    return $checkbox;
}
add_filter( 'manage_users_custom_column', 'X_modify_user_table_row', 10, 3 );

Je peux obtenir la case à cocher dans la table des utilisateurs. Maintenant, la question est de savoir comment obtenir le code in $GET ou $POST lorsque l'utilisateur clique sur le lien Approuver. Ce lien ne fait que rediriger la page et ne soumet pas la page afin que je ne pense pas qu'il viendra en post.

J'ai créé la méthode ci-dessous pour obtenir des données dans les attributs GET. Dois-je utiliser jQuery pour créer des données?

function X_user_row_actions($actions, $user_object){
    $current_user = wp_get_current_user();
    $u = $user_object->ID;
    if ( $current_user->ID != $user_object->ID ) {
        /*if ( in_array( 'pending', (array) $user_object->roles ) ) {
            switch ( get_option( 'type' ) ) {
                case 'admin' :*/
                    // Add "Approve" link
                    $actions['approve-X-user'] = sprintf( '<a href="%1$s">%2$s</a>',
                        add_query_arg( 'wp_http_referer',
                            urlencode( esc_url( stripslashes( $_SERVER['REQUEST_URI'] ) ) ),
                            wp_nonce_url( "users.php?action=approve&amp;user=$user_object->ID&amp;dbem_X_member_f=1", 'approve-X-user' ) 
                        ),
                        __( 'Approve with changes', 'theme-my-login' )
                    );
                    //break;
            //}
        //}
    }
    return $actions;
    echo "<pre>";
    print "X row";
    print_r($actions);
    print_r($user_object);
    echo "</pre>";
    return $actions;
    //exit;
}
add_filter( 'user_row_actions', 'X_user_row_actions' , 10, 2 );

Cependant cela ne fonctionne pas. Y a-t-il un crochet à utiliser lorsque vous cliquez sur Approuver ou modifier son statut?

1
Bhavin Shah

Oui, nous avons besoin de jQuery pour cela. La première chose à faire est de donner les classes et les identifiants appropriés aux éléments.

Dans manage_users_custom_column, ajoutez une classe et un sélecteur de données à la case à cocher:

"<input type='checkbox' data-approval='#approval-$user_id' class='my-class' value='{$column_value}' />"

Et dans user_row_actions, un identifiant pour la balise <a>: id='approval-$user_id'.

Maintenant, nous avons toutes les propriétés des éléments et pouvons manipuler l'URL du Approve with changes liens.

add_action( 'admin_footer-users.php', 'print_jquery_wpse_117481' );

function print_jquery_wpse_117481() 
{
    ?>
    <script type="text/javascript">
    jQuery(document).ready(function($) 
    {
        $('.my-class').click(function(e) 
        {
            console.log( 'Is checked: ' + $(this).is(':checked') );
            console.log( 'This ID: ' + $(this).attr('id') );

            var a_href_approval_id = $(this).data('approval');
            var a_href_final = $( a_href_approval_id ).attr('href');
            console.log( 'Manipulate this attribute: ' + a_href_final );
        });
    });
    </script>
    <?php
}

Indice: utilisez sprintf pour construire $checkbox.

1
brasofilo