You can add support for the built-in Custom Header feature:
https://developer.wordpress.org/themes/functionality/custom-headers/
Or use the Customize API to add your own control to the Customizer for selecting the image:
https://developer.wordpress.org/themes/customize-api/
The Custom Header feature is basically just a shortcut for using the Customize API to add a control, but you have less control over what the field is named etc.
Related Posts:
- Link to specific Customizer section
- When cropping a header image, retain meta data (i.e. name, description, etc.) from original image?
- How to refresh WordPress Customizer panel upon entering a value
- Looking for a way to load a function after customizer preview refresh complete
- Display custom_background outside wp_head()
- How do I change Twenty Nineteen’s primary color without using the color slider in the theme customizer?
- Register theme customizer settings when theme activates [duplicate]
- How to change the themes “Live Preview” url within the Appearance->Themes page?
- Theme Customizer – How to create a sub panel
- How to conditionally display widgetized areas in theme customizer?
- Create more than one section in Theme Customizer
- How do you approach block structured content?
- Own Theme Customizer displays error message when saving, saving still works
- Child Theme not overriding a template section on live site – but is on local site
- How do I remove ‘Active Theme’ section from Customizer?
- Color Options from Theme Customizer API not returning via get_theme_mod()
- wordpress-theme 2017: featured image behaviour: where to set the height of the featured image?
- WordPress customizer extremely slow, cant work in it
- Issues with dynamic widget in theme customizer
- Theme customizer hiding sections
- WP Customize API Checkbox change value
- WordPress Customazation API section in section
- Page structure using The Customizer Api
- WordPress Theme redirects to the Index page – Theme customizer problem
- What’s the best way to go from a design to a customized WordPress site?
- W3 Total Cache, CDN and theme files [closed]
- Dynamic template serving, change theme_root using add_filter from current theme
- is_front_page only works in theme file, and does not work in functions.php
- Splitting an Evolving Site into Multiple Sites, or Maintaining as One Site?
- What are nulled themes?
- How to use same theme template for multiple taxonomy terms?
- WP Video media player not loading correct CSS after AJAX load
- Copying theme from Localhost to Live does not copy all theme settings with it?
- Making the Header on the Twenty Ten Theme Less Tall?
- hfeed CSS class in Twentyeleven Theme
- Passing array in add_option()
- Which is the most well coded and semantically correct naked/blank WordPress theme (based on WordPress coding standards)?
- How Can I Create a List of Values to Be Iterated Through via WordPress Customization API?
- Cannot find the code for “Edit This” link in posts in a specific theme
- How do I apply my CSS to a theme page?
- How to get the post-ID in my plugin?
- Parallax WordPress theme without hardcoding – possible?
- Embedded Videos (PB) – Not Available
- Recommended Themes for a Developer-related Topics Blog?
- none of my css is working in my child theme
- Custom branding / theme specified by URL
- New custom theme option (text input) giving index error
- Upgrading from 2.9.4 to 3.0.x and with a custom theme
- CSS for triggering Avada toggles using an image or clickable element [closed]
- Customizer: active_callback and sanitize_callback incompatibility?
- Change WordPress Theme automatically for A/B test
- display comment form for specific post id
- How to use one theme for multiple WordPress sites?
- Update wordpress theme without customization loss
- How to add logo in Thematic
- How to create a new copy of a theme currently being used?
- Creating a job board using WordPress (for free)? [closed]
- How to transform a custom made static HTML website to a WordPress website [closed]
- Need to edit themes HTML code
- Newbie wordpress question re banner height
- Issue with theme mod options during domain migration
- FTP + Unable to locate WordPress content directory (wp-content)
- How to add custom JS file in WordPress Child theme with get_theme_file_uri
- Adding the jQuery to my theme that already exists in WordPress?
- Interpretation and explanation of register sidebar
- How to access theme fonts using custom CSS style? [closed]
- Removing the references to the wp-content folder
- How to hide title on ‘highlights’ – Themify feature
- WordPress setup one database with two different website?
- Cannot update a file for my theme
- Do all themes accommodate all features?
- How to reduce Header at the top of the page
- Custom fields not displaying on front end
- Change “published by”
- 12 column grid layout
- Remove style id inline CSS in WordPress
- Where to find child themes?
- Change name of WP content > Themes folder
- How to get dynamic template-function generated CSS into HEAD?
- Theme Dev | Convert Template to Theme
- How to Solve the WordPress Cron Job Site Slow down Problem?
- How do I get the path to the currently in use theme’s directory?
- Pagination not working in home page
- Show part of front page on another page [closed]
- Premium theme – hardcoded url?
- Any Mobile Theme Switcher – Theme not complete (Stylesheet missing)
- permissions on themes directory
- Categorising themes by folders in backend
- My site looks different when activating new theme
- Theme Options Menu Item – Permission Issue
- suspicious boolean.php file in wp web root [closed]
- Rest API does not work after changing WordPress Theme
- totally confused about editing wp theme….new guy to wp
- WooCommerce My Account Shortcode
- How to change twentytwelve child theme site title separator
- Header Paperpunch theme disappers with IE9 [closed]
- Why does twentysixteen take a free hand in dealing with longstanding usability principles? [closed]
- Issue with customizer and widget page
- Disabling Full Site Editor (FSE)
- get_post_meta() doesn’t allow email