Campaign Archive Block for Mailchimp – show an archive of your newsletter on your website

This is the last blog post in this year’s advent calendar covering plugins I use. And just like yesterday, it is a plugin that I wrote, because there was no satisfying solution from the platform. The website offers a newsletter using Mailchimp. In newsletter mails, you often find a link to an anonymous web version of the email. This is also available for Mailchimp newsletters. But listing all those “archive emails” was not that easy. There is a snippet from Mailchimp, but this is using some external JavaScript. That script is using one document.write() call to show the archive on a page, and there is almost no chance to modify the look of this list. It also used a date format MM/DD/YYY and title attributes on the link, which is really bad for accessibility. All in all, the snippet is pretty useless.

The only “solution” we had to get a nice archive was adding them manually to a static page with the title and archive link, after each newsletter was sent out. But this became an annoying task over time, since you can schedule a newsletter, but had to remember yourself to update this static archive page. So, long story short, I’ve created a plugin to dynamically show the archive.

What does the plugin do?

The Campaign Archive Block for Mailchimp plugin implements a single block to pull the archive for a Mailchimp newsletter using their API. I first implemented it as a “normal plugin” with a small settings page for the API key. But then I converted it into a “Block Plugin” which can be installed from within the block editor and be used right away. This was a great learning opportunity for me. And it was equally satisfying to delete the settings page for the plugin – I really don’t like settings pages. 😅

If one of the official Mailchimp plugins is already installed and configured on the website, it uses the same API key. If none of those is installed, the API key can be added (and removed) in the block settings. The other settings of the block allow you to define the number of mails from the archive to list, you can decide to either use the mail title or subject, and you can show the sender, date and time, if you want to.

Why do I use the plugin?

I use it, because there is no official plugin to show an archive. Many newsletter providers offer official plugins to add a sign-up form to your website. But I have not found a single one that also has a plugin to show and archive of previous mails. That’s why, again, I wrote my own solution. And since Mailchimp is one of the largest newsletter providers, I’ve published the plugin in the WordPress.org Plugin Directory.

Conclusion

Just like in the plugin I presented yesterday, I could not find a good solution for my requirement to integrate a Mailchimp newsletter archive into a website. But fortunately, the Mailchimp API is quite flexible and had just the right endpoint for me. I’m also working on a new feature that would allow you to only show mails from a specific campaign folder.

I also thought about creating a similar plugin for CleverReach, a newsletter provider that is quite popular in Germany, but their API credentials handling is too complicated to be used in a block plugin. Since I don’t use any other big newsletter provider in any of my projects, I also haven’t checked their APIs.

Do you write a newsletter? And do you also list older mails on your website? Then how do you do it?

Final words on the plugin advent calendar

It was fun writing all these blog posts in the past days. It was also a lot of work, and on three Sundays, I was not able to publish the next one at midnight. But life sometimes have other plans for you. I still managed to publish all blog posts on intended plugin advent calendar day.

Did you like my blog posts and the plugins I’ve shared? Which one was your favorite?

Embeds for ProvenExpert – show rating and testimonials on your website

After the alphabetical list of plugins I use, I want to present two plugins I wrote for a specific website, and then also shared. Today, we cover the first one, the Embeds for ProvenExpert plugin.

On the ProvenExpert, you can register as an expert and then get reviews and testimonials from others. They also offer different “rating seals” for your website. When I helped to integrate the seal into a website, there was only a very “hacky” PHP solution provided by ProvenExpert. This was not really satisfying for me, so I wrote a plugin and published it in the plugin directory.

What does Embeds for ProvenExpert do?

It implements multiple widgets to show the different ProvenExpert seals. Since each seal has some different options, while they share some others, I decided to create not just one widget, to make it easier to configure them. If you want to use the plugin, you have to create an API key. After storing this key in a small settings page, you are good to go and can add as many widgets as you want.

The plugin only supports widgets, so if you want to use it in a block based theme, you have to use the “Legacy Widget” block, if they are not visible in your block based widget area or if you want to use them on a page.

Why do I use Embeds for ProvenExpert?

The main reason to implement this plugin was the lack of a good integration into WordPress, when I wrote the plugin more than five years ago. Since then, ProvenExpert has also provided a JavaScript snippet. This can work, but it would require the user to have the unfiltered_html capability, as the snippet would otherwise be removed for security reasons with every content update. Implementing the widgets was also a great learning experience. I had plans to also add blocks at one point, but now this is no longer needed.

The official plugin as a replacement

It is no longer needed, since there is now an official plugin from ProvenExpert, that only supports blocks, and which is developed by the German WordPress community member Thomas Zwirner. When I’ve visited WordCamp Leipzig this year, he also informed me, that the API I am using for my plugin, might be shut down at one point. If this happens, I would probably either ask the 80+ people using my plugin to migrate to the official one, or turn mine into an add-on, that would provide widgets instead of blocks, but using the new API used by the official plugin.

Conclusion

Sometimes you come around some solutions from platforms you really don’t like. If there is no official plugin – there was a third-party one, which also didn’t satisfy me – then you often end up writing your own solution. If this solution would also help others, that’s usually when I decide to publish it into the Plugin Directory.

Have you ever done something similar? For me, it was not the first plugin I publish after needing it for one specific site. Tomorrow, in my last advent calendar blog post, I will share another plugin like this with you.

Yoast SEO – the SEO plugin I use

The alphabetic list of plugins comes to an end today, and which other plugin could be here than Yoast SEO? It is like a “low-hanging fruit” of plugin choices, at least for me.

What does Yoast SEO do?

I don’t know how many of you really don’t know what it does. It is the most actively used SEO plugin and one of only three plugins in the WordPress.org Plugin Directory with 10+ million active installations. You could always argue, that not every website needs an SEO plugin, WordPress itself does many things right without additional plugins, but if you want to use one Yoast SEO offers everything essential you need. There is also a premium version and many clients from the agency I work for use it, but I’m not using it myself, so I can’t really tell you too much about it.

Why do I use Yoast SEO?

It just works best for me. When you get used to one (complex) plugin and you know how to configure it, it’s hard to switch to a different one. On one page, I’ve tried a different popular SEO plugin, but it didn’t work for me. Some people say that Yoast SEO is “bloated” and that it adds too much to the admin interface. I’d say the opposite is true. That other popular SEO plugin was injecting buttons, options, panels, etc. everywhere across the editor and backend. Especially, all these “fancy AI features” and the need for an external account were quite annoying.

I also have to admit that I don’t do too much SEO for my blog posts. I need the basics, and Yoast SEO has me covered there. I don’t try to get “all green lights” in the Block Editor panel. Being able to customize some aspects of a blog post, like using an alternative title, social media image, etc. are all features I have never used. Sure, my blog could probably rank a little (or a lot) better, if I spent more time on SEO, but I enjoy writing content a lot more.

One last, and also major, reason I like about Yoast SEO, are the wonderful people of the Yoast team. It’s always fun to hang out with them at a WordCamp, visiting their booth, or even attending some parties with them. For me, the community part of some companies is also a factor on which plugin I would choose.

Conclusion

For me, Yoast SEO “just works”, and that’s all I need. But how about you? Do you use a different SEO plugin? Have you switched from Yoast SEO to this other plugin? Then what made you switch?

Yoast Duplicate Post – clone any post type with all data

The Yoast Duplicate Post plugin was initially developed by Enrico Battocchi back in 2007, and when he joined the Yoast team, he brought the plugin with him. Even after rebranding, it still offers the same robust functionality.

What does Yoast Duplicate Post do?

Another plugin with a descriptive name: it is used to duplicate posts. When installed, it adds a “Clone” link to the list view of pages, posts and other post types. If you don’t configure anything, it copies the title, content, meta field values, taxonomies, and other important data. There are some things it does not copy, but those are the ones you would not expect in a clone, like comments or the date of the post. It also adds a “bulk action”, so you can clone more than one post easily.

How do I use Yoast Duplicate Post?

Some days ago, I wrote about The Events Calendar and that in the free version, it does not have a recurring events feature. This is where a plugin like this one comes in handy. If you have an event (or post, page, etc.) with very similar content, like you only change the date or some other details, creating such an event every time manually and copy/pasting all meta fields can be quite a task, where you might miss some information. Using the Yoast Duplicate Post plugin, “creating a recurring event manually” becomes a quick task. In my use case, all I need to do after duplicating the event is changing the date and the slug (since the title does not contain the date). But this only takes less than a minute and I can easily prepare many events and only schedule them to be published later.

Conclusion

There is really not a lot more to write about the plugin. In its default configuration, it just duplicates any post, page or other post type. If you want to limit this functionality to only some roles, include or exclude specific fields, that’s when you customize its settings a bit more. But in most cases, you just install and activate it and are good to go.

Have you used it before? Or do you have another plugin with a similar functionality? I know that there are multiple out there. This one just worked best for me and more than 4 million other people.

Worthy – get money for your blog posts without advertisement

This plugin is one that is very specific for Germany. I just had to look up the English term to describe what “VG Wort” is: a performance rights organization. This organization pays authors (books, magazines, online text content), when people read them. Every new blog post gets a “tracking pixel” and any person reading my content from Germany count towards a payout. After one year, every blog post that reach at least 1500 visits from Germany, gets me some royalty payment. The amount per blog post various every year. I don’t make a lot of money, but it helps me to cover some of my hosting costs. Now that you know how getting money through VG Wort work, let’s see how this plugin helps me in the process.

What does Worthy do?

With the Worty plugin, authors can add tracking pixels to blog posts. It adds an option to the sidebar of the Block Editor and to the blog posts list view. A blog post needs to have a certain length (unless they are lyric poetry). The plugin shoes if blog posts have reach that length and then offers a link or radiobox to add a tracking pixel.

It also helps you to assign an individual tracking pixel to a single post. Getting those tracking pixels is quite a complex process. But you can download a CSV with many tracking pixels and then import them into Worthy. There is even a premium version that allows you get them imported automatically from an API and to “report” back the URL of the blog posts to VG Wort, once the blog post reach the minimum number of visits for the first time (in following years, you don’t have to report the same blog post again, it will automatically be considered for a payout, if the minimum number of visits is reach again). So since this “reporting back” only needs to be done once per blog posts and as only very few reach that limit, I have not seen the need for the premium version. But for larger blogs, it might save you more time than it costs.

Why do I use Worthy?

I have been using a different plugin for VG Wort before, but this one only helped my identifying the blog posts that are long enough and to visualize with ones already have a tracking pixel assigned. Adding the tracking pixel was a complete manual process. I would copy the HTML tag from the CSV, paste it in a meta field in the blog post, and then copy back the URL into the CSV, so I keep track of the tracking pixels I’ve already used.

Fortunately, switching to Worthy was really simple, as it offers a migration from a handful of other VG Wort plugins. There is now an official plugin from VG Wort called “VG WORT METIS“, and it sounds like it offers all the functionality from Worthy Premium, like ordering tracking pixels from VG Wort and reporting back the URLs of the blog posts. But I don’t want to migrate just now. I might test it in my new blog and then write about that plugin in more detail.

I have long removed all classical ads from my blog and only use this rather privacy-friendly monetization option. I still had to add a section to my privacy policy, since VG Wort needs to process IP addresses, in order to find out, if a visit was coming from Germany. One interesting fact is, that the content you write does not need to be written in German. If you read this blog post in English, but from Germany, it also counts towards the minimum number of visits of the blog post topic, so I use the same tracking pixel for both languages. I do that by using a small helper plugin I’ve written, that connects MultilingualPress and Worthy. I might extend that plugin to also work with other VG Wort plugins or other translation plugins.

Conclusion

I don’t know how many of you reading my blog in English even need a plugin like Worthy. Only if you publish magazines, books, etc. in Germany or you write blog posts for an audience in Germany, signing up for VG Wort makes sense.

Are there ways you monetize your online presence, but without using classical ads, sponsored content or affiliate links?

User Role Editor – customize existing roles and add new ones

The Roles and Capabilities in WordPress are a powerful tool to allow different users to do things in WordPress, or to prevent them from doing things. But they are also hard to understand, especially as a developer trying to customize them. When you introduce a custom post type, create dashboard panels, or offer some other functionality that should only be available for some user roles, adding your own capabilities is the recommended way. But what if site owners need to change them? This is where a plugin like User Role Editor is needed.

What does User Role Editor do?

As the name says: it allows you to edit user roles and their capabilities. You can add capabilities to existing roles, create new roles or clone existing ones (to then change them). A user in WordPress can usually only have one role, but with this plugin, you can assign multiple roles to them.

The plugin also has a pro version, but I never really looked into it, since I use it only for small manipulations on the roles and capabilities of WordPress installations. In the past, I’ve also used the Members plugin, which had a similar feature set, but then changed into a larger membership plugin, which I didn’t need.

What do I use User Role Editor for?

On one website where I use Koko Analytics (which I wrote about in a previous blog post), the person responsible for the site, does not have the administrator role. Since statistics are only visible to administrator users, I had to change the roles and capabilities. I could have allowed the editor role to view statistics, by giving them the view_koko_analytics capability, but instead I’ve created a “Koko Analytics Viewer” role with that one capability and assigned it to the user. I usually try not to change the default roles from WordPress, since those changes might get overwritten.

Conclusion

If you want to change the roles and capabilities in WordPress, the User Role Editor is one of the easiest ways to do that. As a developer, you can also use the “Roles API” with functions like add_role(), to make these type of changes. I also like to use the WP-CLI and its wp role command, but you may not be able to use the CLI on a website (like I can’t in my example), and using a plugin like User Role Editor still allows you to easily change things. After you’ve done making changes, you can also often remove the plugin, since roles and capabilities are stored in the database. But if you want to keep the UI to assign a user to multiple roles, just leave the plugin installed and activated.

The Events Calendar – all I need to manage events on a website

On one page I maintain, there is a small calendar with courses and workshops. To manage those, I had to choose a plugin that offers all the features I needed. As I had more complex requirements for an event management plugin for work projects, I decided to go with the free version of the “The Events Calendar” plugin, and here is why.

What does The Events Calendar do?

First of all, it adds a couple of custom post types: Events, Venues and Organizers. It also adds two custom taxonomies: (Event) Tags and Event Categories. You don’t really need to use all of them, but if you do, you allow people to find events in the same venue, from the same organizer, and so on.

When you create an event, you can set a start and end time, or make it an “all day event” (even spanning multiple days). For the venue, you can choose to show a map in an individual event. You can also define costs for the event, but this only shows a price. The core plugin does not offer a ticketing system, let alone payment options. There is a free add-on plugin “Event Tickets and Registration“, which allows selling of tickets with Stripe or a PayPal business account. But since registrations are not done on that website I’m using it on, I don’t have this extension installed.

In terms of listing events, you have a month, list and day view. It comes with an events list widget and a keyword search. People can subscribe via an iCalendar file, Google Calendar, Outlook 365 and Outlook Live.

Events can be edited with blocks in the Block Editor, but on the site I maintain, we use it in combination with the Classic Editor, since the UX changes were just a bit too complicated for the person running the site.

Other add-ons to the plugin

There are pro versions of the core plugin and the tickets add-on. The quality of the official extensions is very good. The prices per site are justified, if events are your main business on those sites or if you even sell tickets. For sites where events are just a minor thing, I find them too high, and would probably use external services that charge you a percentage on a ticket sale.

The free version of the calendar is lacking one major feature: displaying events of a certain category on a page. This is useful, even for a personal site, and does not justify the high price for the pro version in my opinion. Luckily, I’ve found a plugin just for this purpose: The Events Calendar Shortcode & Block. With this plugin, you can list events of a category on a page or post, using either a shortcode or a block. It even offers an Elementor widget and Bricks element, but since I don’t use those two page builders, I don’t know how well they work. Even this free plugin has a pro version, but the free one is really all I need on that one website.

There are a lot of add-on plugins in the WordPress.org Plugin Directory, and even if you don’t find one that fits, you can customize The Events Calendar quite good, since it has a lot of actions and filters, which you can find in their DevDocs or learn more about how to use the plugins in their knowledgebase. This is another strong argument for me to use this as my main events management plugin. Other plugins also offer a deeper integration into this plugin, like the MultilingualPress plugin I’ve covered some day ago.

Conclusion

When it comes to event plugins, I usually always use The Events Calendar. For one, because I’m quite used to it, but even more because I like it’s code quality. I had to use another at one point, which offers recurring events (this is only available in the pro version of The Events Calendar), but the code quality was so bad, that I hated working with it every time. With more than 700,000 active installations, just for the free version, it’s also the most used event plugin from the WordPress.org Plugin Directory.

Have you used The Events Calendar before? Or do you use a different one? What make you choose one of the alternatives?

SyntaxHighlighter Evolved – another essential plugin to my blog

Since I run a blog with mostly technical topics, that also contain code snippets, I want to make those more readable by using syntax highlighting. Many years ago, I chose a plugin that is also available on wordpress.com by default. It comes with different styles and many languages is supports. For languages that are missing, you often find an add-on plugin. Or you write your own one, which I did.

The SyntaxHighlighter Evolved plugin was initally developed by Alex Mills who passed away in 2019. Development is now continued by Automattic.

What does SyntaxHighlighter Evolved do?

As the name indicates, it is a plugin to syntax-highlight code. I use it in every blog post where I share code with you. You can use legacy shortcodes, either one per programming language like or a generic one passing the programming language like in your posts and pages. But you can also use a block and select the programming language from the block settings. You can also set other options here, like highlighting specific lines or a toggle to show line numbers.

The plugin used the syntaxhightligher from Alex Gorbatchev that is still actively maintained. It comes with two different "Hightlighter Versions": 2.x and 3.x - you can only use one at a time. I still use version 2, since it offers a "wraplines" feature I find quite useful. The package also have a version 4, but this one has not yet been integrated into the plugin.

Why do I use SyntaxHighlighter Evolved?

I regularly share code. Since I want to make it more readable, I want to use a syntaxhighlighter. I have chosen this plugin many years ago and migrating to a different one would be quite a task. But since it is not up to date with the latest version of the package, it might be time to find a replacement. It also sometimes breaks code blocks, especially if they contain HTML or some "HTML special chars" in other programming languages.

Add-ons to the plugin I use

I do use two add-ons. I have a couple of blog posts about the Apache webserver, and the highlighting for the configuration files are not in the core package. I do use the "SyntaxHighlighter Evolved: Apache" plugin here, which is not available in the WordPress.org Plugin Directory, but only on an external website. I've also blogged a lot about Sass, and there was no add-on plugin available for this language, so I created one: "SyntaxHighlighter Evolved: SASS Brush". Those add-on plugins rarely need to be updated. Only if the keywords of such a language change. For my Sass plugin, I just use the official JavaScript file with those keywords and update them in my plugin.

Conclusion

If you want to offer better readable code snippets in your posts and pages, a syntax highlighting plugin can make a huge difference. I still use a rather old one, but it still works.

Do you use a syntax highlighting plugin? Maybe you know one that offers a "wraplines" feature, and is maintained better than the one I still use. Then please share it in a comment, I would love to give it a try.

Safe SVG and SVG Support – two plugins that allow you to upload SVG files to your WordPress site

Even in December 2025, it is still not possible to upload SVG files to a WordPress website. As an SVG file can contain JavaScript code and is therefore considered a “potential security risk”, WordPress core does not allow the upload of SVG files. There are people trying to allow it in the future, while filtering out malicious code, but it will probably still take some time.

In the meantime, you can use a plugin or some custom code, to allow uploading an SVG to WordPress. In the 2015 advent calendar, I shared a snippet on how to allow the SVG upload (unfortunately, this blog post has not yet been translated to English).

But if you not only want to upload the SVG and use it in theme settings, but also put it into a post or page, I would recommend using a plugin that integrates SVG support better into WordPress. Here are two plugins I’ve used on different sites.

What does Safe SVG do?

The Safe SVG plugin is developed by 10up, a highly reputable WordPress agency. It not only allows you to upload an SVG, but also does something with the file. It sanitizes the SVG, which means that it tries to remove any code that might cause a security risk to your site. It also optimizes the SVG using the SVGO tool, which I also use (either in the browser or as an Inkscape extension) to get better and smaller files. With this plugin, you can also view SVG files in your media library (this is not possible, if you only allow the upload with a code snippet). And you can even decide the user roles that are allowed to upload SVG files.

What does SVG Support do?

The SVG Support plugin has almost the same features as Safe SVG, but it also adds some more options. One of them is “to inline” an SVG, which then allows you to modify the SVG using CSS. This is not possible, when the SVG is “loaded as an external image”. Such a styling can be useful if you want to change colors in an SVG in a “dark mode” for example.

Why do I use those plugins?

I use both plugins on one site each. On other sites, I only use the code snippet. It really comes down to your usage of SVG images in posts and pages. If you only want to use an SVG in the Customizer options for your site logo, the code snippet or Safe SVG might be all you need. If you want to use SVG images in your content, then the inline feature of SVG Support might be of use for you.

Conclusion

Both plugins have more than one million active installations, so we do see that people are using SVG files with their WordPress websites. It is about time to get SVG native support into WordPress Core and close this 13 years old Trac ticket I’ve linked above.

Do you use SVG files in your WordPress project? How to you use them? Only as static files bundled in themes and plugins? Or also in the content of posts and page? Then how do you allow the upload of them?

Query Monitor – the only plugin I (almost) always use

One of the questions I get a lot is: what plugin do you always use. My answer is usually: none … except for when I still develop a site. Then it is Query Monitor and here is why.

What does Query Monitor do?

The Query Monitor plugin is THE debugging plugin for WordPress. It started with only helping to debug SQL queries, but can now be used to debug almost anything in WordPress. I’ve written a couple of posts on it before, but let me list a few of the hundreds of debugging features it has:

  • SQL queries
  • HTTP request
  • Loaded template files (partials) and template hierarchy file used
  • Loaded JavaScript files
  • Loaded CSS files
  • Hooks (actions and filters) used
  • Loaded translation files (and listing those that are missing)
  • HTTP API requests performed by the backend
  • Updated transients
  • Permissions (capabilites) checked
  • Information on the environment (PHP, database, WordPress, server)
  • List of all true/false Conditional Tags on the current page

Query Monitor is available on the frontend and backend. By default, only administator users can use it, but you can set an authentication cookie to even use it when logged out, which is really helpful when you want to debug a site as a normal visitor.

Why do I use Query Monitor?

If you are in the process of creating a website and something does not work, you can take many approached to debug the issue. For many typical issues, however, you don’t even need to activate the WP_DEBUG mode or use something like Xdebug. The Query Monitor plugin might just tell you what went wrong.

It is also really helpful to find slow SQL queries and then investigate further why they are so slow. I also use it a lot to find out why some translations do not work – often times because WordPress tries to load a file with the wrong name.

I don’t know how many hours or even days of debugging time I have saved, just because I always use Query Monitor. At one point, I even added an alias to my Linux system to install Query Monitor using the WP-CLI, just because I did that so often. 😅

Conclusion

If you develop a website and need to debug it, then you should give Query Monitor a try, if you don’t already have it in your toolbox.

You can also extend Query Monitor with your own panel, which I have described in the blog post “Adding a custom panel to Query Monitor” earlier this year.

Do you use Query Monitor? What is the feature you use the most?