Supporto » Fixing WordPress » Aggiungere importazioni a pagina admin plugin

  • r99photography

    (@r99photography)


    Buonasera, sono ultra ignorante in materia, non sono un nerd smanetton e e quindi non so come fare.
    Ho installato Post Views Counter e vorrei aggiungere una impostazione personalizzata a quelle già presenti.
    Sono giorni che sto cercando in Internet qualche spiegazione su come fare ad un aggiungere un custom setting ad un plugin che ha già le sue impostazioni, ma non c’è traccia di articolo che faccia al caso mio; forse sto cercando qualcosa che nessuno ha mai realizzato? Non credo…
    Vorrei aggiungere una opzione che permetta di selezionare la scrittura del numero di visite di una pagina con il codice html avente (o meno) le classi di default.
    Il problema è che questo plugin non si limita a estrapolare il numero delle visite, ma lo condisce con una sfilza di span e div che si poteva anche evitare e che mi vedo costretto a dover togliere usando una funzione custom nel chilo theme.
    Grazie se qualcuno vorrà aiutarmi.
    Ciao.

Stai visualizzando 5 risposte - dal 1 al 5 (di 5 totali)
  • Moderatore Guido Scialfa

    (@wido)

    Ciao @r99photography,

    Quando scrivi:

    Vorrei aggiungere una opzione che permetta di selezionare la scrittura del numero di visite di una pagina con il codice html avente (o meno) le classi di default.

    intendi proprio una textarea dove poter definire i tuo markup custom?

    Quale è il problema nell’uso di una funzione custom nel child theme? Su WordPress è in questo modo che si lavora.

    Considera che se il tuo obbiettivo è quello sopracitato ovvero modificare l’html tramite una option, sicuramente dovrai usare più hook di quante ne hai usate modificandolo via child theme.

    Chi ha creato la discussione r99photography

    (@r99photography)

    Ciao Guido,
    provo a spiegarmi meglio, non nascondo che essendo totalmente inesperto ho molta confusione in testa.
    Nel file settings.php del plugin è presente questo codice:

    if ( ! function_exists( 'pvc_post_views' ) ) {
    
    	function pvc_post_views( $post_id = 0, $echo = true ) {
    
    		// get all data
    		$post_id = (int) ( empty( $post_id ) ? get_the_ID() : $post_id );
    		$options = Post_Views_Counter()->options['display'];
    		$views = pvc_get_post_views( $post_id );
    
    		// prepares display
    		$label = apply_filters( 'pvc_post_views_label', (function_exists( 'icl_t' ) ? icl_t( 'Post Views Counter', 'Post Views Label', $options['label'] ) : $options['label'] ), $post_id );
    		$icon_class = ($options['icon_class'] !== '' ? ' ' . esc_attr( $options['icon_class'] ) : '');
    		$icon = apply_filters( 'pvc_post_views_icon', '<span class="post-views-icon dashicons ' . $icon_class . '"></span>', $post_id );
    
    		$html = apply_filters(
    		'pvc_post_views_html', '<div class="post-views post-' . $post_id . ' entry-meta">
    		' . ($options['display_style']['icon'] && $icon_class !== '' ? $icon : '') . '
    		' . ($options['display_style']['text'] ? '<span class="post-views-label">' . $label . ' </span>' : '') . '
    		<span class="post-views-count">' . number_format_i18n( $views ) . '</span>
    		</div>', $post_id, $views, $label, $icon
    		);
    
    		if ( $echo )
    			echo $html;
    		else
    			return $html;
    	}
    
    }

    Come scrivevo, il codice HTML restituito (vedi $html) ha una serie di <span> e <div> che non desidero. Per questo motivo, nel functions.php file del mio child theme, sfruttando l’hook pvc_post_views_html ho inserito questa funzione:

    add_filter('pvc_post_views_html', 'r99_post_views_html');
    	function r99_post_views_html () {
    
    	$html = '<span class="post-stats">' . pvc_get_post_views( get_the_id() ) . '</span>';		
    	
    	return $html;
    	}

    L’$html è veramente basic, ma è quello che voglio: un semplice numero senza alcuna formattazione, classe o quant’altro (icone, etichette….), che poi decido io nel CSS stylesheet e nel single.php.
    Il problema dove sta, sta nel fatto che con le modifiche apportate alcune impostazioni del plugin sono state rese completamente innoque. Se vedi il mio $html non riporta alcune variabili ($icon, $label) che traggono valore in base a come vengono determinate l’etichetta e l’icona nei settings del plugin. In futuro, qualora non mi ricordassi di questa personalizzazione che ho fatto, potrei trovarmi a impostare l’icona o l’etichetta dal menù di opzioni del plugin e non vederla funzionare, non ricordandomi di aver fatto delle aggiunte nel functions.php del child theme.
    Quello che vorrei pertanto è:
    1. inserire tra i settings del plugin una option (SI/NO) con cui seleziono se voglio l’$html originaria (con le classi e il layout stabilito dallo sviluppatore del plugin) oppure la funzione da me creata (quella esposta).
    2. nel file functions.php del child theme, tramite un If andare a leggere l’impostazione (SI/NO) selezionata e restituire o meno la funziona personalizzata.

    Mi rendo conto che la cosa è molto contorta, ma se hai delle soluzioni alternative più veloci, semplici e intuitive, ascolto con grande interesse e curiosità.
    Grazie mille intanto.

    Ciao.
    Riccardo

    Moderatore Guido Scialfa

    (@wido)

    Ciao @r99photography,

    Grazie per la spiegazione. Dunque, io opterei per la creazione di un secondo plugin da cui agganciare le option e le hook. Ma a parte questo, il plugin da quello che vedo fa utilizzo delle funzioni di *settings* di wordpress, quindi dovresti poter essere in grado di agganciarti a tali funzioni ed aggiungere i tuoi fields.

    Se dai uno sguardo al file plugins/post-views-counter/includes/settings.php noterai che vi è definita una hook per admin_init che esegue il metodo register_settings proprio nel costruttore.

    add_action( 'admin_init', array( $this, 'register_settings' ) );

    Questo metodo fa delle chiamate per register_setting, add_settings_section etc… in pratica sfrutta le settings api di cui puoi informarti qui https://codex.wordpress.org/Settings_API.

    Tramite l’uso di https://codex.wordpress.org/Function_Reference/do_settings_fields puoi aggiungere dei fields nella section apposita.

    • Questa risposta è stata modificata 7 anni, 4 mesi fa da Guido Scialfa.
    Chi ha creato la discussione r99photography

    (@r99photography)

    Ciao,
    avevo analizzato il file plugins/post-views-counter/includes/settings.php e notato quello che hai indicato (l’uso della hook admin_init, la funzione register_settings e tutto ciò che la segue).
    Mi sono arenato perché ho provato a ripetere i medesimi passaggi svolti dallo sviluppatore (funzioni comprese), ma non ci sono riuscito e non so per quale motivo.
    Mi parli della do_settings_fields, ma io ho utilizzato le medesime funzioni dello sviluppatore (add_action, register_setting, add_settings_field…), forse è per quello?
    Abbi pazienza, ma sono veramente a livello “asilo”. 🙂
    Grazie ancora. Ciao.

    Moderatore Guido Scialfa

    (@wido)

    Ciao @r99photography,

    Con do_settings_fields mostri i fields, se non ti appaiono è probabile che sia per questo se hai fatto tutto correttamente.

    Giusto per essere un pò più allineati via codice, potresti caricare su http://pastebin.com/ per esempio il codice da te usato o creare un gist in modo che sia possibile provarlo?

Stai visualizzando 5 risposte - dal 1 al 5 (di 5 totali)
  • Il topic ‘Aggiungere importazioni a pagina admin plugin’ è chiuso a nuove risposte.