Supporto » Sviluppare con WordPress » meta query della tabella usermeta

  • Risolto guardiano78

    (@guardiano78)


    Buonasera,

    ho la necessità di recuperare l’id utente conoscendo nome e cognome inserito nella key di woocommerce “billing_company”.
    Siccome non so se nel meta value c’è scritto prima il nome e poi il cognome o viceversa, ho creato la seguente funzione:

    
    function GetUserIdEmail($billing_company)
    {
        $nome_pulito = trim($billing_company);
        $nominativo = explode(" ",$nome_pulito);
        
        $args = [
            'meta_query'     => [
                    'relation' => 'AND',
                    [
                        'key'     => 'billing_company',
                        'value'   => $nominativo[1],
                        'compare' => 'LIKE'
                    ],
                    [
                        'key'     => 'billing_company',
                        'value'   => $nominativo[0],
                        'compare' => 'LIKE'
                    ],
                ],
            ];
            
    
        $utente = get_users($args);
        return $utente[0]->ID;
    }

    Funziona! … però questa va bene se c’è un cognome e un nome (es. Mario Rossi). Se il soggetto ha più di un nome (es. Mario Antonio Rossi) o ha un nominativo ancora più complicato, la funzione non va più bene. Cosi l’ho trasformata:

    
    function GetUserIdEmail($billing_company)
    {
        $nome_pulito = trim($billing_company);
        $nominativo = explode(" ",$nome_pulito);
        
        $str = array();
        if ( count( $nominativo ) > 1 ) { 
            $args['relation'] = 'AND';
    
            foreach($nominativo as $tag) { 
                $args[] = array( 'key' => 'billing_company', 'value' => $tag, 'compare' => 'LIKE' );
            }
        } 
        else 
        { 
            $args = array( 'key' => 'billing_company', 'value' => $nome_pulito);
        }
        
        $utente = get_users($args);
        return $utente[0]->ID;
    }
    

    stampando l’array si legge così:

    
    Array
    (
        [relation] => AND
        [0] => Array
            (
                [key] => billing_company
                [value] => Mario
                [compare] => LIKE
            )
    
        [1] => Array
            (
                [key] => billing_company
                [value] => Rossi
                [compare] => LIKE
            )
    
    )

    ottengo un risultato, ma è un risultato sbagliato.
    Come mai? cosa sbaglio?

    Ringrazio anticipatamente ogni suggerimento.

    Saluti,
    Renato

    • Questo topic è stato modificato 2 settimane, 2 giorni fa da guardiano78.
    • Questo topic è stato modificato 2 settimane, 2 giorni fa da guardiano78.
    • Questo topic è stato modificato 2 settimane, 2 giorni fa da guardiano78.
Stai visualizzando 1 risposte (di 1 totali)
  • Chi ha creato la discussione guardiano78

    (@guardiano78)

    buongiorno,
    ho trovato il problema … dimenticavo di aggiungere [‘meta_query’];
    Scrivo la funzione definitiva nel caso dovesse servire a qualcuno.

    function GetUserId($billing_company)
    {
        $nome_pulito = trim($billing_company);
        $nominativo = explode(" ",$nome_pulito);
        
        $str = array();
        if ( count( $nominativo ) > 1 ) { 
            $args['meta_query']['relation'] = 'AND';
    
            foreach($nominativo as $tag) { 
                $args['meta_query'][] = array( 'key' => 'billing_company', 'value' => $tag, 'compare' => 'LIKE' );
            }
        } 
        else 
        { 
            $args['meta_query'][] = array( 'key' => 'billing_company', 'value' => $nome_pulito);
        }
        
        $utente = get_users($args);
        return $utente[0]->ID;
    }

    Saluti,
    Renato

Stai visualizzando 1 risposte (di 1 totali)
  • Devi essere collegato per rispondere a questo topic.