Dynamically setting an image as the header image on a WordPress theme

I’m working on an interesting project using a Raspberry Pi Zero W computer with the Pi Camera module. Basically the idea is to take scheduled periodic photos via the Pi Zero and camera and then upload them to a WordPress site and then set the latest photo as the Header Image.

There was one thing that took me a little while to figure out and that was how to set the desired image as the header image in WordPress, I struggled to find anything whilst Googling so I thought I’d quickly write up a post about it.

Here’s a quick explanation of how the project works. The Pi Zero runs a shell script via a cron job and captures an image, this script triggers a PHP file which uploads the image via a CURL call to the WordPress site via the Media endpoint of the WordPress Rest API. Once the image is uploaded a custom WP API endpoint is called which then sets this image as the header image.

It’s this latter part that took a bit of time to figure out but it’s actually quite simple to do, the header image is set as part of the theme mods settings, specifically a theme mod called “header_image”, so all that’s needed is a call to the “set_theme_mod” function like so:

set_theme_mod(‘header_image’, ‘http://yourdomainhere.com/wp-content/uploads/yourimage.jpg’);

Basically pass the full url of the uploaded image you want to be the header image. For my script I got the full url of the image using the “wp_upload_dir()” function so my script looks like this:

$uploads = wp_upload_dir();

set_theme_mod( ‘header_image’, $uploads[‘url’] . ‘/’. $imagefilenamehere );

Anyway, hopefully that might be of help to someone else! Watch the line breaks in the above code don’t cause any problems.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

To respond on your own website, enter the URL of your response which should contain a link to this post's permalink URL. Your response will then appear (possibly after moderation) on this page. Want to update or remove your response? Update or delete your post and re-enter your post's URL again. (Find out more about Webmentions.)