Viewing 10 posts - 1 through 10 (of 10 total)
  • Author
    Posts
  • #1017448

    Well there is on register-admin-options.php these settings which found there pendents in the Enfold Options we all can see if we like to influence Enfold Settings.
    i learned how to insert f.e. a new input field (apple touch icon) and i learned how to change the range on header_custom_size
    but now i’m looking for an easy child-theme solution to replace on ID : main_menu_preview only a part of the std value.

    The aim is to replace th pr-logo which is in that std value integrated as:
    <img id='pr-logo' src='".AVIA_BASE_URL."images/layout/logo_modern.png' alt=''/>

    i want to set up via a child-theme function a different directory. My trial was:

    function change_pr_logo_path( array $avia_elements = array() )
    {
    	$slug 	= "menu";
    	$id 	= 'main_menu_preview';
    	$index = -1;
    	
    	/** Find index of element to change*/
    	foreach( $avia_elements as $key => $element ){
    		if( isset( $element['id'] ) &&  ( $element['id'] == $id ) && isset( $element['slug'] ) && ( $element['slug'] == $slug ) ){
    			$index = $key;
    			break;
    		}
    	}
    	
    	/*** If key not found, return unmodified array*/
    	if( $index < 0 ){return $avia_elements;}
    
    	/*** Make your customizations*/
              $avia_elements[ $index ]['std'] =
              // i stuck here - how to replace only a part and not the whole bunch of the normal std value
    
    	/*** Return modified */
    	return $avia_elements;
    }
    add_filter( 'avf_option_page_data_init', 'change_pr_logo_path', 10, 1 );

    can you help me to find a maybe different way to replace the pr-logo (the easiest way is to replace the logos in the parent theme folder)

    #1017449

    The reason for looking on that was a question here on board to totaly customize the branding of the theme.
    To rename the theme and child-theme ; to have the style-sheet name customized etc. Even the nolink was easy to substitute. But this little logo and pr-logo is hard to replace on a child-theme manner.

    Looks this way:

    • This reply was modified 6 years, 1 month ago by Guenni007.
    #1018113

    Hi,

    Thank you for using Enfold.

    That is quite interesting. Try to use the str_replace function to replace a particular string with your own.

    std = str_replace("<img id='pr-logo' src='".AVIA_BASE_URL."images/layout/logo_modern.png' alt=''/>", "REPLACEMENT", $avia_elements[ $index ]['std']);
    

    Best regards,
    Ismael3`

    #1018190

    Yes that was the right hint :

    function change_pr_logo_path( array $avia_elements = array() )
    {
    	$slug 	= "menu";
    	$id 	= 'main_menu_preview';
    	$index = -1;
    	
    	/** Find index of element to change*/
    	foreach( $avia_elements as $key => $element ){
    		if( isset( $element['id'] ) &&  ( $element['id'] == $id ) && isset( $element['slug'] ) && ( $element['slug'] == $slug ) ){
    			$index = $key;
    			break;
    		}
    	}
    	
    	/*** If key not found, return unmodified array*/
    	if( $index < 0 ){return $avia_elements;}
    
    	/*** Make your customizations*/
    	$new = str_replace(
    		"<img id='pr-logo' src='".AVIA_BASE_URL."images/layout/logo_modern.png' alt=''/>", 
    		"<img id='pr-logo' src='".get_stylesheet_directory_uri()."/logo_modern.png' alt='MyLogo'/>", 
    		$avia_elements[ $index ]['std']);
        $avia_elements[ $index ]['std'] = $new ;
    
    	/*** Return modified */
    	return $avia_elements;
    }
    add_filter( 'avf_option_page_data_init', 'change_pr_logo_path', 10, 1 );

    _______

    but now i see – there is it twice ! it is on :

    "slug"	=> "header",
    "id" 	=> "default_header_target",

    too !
    is there a way to have this function not twice but to make an array to run this for both slugs and ids ?

    and the aim is : to insert the uploaded logo into this replacement

    #1018223

    could it be possible to globaly find an expression and replace it with another one in the whole $avia_elements without defining a slug and id.
    it is twice the same expression to change.?

    By the way : wasn’t it a good idea to have this on default : That preview shows on top the inserted uploaded logo ?

    #1018770

    Hi,

    You can try this code.

    function change_pr_logo_path( array $avia_elements = array() )
    {
        $old = AVIA_BASE_URL."images/layout/logo_modern.png";
        $new = 'http://localhost/kriesi/enfold/wp-content/uploads/2018/10/splash-orange-3.png';
    
    	/** Find index of element to change*/
    	foreach( $avia_elements as $key => $element ){
    		if( ((isset( $element['id'] ) &&  ( $element['id'] == 'main_menu_preview' ) && isset( $element['slug'] ) && ( $element['slug'] == 'menu'))) || ((isset( $element['id'] ) &&  ( $element['id'] == 'default_header_target' ) && isset( $element['slug'] ) && ( $element['slug'] == 'header'))) ) {
                $avia_elements[$key]['std'] = str_replace("<img id='pr-logo' src='".$old."' alt=''/>", 
                "<img id='pr-logo' src='".$new."' alt='MyLogo'/>", 
                  $avia_elements[$key]['std']);         
            }
    	}
    
    	/*** Return modified */
    	return $avia_elements;
    }
    add_filter( 'avf_option_page_data_init', 'change_pr_logo_path', 10, 1 );

    Just change the $new logo url.

    Best regards,
    Ismael

    #1019382

    Great – bowing in awe – can be closed – thats it!

    I’ve also written down your code in such a way as to better understand the logic:

    function change_pr_logo_path( array $avia_elements = array() )
    {
        $old = AVIA_BASE_URL."images/layout/logo_modern.png";
        $new = 'absolute path to the new …/logo_modern.png';
    
      /** Find index of element to change*/
      foreach( $avia_elements as $key => $element ){
        if( ((isset( $element['id'] ) &&  ( $element['id'] == 'main_menu_preview' ) && isset( $element['slug'] ) && ( $element['slug'] == 'menu'))) || 
            ((isset( $element['id'] ) &&  ( $element['id'] == 'default_header_target' ) && isset( $element['slug'] ) && ( $element['slug'] == 'header'))) ) 
            {
                $avia_elements[$key]['std'] = str_replace(
                  "<img id='pr-logo' src='".$old."' alt=''/>", 
                  "<img id='pr-logo' src='".$new."' alt='MyLogo'/>", 
                  $avia_elements[$key]['std']);         
            }
      }
      /*** Return modified */
      return $avia_elements;
    }
    add_filter( 'avf_option_page_data_init', 'change_pr_logo_path', 10, 1 );

    __________–

    Just one question – can we have this line to have automatically have the inserted mainlogo for it:
    that way would be more elegant then.
    $new = 'path to inserted logo';

    Or is it impossible to have this because logo itself is on line 1842 ff inserted – and that is later than the main_menu_preview ( line 480ff) ?

    #1019711

    Hi,

    Try to fetch the database option manually.

    
    global $avia;
    $data = get_option($avia->option_prefix);
    $old = AVIA_BASE_URL."images/layout/logo_modern.png";
    $new = $data['avia']['logo'];
    

    Best regards,
    Ismael

    #1019895

    yes – as alway from you – perfect solution!
    can be closed – you’ve sacrificed enough time for a minor problem now.

    #1020122

    Hi,

    Great! Closing the thread now. :)

    Best regards,
    Ismael

Viewing 10 posts - 1 through 10 (of 10 total)
  • The topic ‘child-theme solution for change an avia_element ?’ is closed to new replies.