0

I have created a section inside the admin menu, Where it is possible to upload the logo, How can I replace this uploaded image with wordpress logo(header_image())? //admin dashboard page

<img alt="" src="<?php header_image() ?>">
        <form action="<?php echo get_stylesheet_directory_uri() ?>/process_upload.php" method="post" enctype="multipart/form-data">
            Your Logo: <input type="file" name="profilepicture" size="25" />
            <input type="submit" name="submit" value="Submit" />
        </form>

//upload process code

<?php
require( dirname(__FILE__) . '/../../../wp-load.php' );
$theme_root = get_theme_root();
$wordpress_upload_dir = wp_upload_dir();
$i = 1; 

$profilepicture = $_FILES['profilepicture'];
$new_file_path = $wordpress_upload_dir['path'] . '/' . $profilepicture['name'];
$new_file_mime = mime_content_type( $profilepicture['tmp_name'] );

if( empty( $profilepicture ) )
    die( 'File is not selected.' );

if( $profilepicture['error'] )
    die( $profilepicture['error'] );
    
if( $profilepicture['size'] > wp_max_upload_size() )
    die( 'It is too large than expected.' );
    
if( !in_array( $new_file_mime, get_allowed_mime_types() ) )
    die( 'WordPress doesn\'t allow this type of uploads.' );
    
while( file_exists( $new_file_path ) ) {
    $i++;
    $new_file_path = $wordpress_upload_dir['path'] . '/' . $i . '_' . $profilepicture['name'];
}

// looks like everything is OK
if( move_uploaded_file( $profilepicture['tmp_name'], $new_file_path ) ) {
    

    $upload_id = wp_insert_attachment( array(
        'guid'           => $new_file_path, 
        'post_mime_type' => $new_file_mime,
        'post_title'     => preg_replace( '/\.[^.]+$/', '', $profilepicture['name'] ),
        'post_content'   => '',
        'post_status'    => 'inherit'
    ), $new_file_path );

    // wp_generate_attachment_metadata() won't work if you do not include this file
    require_once( ABSPATH . 'wp-admin/includes/image.php' );

    // Generate and save the attachment metas into the database
    wp_update_attachment_metadata( $upload_id, wp_generate_attachment_metadata( $upload_id, $new_file_path ) );

    // Show the uploaded file 'in browser
    wp_redirect( admin_url( '/admin.php?page=coalition-setting' ) );

}
2
  • And what is your question?
    – kero
    Nov 4, 2021 at 12:56
  • how can i change header_image() , with my uploaded image Nov 4, 2021 at 13:26

1 Answer 1

1

To be honest I don't fully understand why you need this custom code to upload images, it should be possible with the default settings.

To answer your question:

If you dig a bit through the code, you'll see that

  1. header_image() calls get_header_image() and returns that
  2. get_header_image() calls get_theme_mod('header_image', ...) and will return that (as long as its not remove-header or is_random_header_image() returns true).
  3. get_theme_mod() now finally introduces a filter: theme_mod_{$name}

So, the following filter should be able to change the header image to whatever you want:

add_filter('theme_mod_header_image', function ($originalValue) {
    // return URL to your desired image
});
2
  • 1
    Right now I was testing it and this works 100%, just don't forget return. Was just about to write an answer =] Nov 4, 2021 at 13:43
  • Thanks for the full explanation, Nov 4, 2021 at 17:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.