Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    residenza
    Trieste
    Messaggi
    797

    inserire funzione in un echo

    Non sapendo nè leggere né scrivere, dovrei combinare due funzioni:
    La prima crea un widget
    Codice PHP:
    add_action('wp_dashboard_setup''my_custom_dashboard_widgets');

    function 
    my_custom_dashboard_widgets() {
       global 
    $wp_meta_boxes;
    wp_add_dashboard_widget('custom_help_widget''Diario''custom_dashboard_help');
    }

    function 
    custom_dashboard_help() { echo '<p>conteggio dei CPTs, degli utenti registrati, etc</p>'; } 

    Al posto dell'echo (quindi come contenuto del widget) dovrei mostrare il risultato di questa funzione

    Codice PHP:
    add_filter'dashboard_glance_items''custom_glance_items'10);
    function 
    custom_glance_items$items = array() ) {
        
    $post_types = array( 'company''portfolios''events''deals''blog' );
        foreach( 
    $post_types as $type ) {
            if( ! 
    post_type_exists$type ) ) continue;
            
    $num_posts wp_count_posts$type );
            if( 
    $num_posts ) {
                
    $published intval$num_posts->publish );
                
    $post_type get_post_type_object$type );
                
    $text _n'%s ' $post_type->labels->singular_name'%s ' $post_type->labels->name$published'your_textdomain' );
                
    $text sprintf$textnumber_format_i18n$published ) );
                if ( 
    current_user_can$post_type->cap->edit_posts ) ) {
                    
    $items[] = sprintf'%2$s'$type$text ) . "\n";
                } else {
                    
    $items[] = sprintf'<span class="%1$s-count">%2$s</span>'$type$text ) . "\n";
                }
            }
        }
        return 
    $items;

    E' ovvio che non le ho scritte io, ma sono due tutorial separati ed immagino non si possa buttare lì una funzione all'interno di un echo. Come si risolve in questi casi?

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    La funzione custom_glance_items() ritorna un array, quindi chiaramente non è direttamente stampabile con un echo, da cui consegue che pur "mettendo la funzione nell'echo" avresti in output una cosa che non va bene.

    In questi casi assegni il risultato della funzione custom_glance_items() ad una variabile, che quindi conterrà un array.
    Con un foreach cicli sull'array e costruisci una stringa con il testo contenuto in ogni entry, fatto questo concateni la variabile contenente la stringa ottenuta all'echo.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2007
    residenza
    Trieste
    Messaggi
    797
    quando intendevo che non sapevo nè leggere nè scrivere PHP ero serio pensavo ad una cosa più facile

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Conoscendo PHP, quanto ho scritto è decisamente semplice, si tratta solo di lavorare con le stringhe.
    Certo che se pensi di poter modificare del codice PHP senza saperne niente non ci riuscirai mai, almeno un minimo lo devi studiare, non puoi sperare di poter fare tutto col copia/incolla.

  5. #5
    Suppongo tu abbia entrambi gli snippets nel file functions.php
    Di conseguenza puoi richiamare la funzione custom_glance_items() anche dalla funzione custom_dashboard_help()

    Codice PHP:

    add_filter
    'dashboard_glance_items''custom_glance_items'10);
    function 
    custom_glance_items$items = array() ) {
        
    $post_types = array( 'company''portfolios''events''deals''blog' );
        foreach( 
    $post_types as $type ) {
            if( ! 
    post_type_exists$type ) ) continue;
            
    $num_posts wp_count_posts$type );
            if( 
    $num_posts ) {
                
    $published intval$num_posts->publish );
                
    $post_type get_post_type_object$type );
                
    $text _n'%s ' $post_type->labels->singular_name'%s ' $post_type->labels->name$published'your_textdomain' );
                
    $text sprintf$textnumber_format_i18n$published ) );
                if ( 
    current_user_can$post_type->cap->edit_posts ) ) {
                    
    $items[] = sprintf'%2$s'$type$text ) . "\n";
                } else {
                    
    $items[] = sprintf'<span class="%1$s-count">%2$s</span>'$type$text ) . "\n";
                }
            }
        }
        return 
    $items;
    }

    add_action('wp_dashboard_setup''my_custom_dashboard_widgets');
    function 
    my_custom_dashboard_widgets() {
       global 
    $wp_meta_boxes;
    wp_add_dashboard_widget('custom_help_widget''Diario''custom_dashboard_help');
    }

    function 
    custom_dashboard_help() { 
        
    $items=custom_glance_items( array() );//richiamo la funzione
        
    foreach($items as $item){//loop sull'array ritornato
            
    echo $item.'<br>'//stampo gli elementi dell'array
        
    }

    Nota che ho invertito l'ordine degli snippets

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2007
    residenza
    Trieste
    Messaggi
    797
    non ho molto tempo per imparare i segreti dello sviluppo, facendo un altro lavoro, ed ho anche tentato di capire PHP ma mi è difficile. Però non faccio mai copia-incolla se non prima studiandomi almeno come funzionano i codici. Non li so scrivere, ma almeno qualcosa su chi-fa-cosa riesco a capirlo.
    In questo caso ho fatto copia-incolla del codice di Lucavizzi che funziona. Grazie davvero.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.