Supporto » Sviluppare con WordPress » domanda elementare, aggiungere stringhe in array

  • anonymized-14293447

    (@anonymized-14293447)


    alle prime armi, sto studiando una piccola funzione

    $types = array("post", "page", "company", "portfolio", "events");
    $status = "draft";

    come posso aggiungere “nuovi utenti” (users) al primo array e fare in modo che il secondo diventi un array, sul quale posso aggiungere “pending” e “published”?

Stai visualizzando 8 risposte - dal 1 al 8 (di 8 totali)
  • Thomas Vitale

    (@thomas-vitale)

    Ciao @arsenalemusica,

    non ho ben capito la domanda, potresti darci qualche dettaglio in più?

    Nel frattempo provo a rispondere. In PHP per aggiungere un nuovo elemento in un array puoi utilizzare la funzione array_push() in questo modo:

    array_push($types, "nuovo elemento");

    Non so il contesto, ma se hai la possibilità di cambiare la definizione della variabile $status, scriverei direttamente qualcosa del genere:

    $status = array("draft", "pending", "published");

    Spero di essere stato d’aiuto,

    Thomas

    Chi ha creato la discussione anonymized-14293447

    (@anonymized-14293447)

    Grazie per la info. Sto utilizzando una funzione per far comparire le notification bubbles nel menu admin:

    function show_pending_bubble_number($menu) {    
        $types = array("post", "page", "claim_listing", "company", "portfolio", "events", "deals", "blog");
        $status = "draft";
        foreach($types as $type) {
            $num_posts = wp_count_posts($type, 'readable');
            $pending_count = 0;
            if (!empty($num_posts->$status)) $pending_count = $num_posts->$status;
    
            if ($type == 'post') {
                $menu_str = 'edit.php';
            } else {
                $menu_str = 'edit.php?post_type=' . $type;
            }
    
            foreach( $menu as $menu_key => $menu_data ) {
                if( $menu_str != $menu_data[2] )
                    continue;
                $menu[$menu_key][0] .= " <span class='update-plugins count-$pending_count'><span class='plugin-count'>" . number_format_i18n($pending_count) . '</span></span>';
                }
            }
        return $menu;
    }
    add_filter('add_menu_classes', 'show_pending_bubble_number');

    Praticamente, vorrei che le notifiche $types mi arrivino non solo ogni volta che viene creato un CPT (post, portfolio, etc.) ma anche ogni volta che un nuovo utente si registra.
    E poi ho bisogno che, dei suddetti, il sistema mi avverta non solo per uno $status in draft, ma anche in pending/published.
    Mi sembra che il tuo suggerimento vada nella giusta direzione. Adesso lo provo ed eventualmente chiudo questo thread.

    Chi ha creato la discussione anonymized-14293447

    (@anonymized-14293447)

    no, il suggerimento di Thomas non sembra funzionare….

    Chi ha creato la discussione anonymized-14293447

    (@anonymized-14293447)

    questo post non è “risolto”

    Thomas Vitale

    (@thomas-vitale)

    Guardando la funzione ho capito un po’ meglio la situazione.

    Per quanto riguarda lo $status, potresti sostituire

    $status = "draft";

    con

    $status_array = array("draft", "published", "pending");

    Dopodiché all’interno della funzione bisogna adattare un po’ il codice sostituendo

    $pending_count = 0;
    if (!empty($num_posts->$status)) $pending_count = $num_posts->$status;

    con

    $pending_count = 0;
    foreach($status_array as $status) {
       if (!empty($num_posts->$status)) 
          $pending_count += $num_posts->$status;
    }

    In questo modo si avrà la notifica con il numero totale di post draft, pending o published.

    Thomas Vitale

    (@thomas-vitale)

    Per gestire le notifiche relative agli utenti, invece, la situazione è più complicata. Mi viene in mente una soluzione, provo a schematizzarla (ipotizzo di fare tutto queste cose all’interno di un plugin):

    – definisco un nuovo campo nel DB e una nuova variabile che contenga il numero di nuovi utenti registrati dall’ultima volta che si è fatto l’accesso alla bacheca di WP.
    – definisco una funzione che incrementi tale variabile ogni volta che un utente viene creato.
    – aggancio tale funzione all’hook user_register oppure ricorro alla funzione wp_new_user_notification() e la scrivo direttamente all’interno.
    – nella tua funzione show_pending_bubble_number($menu), dopo il blocco foreach($types as $type), aggiungo:

    `$menu_str = ‘users.php’;

    foreach( $menu as $menu_key => $menu_data ) {
    if( $menu_str == $menu_data[2] )
    $menu[$menu_key][0] .= ” <span class=’update-plugins count-$pending_count’><span class=’plugin-count’>” . number_format_i18n($new_user_count) . ‘</span></span>’;
    }`

    dove $new_user_count è il valore contenuto nella variabile definita all’inizio e contenente il numero di nuovi utenti registrati.

    – dopo questa funzione resetto $new_user_count nel db.

    Tutta questa complessità deriva dal fatto che WordPress non memorizza lo stato degli utenti appena registrati come accade per i post in bozza o pubblicati, perché non esiste proprio uno stato relativo a quello.

    Spero di averti fornito qualche spunto utile per progettare la tua soluzione e risolvere il problema.

    Thomas

    Chi ha creato la discussione anonymized-14293447

    (@anonymized-14293447)

    [c’è un problema con WP forum, ho letto la tua risposta per email ma qui non compare]
    Dunque non è il mio tema che manca di qualche funzione, ma proprio WP che non permette notifiche sugli utenti. Le tue informazioni sono molto utili, ti confermo che la prima parte relativa a $status funziona bene. Adesso mi devo studiare la seconda parte, ed eventualmente pubblicherò qui la soluzione.

    Thomas Vitale

    (@thomas-vitale)

    Risolto il problema con la risposta, spero ti sia d’aiuto!

Stai visualizzando 8 risposte - dal 1 al 8 (di 8 totali)
  • Il topic ‘domanda elementare, aggiungere stringhe in array’ è chiuso a nuove risposte.