Un utente ha chiesto
Categoria: Twenty Nineteen di WordPress
Domanda: Aggiungi/modifica icone SVG

Ciao,

Ho usato venti diciannove come tema principale e vorrei cambiare i percorsi SVG senza sovrascrivere i file principali.

Inoltre, qualcuno può dirmi la differenza tra percorsi svg “ui” e percorsi “social”?

grazie
Laura

  • (@anoktear)

    Ciao @whonickedmyname.
    Sto cercando di cambiare le ellissi svg per il menu mobile.
    Si chiama in questo file: template-functions.php

    Quindi ho collegato il mio tema figlio functions.php per sostituirlo, in questo modo:

    function replace_ellipses() {
        if ( function_exists('twentynineteen_add_ellipses_to_nav') ) {
            remove_filter( 'wp_nav_menu', 'twentynineteen_add_ellipses_to_nav', 10, 2 ); 
        }
        function twentynineteen_add_new_ellipses_to_nav( $nav_menu, $args ) {
    
            if ( 'menu-1' === $args->theme_location ) :
        
                $nav_menu .= '<div class="main-menu-more">';
                $nav_menu .= '<ul class="main-menu">';
                $nav_menu .= '<li class="menu-item menu-item-has-children">';
                $nav_menu .= '<button class="submenu-expand main-menu-more-toggle is-empty" tabindex="-1" aria-label="More" aria-haspopup="true" aria-expanded="false">';
                $nav_menu .= '<span class="screen-reader-text">' . esc_html__( 'More', 'twentynineteen' ) . '</span>';
                $nav_menu .= twentynineteen_get_icon_svg( 'new_arrow_drop_down_ellipsis' );
                $nav_menu .= '</button>';
                $nav_menu .= '<ul class="sub-menu hidden-links">';
                $nav_menu .= '<li id="menu-item--1" class="mobile-parent-nav-menu-item menu-item--1">';
                $nav_menu .= '<button class="menu-item-link-return">';
                $nav_menu .= twentynineteen_get_icon_svg( 'chevron_left' );
                $nav_menu .= esc_html__( 'Back', 'twentynineteen' );
                $nav_menu .= '</button>';
                $nav_menu .= '</li>';
                $nav_menu .= '</ul>';
                $nav_menu .= '</li>';
                $nav_menu .= '</ul>';
                $nav_menu .= '</div>';
        
            endif;
        
            return $nav_menu;
        }
        add_filter( 'wp_nav_menu', 'twentynineteen_add_new_ellipses_to_nav', 10, 2 );
    }
    add_action( 'wp_enqueue_scripts', 'replace_ellipses', 0 );

    Ho quindi modificato la riga: $nav_menu .= twentynineteen_get_icon_svg( 'arrow_drop_down_ellipsis' );

    a:
    $nav_menu .= twentynineteen_get_icon_svg( 'new_arrow_drop_down_ellipsis' );

    new_arrow_drop_down_ellipsis è il codice svg che sto chiamando per l’icona.
    Le icone sono impostate come codice svg nel file classe-novantanove-svg-icons.php dentro Classi cartella.
    Quello che ho fatto è stato ricreare questa cartella e questo file nel tema del mio bambino e inserire il codice svg della nuova icona con il new_arrow_drop_down_ellipsis identificatore.

    La funzione funziona, ma l’SVG non si carica…

    (@anoktear)

    La domanda per me è come fare riferimento alle classi / class-twentynineteen-svg-icons.php nel tema figlio.

    (@anoktear)

    Ok, questo è quello che ho fatto:
    Innanzitutto, ho replicato le classi / class-twentynineteen-svg-icons.php sul tema figlio.
    Rinominato in class-mytheme-svg-icons.php.

    Aggiungere un’estensione con my New_SVG_Icons classificare:

    
    class New_SVG_Icons extends TwentyNineteen_SVG_Icons {
    
    	/**
    	 * Gets the SVG code for a given icon.
    	 */
    	public static function get_svg( $group, $icon, $size ) {
    		if ( 'ui' == $group ) {
    			$arr = self::$ui_icons;
    		} elseif ( 'social' == $group ) {
    			$arr = self::$social_icons;
    		} else {
    			$arr = array();
    		}
    		if ( array_key_exists( $icon, $arr ) ) {
    			$repl = sprintf( '<svg class="svg-icon" width="%d" height="%d" aria-hidden="true" role="img" focusable="false" ', $size, $size );
    			$svg  = preg_replace( '/^<svg /', $repl, trim( $arr[ $icon ] ) ); // Add extra attributes to SVG code.
    			$svg  = preg_replace( "/([nt]+)/", ' ', $svg ); // Remove newlines & tabs.
    			$svg  = preg_replace( '/>s*</', '><', $svg ); // Remove white space between SVG tags.
    			return $svg;
    		}
    		return null;
    	}
    
    	/**
    	 * User Interface icons – svg sources.
    	 *
    	 * @var array
    	 */
    	static $ui_icons = array(
    		'new_drop_down_ellipsis' => /* custom – ao_drop_down_ellipsis */ '
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
    	<path fill="none" d="M0 0h24v24H0V0z"/>
    	<path d="M2 2v20h20V2H2zm4 12c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm6 0c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm6 0c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"/>
    </svg>',
    
    	);
    }
    

    Tornando al file functions.php del tema figlio, ho aggiunto il percorso del file replicato:

    
    function include_extra_svg() {
    	require_once get_theme_file_path( 'classes/class-mytheme-svg-icons.php' );
    }
    add_action( 'wp_enqueue_scripts', 'include_extra_svg' );
    

    Successivamente, faccio riferimento a questa funzione e classe a quelle che avevo prima:

    
    function replace_ellipses() {
        if ( function_exists('twentynineteen_add_ellipses_to_nav') ) {
            remove_filter( 'wp_nav_menu', 'twentynineteen_add_ellipses_to_nav', 10, 2 );
        }
        function twentynineteen_add_new_ellipses_to_nav( $nav_menu, $args ) {
    
            function mytheme_get_icon_svg( $icon, $size = 24 ) {
                return New_SVG_Icons::get_svg( 'ui', $icon, $size );
            }
    
            if ( 'menu-1' === $args->theme_location ) :
    
                $nav_menu .= '<div class="main-menu-more">';
                $nav_menu .= '<ul class="main-menu">';
                $nav_menu .= '<li class="menu-item menu-item-has-children">';
                $nav_menu .= '<button class="submenu-expand main-menu-more-toggle is-empty" tabindex="-1" aria-label="More" aria-haspopup="true" aria-expanded="false">';
                $nav_menu .= '<span class="screen-reader-text">' . esc_html__( 'More', 'twentynineteen' ) . '</span>';
                $nav_menu .= mytheme_get_icon_svg( 'ao_drop_down_ellipsis' );
                $nav_menu .= '</button>';
                $nav_menu .= '<ul class="sub-menu hidden-links">';
                $nav_menu .= '<li id="menu-item--1" class="mobile-parent-nav-menu-item menu-item--1">';
                $nav_menu .= '<button class="menu-item-link-return">';
                $nav_menu .= twentynineteen_get_icon_svg( 'chevron_left' );
                $nav_menu .= esc_html__( 'Back', 'twentynineteen' );
                $nav_menu .= '</button>';
                $nav_menu .= '</li>';
                $nav_menu .= '</ul>';
                $nav_menu .= '</li>';
                $nav_menu .= '</ul>';
                $nav_menu .= '</div>';
    
            endif;
    
            return $nav_menu;
        }
        add_filter( 'wp_nav_menu', 'twentynineteen_add_new_ellipses_to_nav', 10, 2 );
    }
    add_action( 'wp_enqueue_scripts', 'replace_ellipses', 0 );
    

    ed ecco qua!
    Non so se questo è l’approccio migliore, ma funziona.

Hai risolto il tuo problema?

0 / 0

Lascia un commento 0

Il tuo indirizzo email non sarà pubblicato. Required fields are marked *