The first “official” WordCamp Germany in Gerolstein

Two weeks ago, I went to the small town of Gerolstein, to participate in the first ever “WordCamp Germany“. But wait, the first WordCamp Germany? Haven’t there been any before?

The history of German WordCamps

The first ever WordCamp in Germany was held back in 2008 in Hamburg. It was even the first WordCamp in Europe! Back in the days however, those WordCamps were not “official”, as the ones we have now, that are organized with the support WordPress Foundation / WordPress Community Support.

One year later, there was a second WordCamp in Jena, and it had a guest from the US giving a State of the Word speach.

It continued in 2010 in Berlin, which was my first WordCamp and 2011 in Cologne. Although they were all named WordCamp Deutschland (WordCamp Germany), they were still independently organized. Following two year of having a WP Camp, the reason behind the different name is a long one, which was hard to explain to the community back in the days.

Then in 2014, we had the first “official” WordCamp in Germany in Hamburg. But this was a “city based” WordCamp. All WordCamp following were always named after the city. This is why WordCamp Germany this year was the “first official regional WordCamp” we had.

Wednesday: Pluginkollektiv Hackathon

The day before the WordCamp, we had a little side event: the Pluginkollektiv Hackathon. This group of volunteers is working on some plugins that are well known and widely used, especially within the German and European community.

We tested some plugins, worked on some upcoming versions, but also discussed quite a lot about the future of the Pluginkollektiv and some of the plugin. Some plugin that were taken over had already been closed, and we took the hard decision to close some more.

Thursday: Contributor Day

The day before the conference days was reserved for the Contributor Day. I participated as a table lead for the Meta Team. Three first time contributors joined me, and we have worked on different tickets. I continued with a WordCamp.org ticket and the other worked primarily on WordPress.tv tickets. One of them was an 8-year-old ticket regarding the font-size, and we also created three new tickets.

After the Contributor Day, we had a small dinner for everyone helping with the event, followed by the “opening party”.

Friday: The first conference day

After the opening remarks, I took the chance to meet with attendees I haven’t seen in many years, or even haven’t met at all in person.

WooCommerce Blocks: Ein aktueller Blick auf die neuen Blöcke für Produktseiten, Cart und Checkout

This was the first of three lightning talks. Even though I don’t really like eCommerce, this talk by Manja Neumann was really fascinating one, showing the possibilities with the new blocks. I like the great flexibility to arrange the elements on the WooCommerce cart and checkout pages. If I ever have to work with WooCommerce again, I will be happy to give them a try.

Ein-Klick-Entwicklungsumgebung mit GitHub Codespaces

I’ve heard the project name “GitHub Codespaces” before, but never really knew what they are. After seeing this talk from Thomas Rose, I can’t wait to give them a try in one of my projects!

State of TV – Vortragsaufzeichnung, aktueller Stand und Ausblick

The last lightning talk was about the current setup we use at German WordCamp to record all the talks, held by Frank Neumann-Staude. As you might have recognized by now, all the sessions titles link to WordPress.tv and the respective videos. That’s possible, because all videos were already available just in the night of the last day of the WordCamp, thanks to our amazing TV team!

Digitale Barrierefreiheit fürs Kognitive Spektrum

I’ve seen many talks from Maja Benke on accessibility, but this one was an exceptional one. It was not focussing on the typical a11y topics like contrast, font-size, etc. But it was about people “on a spectrum” and what an accessible website means for them.

Empowering women through code: unleashing the power of diversity in tech

In the next lightning talk round, I was only able to watch this talk from Tabea Braun about the Groundbreaker Talents scholarship program, that empowers women from underprivileged communities in Uganda to become Software Engineers.

That was the last session for the day. The rest I have spent talking to more attendees and some sponsors as well.

Saturday: The second conference day

The schedule for the second conference day was packed with another round of amazing talks!

WordPress-Login-Security

Even if you think you know everything about a topic, you will learn something new! This session from Angelo Cali and Simon Kraft was no exception to that! While some “basics” were familiar, the part about passkeys was fascinating. I still don’t fully understand the security behind them, but as a modern alternative to passwords, they are something to take a look at.

Meta-Meetup für WordPress-Meetup-Organisator*Innen

After taking a break and after having lunch, I’ve met with other meetup organizers in the workshop room. We shared our experiences and exchanged ideas around the meetups in the German-speaking community. With the meetup group in Berlin, we are still online, but we really hope to get back to an in-person meetup by next year.

After this session, I was interviewed for a podcast.

Exploring the power of generative styling

The next talk I’ve attended was given by my colleague Tammie Lister. I can’t even summarize what the talk was about. Just watch the video and experience it yourself!

This was already the last talk for me at this WordCamp. I took a small break to get some new energy for the last part of the WordCamp: the After Party! I even had the chance to dance some Kizomba and Salsa 😀

Conclusion

This “first” WordCamp Germany was a great success! Given how difficult it was to travel to Gerolstein, around 240 people attended. This was a normal number of a “big” German WordCamp and not necessarily something you could have expected for the first post-pandemic event.

We don’t know yet where the next German WordCamp will be held – maybe in Munich, which was not possible this year because the team could find any affordable venue. I only know that I will attend it again, just as all German WordCamps since 2010.

How to create a Super Admin and assign it to all sites of a multisite using the WP-CLI

Two weeks ago, I’ve started to work on a new project. The whole WordPress website was versioned in Git, including a DDEV configuration and an SQL dump for local development. This was great, as it allowed me to get started really quickly. But after installing the project, I couldn’t find the login credentials.

Getting all users of the installation

The usual “admin” or “wordpress” users didn’t work, so I first checked the list of available users with the WP-CLI:

$ wp user list
+----+------------+--------------+------------------------+---------------------+---------------+
| ID | user_login | display_name | user_email             | user_registered     | roles         |
+----+------------+--------------+------------------------+---------------------+---------------+
| 11 | jo         | jo           | [email protected]         | 2023-06-01 01:30:30 | administrator |
| 22 | jane       | jane         | [email protected]       | 2023-06-02 02:30:30 | administrator |
| 33 | john       | john         | [email protected]       | 2023-06-03 03:30:30 | administrator |
+----+------------+--------------+------------------------+---------------------+---------------+

For none of these users (names have been changed) I could find any login credentials. Therefore, I had to create myself a new user.

Create an administrator user

I usually use the --prompt parameter when creating a new user (or other entities), so I don’t miss an important parameter:

$ wp user create --prompt
1/15 <user-login>: wapuu
2/15 <user-email>: [email protected]
3/15 [--role=<role>]: administrator
4/15 [--user_pass=<password>]: wordpress
5/15 [--user_registered=<yyyy-mm-dd-hh-ii-ss>]: 
6/15 [--display_name=<name>]: 
7/15 [--user_nicename=<nice_name>]: 
8/15 [--user_url=<url>]: 
9/15 [--nickname=<nickname>]: 
10/15 [--first_name=<first_name>]: 
11/15 [--last_name=<last_name>]: 
12/15 [--description=<description>]: 
13/15 [--rich_editing=<rich_editing>]: 
14/15 [--send-email] (Y/n): n
15/15 [--porcelain] (Y/n): 
wp user create --role='administrator' --user_pass='wordpress'
Success: Created user 44.

Now I was able to log in to the site! But as soon as I was logged in, I’ve recognized that this was a multisite installation. So my new shiny administrator user was not able to see all the other sites.

Promote a user to a Super Admin

Using the WP-CLI you need a single command to promote a user to a Super Admin:

$ wp super-admin add 44
Success: Granted super-admin capabilities to 1 user.

After running this command, I was able to see all sites listed in the “Network Admin”. I would now be able to work with all of them. But since my new account was not directly associated with any of those sites, they would not show up in the “My Sites” dropdown in the adminbar.

Adding a user to all sites as an administrator

This specific multisite had only three sites, so adding my new user as an administrator to all of them is a rather quick task. But what about a network with 100 sites? That would take quite long and you might miss one site. Fortunately, you can use another WP-CLI command to solve this.

Getting a list of all sites

We would first need to get a list of all sites. This can be done with the following command:

$ wp site list
+---------+---------------------------+---------------------+---------------------+
| blog_id | url                       | last_updated        | registered          |
+---------+---------------------------+---------------------+---------------------+
| 1       | https://example.com/      | 2023-06-01 01:30:30 | 2023-06-01 01:30:30 |
| 2       | https://example.com/de/   | 2023-06-02 02:30:30 | 2023-06-02 02:30:30 |
| 3       | https://example.com/en/   | 2023-06-03 03:30:30 | 2023-06-03 03:30:30 |
+---------+---------------------------+---------------------+---------------------+

To assign the new user to one of these pages with a specific role, we can use this command:

$ wp user set-role 44 administrator --url=https://example.com/de/
Success: Added wapuu (44) to https://example.com/de as administrator.

We would now need to do the same things for every single site, using the url field. But for many sites, this also takes some time and we might make a mistake. So instead, I was looking for a single line command.

Adding the user as an administrator to all sites

I’m not the best shell developer, but with some trial and error, I came up with this command:

$ wp site list --field=url | xargs -I {} wp user set-role wapuu administrator --url={}
Success: Added wapuu (44) to https://example.com as administrator.
Success: Added wapuu (44) to https://example.com/de as administrator.
Success: Added wapuu (44) to https://example.com/en as administrator.

This command is getting the list of sites, as shown before, and for each of them only the url field. This is then passed with xargs to the second command, that would add the user to the site. Make sure to set the correct username (wapuu in this example) in the second command.

Conclusion

With some WP-CLI magic, you can quickly create an administration user, grant Super Admin permissions and associate it with every site in a multisite. I hope you’ll find this useful in one of your (future) multisite projects as well.

WordCamp Nederland 2023 – My 50th WordCamp

Two weeks ago, I’ve attended my first Dutch WordCamp. It was not the first WordCamp in the Netherlands, this was the first WordCamp Europe 2013. But this was my first “true” Dutch WordCamp, being organized by the local community.

It took place in Burgers’ Zoo in Arnhem, just as last year. I was joining the event as a volunteer, which I also haven’t done for quite a while – if you don’t count organizing WordCamps as volunteering 😉 There was a tour through the Zoo, which I missed, unfortunately. But I joined the “speakers dinner” on Thursday evening.

Friday: The first conference day

The WordCamp was a two-day event, with talks and workshops. There was no Contributor Day. My first volunteering shift on Friday was registrations. Fortunately, we were many volunteers for this task, as I sometimes had hard times to understand the names of attendees, since it’s not always easy to get the spelling from the pronunciation of Dutch names for a German speaker 😀

Performance Awareness and Optimization

After the first rush of attendees arriving, I had some time to see the talk from my colleague Thorsten Frommen. He gave some very deep level insights on code performance. This was clearly a talk targeting a more experienced audience, and I personally also learned some new things:

Click here to display content from Twitter.
Learn more in Twitter’s privacy policy.

This was also the only talk I saw on the first day. I spent a good amount of time talking to people I already knew, as well as other volunteers and some of the sponsors.

At the evening, there was a small event in downtown Arnhem, organized by a sponsor.

Saturday: The second conference day

On the second day, there was only the bigger room for presentations, as well as the two smaller “lodges” used for talks and workshops from the first day. I had a volunteers shift at the registration again, but since most attendees already arrived at the first day, there was not too much to do.

Your Code Can Be Poetry Too

This gave me the chance to attend the talk from Juliette Reinders Folmer. She talked about the WordPress Coding Standards in general, but also highlighted the huge task of releasing the new version 3 of the WordPressCS tool. She also explained why open source projects like this need more and better funding, to be sustainable:

Click here to display content from Twitter.
Learn more in Twitter’s privacy policy.

After this talk, I had to go back to the registration counter, so I missed the talk “Bytes and Minds: Navigating Mental Health in the Tech World” by Ryan Hellyer, a community member from Berlin. I’ve heard so much positive feedback and also had the chance to talk to Ryan after the WordCamp, that I will definitely watch it, as soon as the talk is available on wordpress.tv – hopefully soon!

After lunch, I joined the unofficial session “Zoo Time”, where some attendees took some 2h to explore the zoo – as the WordCamp was inside the zoo, entrance to the zoo was included in the ticket as well.

In the evening, we met some other attendees in the city center for some food and drinks.

Conclusion

The WordCamp was really amazing! It was my “first true Dutch WordCamp”. But as I also wrote in the title, this was also my 50th in-person WordCamp. I will write a dedicated blog posts about all the WordCamps I have visited, including some nice stats.

WordCamp US 2023 – and my first trip to the capital

Last week I have been to Washington DC to visit WordCamp US. This was the third WCUS, I have visited. It was also the first trip back to the US since 2017 and my very first visit to the capital of the United States.

Visiting Washington DC

I was starting my trip on Monday afternoon. The flight was already an hour late, when it arrived in Berlin. After landing at Dulles Airport, I was welcomed by a huge line at the border control. After around 90min, I finally made it into the US.

I headed to the hotel, checked in, and then bought myself some pre-season tickets for the NFL game Ravens @ Commanders – my first NFL game in the US.

Some sightseeing in Washington

After a very long day, some good sleep and a typical American breakfast, I first tried to get a tourist SIM card, which is not all that easy in the US. Then I headed into the city for some sightseeing. The first stop was, quite obviously, the White House. I finished the day by visiting the western part of the National Mall.

On Wednesday, I continued my tour at the National Mall. It started at the Washington Monument, but unfortunately, I was not able to get tickets to go up (for the whole week). Instead, I visited the National Museum of African American History and Culture. The museum is rather new and shows on floors many fascinating things, but also quite emotional stories. I’ve spent three hours in the museum, but I could have easily spent three days, without being able to see all things.

In the evening, I went to National Harbor, where WordCamp US would take place and where I stayed for the following four days.

The Contributor Day

The Thursday was reserved for the Contributor Day. I’ve joined the Meta table again to continue some work on a WordCamp.org related ticket, I’ve started with back in February at WCAsia. As the people who were involved in the ticket were at WordCamp US as well, I could make some progress. But I also found some new issues and opened a new PR.

After lunch, I helped to restore a Linux laptop, as the permissions of the file system had been “destroyed” trying to install the Gutenberg repository.

I’ve also learned about “wp-now”, the new way to contribute to WordPress (and it’s plugins) that uses WP Playground.

Click here to display content from Twitter.
Learn more in Twitter’s privacy policy.

The conference days

The schedule of this year’s edition was quite different. It has three tracks, but the first and last session of every day was a keynote. Usually, there is only one keynote at the end of the WordCamp, held by Matt.

The layout of the venue was a bit complicated. While the sessions were all located very close to each other, the sponsors hall was located in a different part of the enormous venue. It was easily a 3-min walk from the sessions to the sponsors.

For All Userkind: NASA Web Modernization and WordPress

The first keynote was held by two members of the team responsible for the relaunch of the NASA website. They shared their story on how they are migrating the many different single sites into a new unified WordPress website. For the main site nasa.gov they are currently using Drupal 7 (a version that was first released in 2011 and will reach its end of life in January 2025). NASA had their first website back in 1994 and use Drupal since 2015 for the current site.

So it’s about time to get a fresh start. At beta.nasa.gov, they are already presenting the new site. It was built using many custom Gutenberg blocks and patterns they have developed with their team. They have currently onboarded 440 users to the new WordPress CMS, created 3,023 new landing pages and migrated 68,006 pages from the old CMS. But this is still just a fraction of all the content they have at around 130 different sites. I can highly recommend watching the recording of this fascinating session. There was a follow-up session, which I didn’t attend.

Click here to display content from Twitter.
Learn more in Twitter’s privacy policy.

So, You Pledged to Contribute to WordPress: What Next?

After lunch, I attended a panel with my colleague Tammi on stage. Together with Femy Praseeth, Jonathan Desrosiers and the host Hari Shanker, they all shared their experiences as WordPress contributors and gave some tips about how to get started contributing. As some of them are sponsored for their contributions, like Tammi is sponsored by my employer Inpsyde, attendees get some first-hand insights on how to become more active in contributing back to the project.

Inpsyde also created the Five for the Future profile with the current pledges, including the 5 hours I currently contribute. In the future, I will be able to contribute more, which I will probably blog about later this year.

Click here to display content from Twitter.
Learn more in Twitter’s privacy policy.

All the President’s Websites

After a quick break, I’ve attended another session presenting a governmental project, held by Helen Hou-Sandí and Andrew Nacin. Those of use who worked on client projects knows about deadlines and the issue to hold this deadline. There are all kinds of things that can go wrong, and in the end it takes longer. But as Nacin was jokingly saying, “the Founding Fathers” of the United States decided back in 1776, that a new website needs to go live on January 20th, at noon 😀

This makes things a lot tougher. The new whitehouse.gov website for the Biden administration was built with the help of the WordPress agency 10up, where Helen was working at the time. The design Ben Ostrower created the entire brand in only around 72 hours. For the whole project, the team of only 10 people had just 6 weeks to get it done. This is not a lot of time, as many of us know. Fortunately, they didn’t have to worry too much about the website content, as the new administration has a team to produce a lot of content.

Click here to display content from Twitter.
Learn more in Twitter’s privacy policy.

In this project as well, they heavily used custom blocks for the content. Helen was showing some videos of the editing experience. The backend had almost an almost pixel perfect preview of the page on the frontend, so the content team could truly create the final look of each site. That was long before Full Site Editing was introduced.

It was really an impressive showcase on what can be achieved with WordPress in a short amount of time with an experienced team and a client, that works closely and actively with the development team.

BlackPress: Amplifying Black Professionals in WordPress

On the second day, I’ve attended another panel featuring Ray Mitchell, Maestro Stevens, Destiny Kanno and George H. Woodard III. They presented the BlackPress project, a community for black WordPress professionals and allies with the goal to connect them and uplift each other.

Click here to display content from Twitter.
Learn more in Twitter’s privacy policy.

The panelists shared their individual stories and career paths as owners of an agency, Automattic employee and sponsored contributor or consultant and WordPress developer.

I haven’t heard about this initiative before, but it was inspiring to listen to the stories of all panelists. These are the kind of sessions I want to see a lot more on WordCamps.

The final keynotes

Josepha Haden Chomphosy gave a brief 15 min talks on the future of WordPress including community topics like the new event formats and a brief summary of the Community Summit that happened at the two days before WCUS. Three of my colleagues attended this event as well.

This keynote was followed by Gutenberg: Next held by Matt. He showed a video of the WordPress 6.3 release and talked about the things we can expect in WordPress 6.4, like the new default theme Twenty Twenty-Four. The development of this new theme will be co-led by Jessica Lyschik from the Germany community in the Women & Nonbinary Release Squad.

The Q&A after these two keynotes were done differently this time, as multiple community members asked for a change of the format on how questions are asked. The questions could be asked using Slido. Each question needed to be approved by the organizing team. After the approval, all attendees could vote on those questions. The ones with the most upvotes were picked up by Josepha and Matt.

After the Q&A, the WordCamp US organizing team was asked on stage. They thanked all people who helped to make this year’s WCUS possible. Unfortunately, they have not announced where and when WCUS will be next year.

Click here to display content from Twitter.
Learn more in Twitter’s privacy policy.

The After Party

Following the tradition of previous years, the After Party took place in a museum. After a nice dinner with my Inpsyde colleagues, we headed into DC for the Smithsonian Museum of Natural History. In the Rotunda, they served some deserts and alcohol-free drinks. When I was not talking to other attendees, I was able to roam a bit through the Ocean, Mammal, Fossil and Geology halls. The museum has some impressive exhibits, but way too much to see in just three hours the party lasted.

Click here to display content from Twitter.
Learn more in Twitter’s privacy policy.

Some more days in the DMV area

On Sunday, I visited some friends in Annapolis I haven’t seen for many years. I was a great way to cool down a bit after all the impressions of the event.

I was also lucky enough to be able to secure a tour in the Capital on Monday. After the tour, I could also visit the galleries of both The House and The Senate, since both chambers were still on summer break. For the rest of the day, I went to the National Air and Space Museum, another Smithsonian Museum. While around half of the museum was closed for renovation, they still showed some very interesting things. From “The Wright Brothers & The Invention of the Aerial Age” and other “Early Flight” exhibits to “Destination Moon” showing some of the NASA equipment used for their moon missions. This perfectly closes the circle to the first keynote of the WordCamp.

Tuesday was my last day. I went to the airport to check in my luggage and then went to the Steven F. Udvar-Hazy Center, the second location of the National Air and Space Museum. I was most fascinated by the Space Shuttle Discovery, as well other historic Human Spaceflight exhibits. Other impressive objects were a Lockheed SR-71 Blackbird or the Boeing B-29 Superfortress “Enola Gay” that dropped the first atomic bomb on Hiroshima. Unfortunately, other than in similar museums in Germany, it was not possible to see some planes from the insight. But it was still an impressive collection.

I also only had about an hour, before I went back to the airport, to have enough time for security – which only took like 3 minutes to go through! So I had enough time to prepare myself for the flight back.

Overall, it was another trip to WordCamp US I really enjoyed. I’m looking forward to seeing where it will be next year and then decide, if I attend it once again.

Migrating the Media Library from one site to another

At the last WP Meetup Potsdam, which was a casual meeting for some food, drinks and talks, one of the new attendees asked a question that sounded easy, but for which we had different answers:

How can I migrate all images from one WordPress site to another site?

Different attendees came up with different solutions. Here are the ones that were mentioned.

Migrate the images using FTP

Many people working with websites use FTP to upload/download files to a server. So why not just download them from the source site and upload them into the wp-content/uploads folder of the new site.

Anyone knowing how WordPress deals with attachments (images and other files) probably knows, that not only the files must be there, but also an entry in the database. Otherwise, the images could only be hot linked using their URLs, but are not available in the media library.

Import files from a folder using a plugin

To import those files into the media library, you have to use plugins like Add From Server, which some of you might know. It hasn’t been updated for 3 years, but might still work, although the plugin description states, that it is not designed for migrations. I’ve found Media Sync as an actively maintained plugin, but I have never tested it myself.

Import media files using the WP-CLI

You can also use the WP-CLI to import media files from a folder. Here is an example importing files from one WordPress installation into another on the same server:

$ wp media import ../source/wp-content/uploads/**\/**\/*.jpg
Imported file '../source/wp-content/uploads/2023/08/28164a88367399c18.97744391-1024x683.jpg' as attachment ID 6.
Imported file '../source/wp-content/uploads/2023/08/28164a88367399c18.97744391-150x150.jpg' as attachment ID 7.
Imported file '../source/wp-content/uploads/2023/08/28164a88367399c18.97744391-1536x1024.jpg' as attachment ID 8.
Imported file '../source/wp-content/uploads/2023/08/28164a88367399c18.97744391-2048x1365.jpg' as attachment ID 9.
Imported file '../source/wp-content/uploads/2023/08/28164a88367399c18.97744391-300x200.jpg' as attachment ID 10.
Imported file '../source/wp-content/uploads/2023/08/28164a88367399c18.97744391-768x512.jpg' as attachment ID 11.
Imported file '../source/wp-content/uploads/2023/08/28164a88367399c18.97744391.jpg' as attachment ID 12.
Imported file '../source/wp-content/uploads/2023/08/28164a88367399c18.97744391-scaled.jpg' as attachment ID 13.
Imported file '../source/wp-content/uploads/2023/08/41864a882e698f3d6.67081317-1024x683.jpg' as attachment ID 14.
Imported file '../source/wp-content/uploads/2023/08/41864a882e698f3d6.67081317-150x150.jpg' as attachment ID 15.
Imported file '../source/wp-content/uploads/2023/08/41864a882e698f3d6.67081317-1536x1024.jpg' as attachment ID 16.
Imported file '../source/wp-content/uploads/2023/08/41864a882e698f3d6.67081317-2048x1365.jpg' as attachment ID 17.
Imported file '../source/wp-content/uploads/2023/08/41864a882e698f3d6.67081317-300x200.jpg' as attachment ID 18.
Imported file '../source/wp-content/uploads/2023/08/41864a882e698f3d6.67081317-768x512.jpg' as attachment ID 19.
Imported file '../source/wp-content/uploads/2023/08/41864a882e698f3d6.67081317.jpg' as attachment ID 20.
Imported file '../source/wp-content/uploads/2023/08/41864a882e698f3d6.67081317-scaled.jpg' as attachment ID 21.
Imported file '../source/wp-content/uploads/2023/08/75364a8821590f529.41962907-1024x683.jpg' as attachment ID 22.
Imported file '../source/wp-content/uploads/2023/08/75364a8821590f529.41962907-150x150.jpg' as attachment ID 23.
Imported file '../source/wp-content/uploads/2023/08/75364a8821590f529.41962907-1536x1024.jpg' as attachment ID 24.
Imported file '../source/wp-content/uploads/2023/08/75364a8821590f529.41962907-2048x1365.jpg' as attachment ID 25.
Imported file '../source/wp-content/uploads/2023/08/75364a8821590f529.41962907-300x200.jpg' as attachment ID 26.
Imported file '../source/wp-content/uploads/2023/08/75364a8821590f529.41962907-768x512.jpg' as attachment ID 27.
Imported file '../source/wp-content/uploads/2023/08/75364a8821590f529.41962907.jpg' as attachment ID 28.
Imported file '../source/wp-content/uploads/2023/08/75364a8821590f529.41962907-scaled.jpg' as attachment ID 29.
Imported file '../source/wp-content/uploads/2023/08/89264a87feebb12a4.11887704-1024x683.jpg' as attachment ID 30.
Imported file '../source/wp-content/uploads/2023/08/89264a87feebb12a4.11887704-150x150.jpg' as attachment ID 31.
Imported file '../source/wp-content/uploads/2023/08/89264a87feebb12a4.11887704-1536x1024.jpg' as attachment ID 32.
Imported file '../source/wp-content/uploads/2023/08/89264a87feebb12a4.11887704-2048x1365.jpg' as attachment ID 33.
Imported file '../source/wp-content/uploads/2023/08/89264a87feebb12a4.11887704-300x200.jpg' as attachment ID 34.
Imported file '../source/wp-content/uploads/2023/08/89264a87feebb12a4.11887704-768x512.jpg' as attachment ID 35.
Imported file '../source/wp-content/uploads/2023/08/89264a87feebb12a4.11887704.jpg' as attachment ID 36.
Imported file '../source/wp-content/uploads/2023/08/89264a87feebb12a4.11887704-scaled.jpg' as attachment ID 37.
Success: Imported 32 of 32 items.

This example imports all *.jpg files in any monthly uploads subfolder. But you can also see one big issue here. Since WordPress creates many different file sizes of the original image, you would import all of them as separate media library items. So before importing any files you have copied over using FTP, you would have to manually remove them. When you migrate large media libraries, that task can take a while and you might make mistakes. So what to use instead? There are other (premium) plugins to migrate files, but there is a simpler and free way.

Migrating the media library with the WordPress Export/Import

Any WordPress installation comes with a default “Export” mechanism. You can find it at “Tools > Export” in your dashboard. Here, you can select which post types you want to export and optionally filter by a date range.

Export the media items

We want to export only media files, and we don’t select a date range, so all items will be exported:

The export tool configured to export all media items.
The export tool configured to export all media items

After clicking the “Download Export File”, your browser will ask you to save an XML file. This file can be used on your target site to import the media. So the export tool does not export all images (or other media file types), but only a file with the information where to find them.

Import the media items

Now you access the dashboard of the target site. Here you navigate to “Tools > Import”. At the bottom, you should see the “WordPress” importer. It is not installed by default, but you can install the plugin easily using the link:

The overview of the import tools, with the "Install Now" link highlighted.
The overview of the import tools, with the “Install Now” link highlighted

This will install and activate the plugin. The link will then change to “Run importer”. This brings you to a page with a file upload. Select the previously downloaded XML file and hit the “Upload file and import” button on that page. You should then see a page like this:

Step 2 of the XML import, that ask you to assign authors and gives you the option to "Import Attachments".
Step 2 of the XML import, that ask you to assign authors and gives you the option to “Import Attachments”

This page will list each author from the source site and asks you if you want to import them by creating a user or by assigning the contents of this user to an existing user.

The most important part is the checkout to “Download and import file attachments”. This checkout must be active. Then you click the “Submit” button and the import begins. Depending on the number of files, this might take a while.

Potential script timeout

As this process will download all files from your source site via HTTP and saves them to your new site (while also creating all the other images sizes), it might happen, that the request times out. You can then either import the same XML file again (existing content will be skipped), or you might have to split up the exported XML file into multiple ones, where you select a date range that is small enough.

Conclusion

There are many ways to migrate media files from one site to another. While I really like to use the WP-CLI for this task, the WordPress Export/Import has some major advantages. All you need it the ability to install the importer plugin. No need to use FTP and SSH to install and run the WP-CLI on the target site (which you might not have permissions to). You can also filter the media items by date and if you know how to edit XML files, you can also adjust what should be imported.

Another plugin goes into retirement

Yesterday, I’ve closed another of my old plugin: Kau-Boy’s Opensearch. Yes, back in the days I had a prefix for all of my plugins, like many others. 😀

This was the fourth plugin I’ve published in the WordPress Plugin Directory. Its purpose was to add an OpenSearch description format to the site. Browsers back in the days would then offer the search of your WordPress installation to be added to the search field, browsers were showing right of the address bar. Around 2019 however, Firefox began removing this additional search field.

Chrome continued to offer the autodiscovery for searches, and would allow you to hit TAB after typing the domain name, which would then directly search on your page. This didn’t even require such an OpenSearch feature on your site. This autodiscovery was removed for quite a while for new pages, however. If you still want to use it, you have to add those website searches manually in the settings of both Firefox and Chrome.

As browsers were not supporting the functionality anymore and the plugin only had 10+ active installs, I decided to remove it. In the 13 years it was available in the Plugin Directory, it only got 1627 downloads. So it was always a niche plugin anyway.

Alternatives

As mentioned before, there is no real alternative, unless you want to set up those website searches manually in your browser. For some times you could find Firefox search add-ons, but it seems they have all been removed. Chrome seems not to offer any of them as well.

Search shortcuts

While I was checking for the current search options in Chrome, I’ve found some really useful search shortcuts. When you type @tabs you can directly search for a currently opened tab, with @bookmarks you can perform a search of your bookmarks and with @history you can find recently visited pages. Firefox also has search shortcuts, but using different symbols you have to memorize.

Future plugin plans

Of my 13 plugins, I’ve now closed two of them and two more will follow in September and October. This gives me more time to focus on the remaining plugins and check them for compatibility with the upcoming WordPress releases. But I also have some new plugins in the making. So stay tuned!

Set the upload limit on a multisite

Last week, a colleague was asking, how you set the upload limit for WordPress. He tried different things, but still the limit was not increased. Let’s take a look, at what you have to do, to raise the limit.

Checking the current upload limit

One of the easiest ways to check the current limit is to upload a new media item. When you navigate to the media library, you will see the current limit:

The Media Library upload showing a "Maximum upload file size: 63 MB"
The Media Library upload showing a “Maximum upload file size: 63 MB”

Here you can see, that we can upload files up to 63 MB. There is a second place in the WordPress dashboard, where you can check the limit, at Tools > Site Health > Info > Media Handling:

The "Media Handling" info of the Site Health Info showing a max. upload size of 64 MB.
The “Media Handling” info of the Site Health Info showing a max. upload size of 64 MB

On this screen, it displays 64 MB. But how do we increase the size, if we need to upload larger files?

Increase the limit on the server level

In order to upload larger files, the server needs to accept them. This is what the “Max size of post data allowed” is telling you. To set those values, you usually have to change the php.ini file:

post_max_size = 128M
upload_max_filesize = 128M

I wrote a blog post about how you can make those changes, without losing them on an update. Depending on the PHP interpreter you use, you might have to restart it. Once we have changed this value, let’s check it in our installation:

The "Media Handling" info of the Site Health Info showing a max. upload size of 128 MB.
The “Media Handling” info of the Site Health Info showing a max. upload size of 128 MB.

So now we should be able to upload files up to 128 MB, right? Let’s find out in the media library:

The Media Library upload showing a "Maximum upload file size: 63 MB"
The Media Library upload showing a “Maximum upload file size: 63 MB”

No, we can’t! It’s still showing only 63 MB. But why? The issue here is, that we are on a multisite, and there is another option we have to change.

Setting the upload limit for a multisite

Navigate to the “Network Settings” and then almost all the ways down to the “Upload Settings”. Here you will still find the lower value:

The "Upload Settings" in the "Network Settings" still showing 64000 KB.
The “Upload Settings” in the “Network Settings” still showing 64000 KB

Let’s set 128000 KB here, save the settings and go back to the media library file uploader:

The Media Library upload showing a "Maximum upload file size: 125 MB"
The Media Library upload showing a “Maximum upload file size: 125 MB”

Now we see our increased file size. If we want to have 128 MB, we need to multiply the value we put into the setting with 1.024, but this should be good enough.

Conclusion

While you might have increased the upload limit on many servers and WordPress installs, and never had an issue. On a multisite, there is one additional setting you have to be aware of.

How about you? Are you using multisite installations? Why, or why not? Have you also found some strange differences, you sometimes forget about?

Different methods to debug PHP code

This week, I was asked for help setting up Xdebug with PhpStorm on a Linux laptop in combination with Docker. I might write about that in an upcoming blog post, but today, I want to focus on different methods to debug code in PHP.

1. echo, print_r, var_dump – the quick but ugly way

Anyone who ever developed something in PHP has used one of the “output functions”. With echo you can output a generic value like a string or number. For arrays and objects, you would use print_r or var_dump.

Pros:

  • Simple: The methods are easy to use. You don’t have to install anything to use them.
  • Quick insight: When you just want to output a value at a certain line, it’s easy to get the current value at that line.

Cons:

  • Output limitations: The methods are rather simple. You only get the value of that one variable, but no “context”. As the output is often rendered into an HTML document, you might have to wrap it in a <pre> tag for array/objects or you have to check them in the source code view.
  • Intrusive: When you output the variables, you do might do that while rendering a template. This means that your layout/design gets distorted.
  • Insecure: When you use this technique on a live website, the output is visible to any visitor. Not only does this look like an error, it was also be a security issue, when the content of the data you debug should not be visible.
  • Needs cleanup: Even if you only use this technique while developing locally, you always have to remember this code, before you deploy the code or commit and push it into version control. It’s easy to miss some lines which then end up on a live website.

2. error_log, file_put_contents – logging to a file

Instead of a direct output on the screen, you could write the debugging output into a file. This has some advantages, but some other drawbacks:

Pros:

  • Separation of concerns: Logging debugging information to a file keeps the application code free of debugging output. You could even introduce your own debugging function as wrapper to the error_log or file_put_contents functions and check inside of this function, if the “debug mode” is active.
  • Persistent records: If you have this “debug mode” activated, you can save the logged information into the file over a longer period of time and check the file for potential issues. It also enables you to debug requests from other people, so you might be able to find issues, you don’t “see” youself.
  • Not distorted output: Your output on the website keeps clean, as any debugging information is only written to a file.

Cons:

  • Manual inspection: You don’t get the debug information instantly. If you run this on a live website, you might even see the debug information of another person. Running a tail command on your file might help with a more “real time” debugging.
  • Harder to debug: If you use a common debug file for all functions, you will get all debug information without any “context”, so when want to identify the file/line a specific log message was written, you might have to prefix them with the __FILE__ and __LINE__ and maybe even add the date/time, so you know then the log entry was written.
  • Overhead: Logging information to a file can decrease the performance of your site, especially when you debug a lot of data. You should also check the file size of the debug file from time to time and make sure to deactivate the debugging mode, as you can easily fill up all remaining space on your server with a huge log file.
  • Insecurity: Yes, also using a debug file can cause a security issue, in case the log file is publicly available. If it is not publicly available, then debugging with a log file requires you to have access through a terminal or by downloading it. WordPress for example stores the debug.log in the wp-content folder and exposes it to anyone visiting the site. But you can change the path, to make this more secure.

3. Debug plugins – getting the best of both variants

For WordPress, I usually always use the Query Monitor plugin. This plugin offers multiple actions to debug variables. One of them is the qm/debug action.

Pros:

  • No direct output: Using this action, you don’t output the logged information into the page, so the site does not get distroted.
  • Security: You usually only see the debug information of Query Monitor (and the hook), if you are an administrator of the site. But you can even use it (with the help of a cookie), while logged out.
  • No debug file needed: It does send the debug information with the response, and does not store a file on the server, so the disadvantages of the previous method don’t apply here.

Cons:

  • Debug code in your application code: Like with the other methods, you still have to write debug code into your application code. You would then also deploy this code on a live website or commit and push it into a repository. So while this might be OK for “unpublished” code, you would rather not want to have it in a plugin/theme you have published. So before releasing a new version of the plugin/theme you would need to remove this debug code.
  • Cannot debug broken pages: As this debugging methods requires the Query Monitor plugin, you cannot debug a fatal error, that would not allow the Query Monitor to display that error.
  • Only your errors: You cannot use this method to debug issues another person is having with your site, and you probably don’t want to give them the permissions to use Query Monitor themselves.

4. Xdebug – next level of debugging

If you haven’t heard of Xebug and/or never used it: use it right after finishing reading this blog post! For me, it is the best tool to debug complex issues. Xdebug is a PHP extension, that needs to be installed and activated. You also need an IDE like PhpStorm or VS Code to use it, but then it can really help you find these hard to debug issues.

Pros:

  • No additional code needed: Instead of writing any debugging functions into your code, you rather set a “breakpoint” in your IDE to a specific line.
  • Debug all the things: Once a breakpoint is reached, you can debug any variable! So you are not limit to a single variable to debug, but you can see the value of all of them. You can also see the “call stack”, so every function that was called before reaching this point. You can also step back to these functions and inspect the parameters they were called with.
  • Only investigate special cases: Let’s say your code only breaks in certain cases, so when a variable has a specific value. In this case, you can use a conditional breakpoint that only stops, when this condition is met.
  • Test “what if…”: So you found an issue with a variable and its value, and wonder if the code would run as expected with a different value? Well, when you are at a breakpoint, you can overwrite the current value of a variable and then resume, to see what would happen.

Cons:

  • Hard to setup: If you have never used Xdebug before, it might be hard to set it up. You have to install and activate the PHP extension on the machine you are running the code at, and you have to configure your IDE. When using it with Docker, you also have to make sure that the PHP container can “communicate” with your IDE. While it has become a lot easier and PhpStorm nowadays needs (almost) zero configuration, getting it working for the first time might not be easy. I usually use it in combination with DDEV and now know how to get it running quickly. But your setup might differ.
  • Might break your request: As you “stop” the request while debugging, it might be possible that your site will not render, once you stepped through your code. That is usually the case if you use nginx as the webserver, as you will get an error 500 because the “PHP backend” times out.
  • Not really usable on live environments: While Xdebug is great for development on a local environment, it is not the best tool to be used on a live website. Xdebug has a huge performance impact on the system. Also, due to the fact that Xdebug has to “communicate” with your IDE, it might be hard to impossible to get a setup that works with your IDE and a live site.

Conclusion

There are different methods to debug PHP code, and all oft of them have their pros and cons – even more than I have mentioned in this blog post. In some cases, a quick debug with echo might be all you need. But there have been some issues, I would never have been able to find without the help of Xdebug. So I would highly recommend finding a setup that works for you.

I asked some people about their debugging methods. Around 40% use method 1 frequently, some 5% use method 2 and “only” 55% have used Xdebug before. I hope I can find a way to convince the other 45% to finally start using Xdebug in as their debugging tool.

How about you? Have you used Xdebug? Do you use other methods I have not mentioned, that really work well for you? Then please leave a comment.

WordCamp Leipzig 2023 – Smaller in size but equally amazing!

Yesterday, I visited WordCamp Leipzig. It was the first in-person event in Germany since 2019. It was a WordCamp, but also special in some ways.

Taking a train to Leipzig

When attending a WordCamp, I usually have to book trains (or flights) as well as accommodations. For this WordCamp tough, I just left my apartment at a little after 7:00, walked less than 10 min to the train, took an ICE for around 1:40h, picking up some quick breakfast and a coffee at Leipzig central station, then a tram to the venue, and finally I arrived the WordCamp at just about 2h after leaving my apartment. It was almost as if it was a local WordCamp in Berlin.

Meeting the local community

This WordCamp has always been targeted for the local community of Leipzig. Some people travelled a bit longer than I did, at least one even from another country. But I still had the chance to meet some new community members, I have never met before, as well as some, who regularly attended the WP Meetup Berlin via Zoom.

A single track schedule with invited speakers

I usually write a bit about the specific sessions I have visited at a WordCamp. But since this one had only one track, it was simple: I attended all of them 🙂

All speakers were invited by the organizing team. Some of the topics were not amongst the ones I would usually join at a WordCamp with multiple track, but I enjoyed all of them. Some with more in-depth knowledge transfer, some more broad.

The Berlin community member Maja also gave a talk about accessibility. While I knew many of the things already, some of the new regulations coming in 2025 were new to me:

Click here to display content from Twitter.
Learn more in Twitter’s privacy policy.

Translation: @MajaBenke explains to all attendees, why a #website must be #accessible! Already today! But especially in 2 years, for even more sites. #WCLE23

No lunch!

WordCamp Leipzig wanted to be “as minimalistic as possible”. That’s why we were asked to find ourselves something to eat for lunch. The venue was well located for this idea. Within 100 m there were plenty of food options for every taste. I joined a group for some (vegetarian) burger, and we talked a lot about plugins, settings/options and other developer topics.

But it was not, that the organizing team was not at all catering for us. We could have free drinks (non-alcoholic) and mate or cola helped to stay fit for the afternoon schedule. In the afternoon, we also had cake and muffins. In between talks, we often went outside to get some fresh oxygen and talk.

A long and short day

Attending 7 talks in a row without the chance to do something else, like talking to sponsors on a larger WordCamp, the day felt long. But also quite short, because all of a sudden the last talk was finished, and it was time for the closing remarks.

After thanking the organizing team (of 5 people) as well as the global and local sponsors, the team announced, that there will be a WordCamp Leipzig in 2024 as well:

Click here to display content from Twitter.
Learn more in Twitter’s privacy policy.

Translation: And #WCLE2024 will take place in 2024 in… Leipzig ?

The organizers asked everyone to leave and suggested, that we find some people to go somewhere for some socializing. But while standing outside, one of the organizers informed us, that the venue agreed to host us for some more hours. And since the free drinks were still not empty, people could then buy beer and other drink and someone suggested to just order pizza, we stayed for an “after party”:

Click here to display content from Twitter.
Learn more in Twitter’s privacy policy.

Translation: Definitely no afterparty #WCLE23

I spent another 4h talking to attendees about various topics, and someone finally explained to me, how Instagram works ?

Time to go home

I took a tram back to the train station and fortunately, I was able to share the train ride back with Heiko, who lives really close and who booked the same train. Just before midnight, I was finally home after this WordCamp, which really felt like a local one to me.

Was it really a WordCamp?

Last week, WP Tavern wrote about the new WordCamp formats, the community team is experimenting with, and WordCamp Leipzig was one of the events mentioned. Some people on Twitter started to argue, that this is not a WordCamp, but a meetup.

In my opinion, it was very much a WordCamp. If attended other WordCamps with just a single track, and also ones, where speakers had been invited. Not having lunch, was not an issue, but a great opportunity to connect to the other attendees and everyone could have the food they want.

So what else would people expect to call this a WordCamp and not a “full day meetup”?

A new event format for more communities

I’ve already heard that the British community is thinking about organizing a similar event. It would have more attendees and probably lunch, but also at most a low-key after party. I think it’s an amazing format for small or new communities to get started in organizing their first event.

This was indeed, with the exception of the “unofficial” WordCamp Jena back in 2009, the very first WordCamp in the former East of Germany. Seeing that the organizing team already decided, that they will do it again, is an amazing sign! And speaking of the team, they did a great job to make everyone feel welcomed. So, a big thanks to all the organizers!

Would I do an event like this as well?

I was thinking about something like this for Berlin. We even somehow tried to have it in 2015, but then the WordCamp became bigger and more “traditional” than intended. I don’t have plans to organize a WordCamp in Berlin this or next year, but I might want to try one of the new format than as well. But before having a WordCamp, I would really like to organize a do_action: Charity Hackathon in Berlin!

WordCamp Europe 2023 – A different perspective on the biggest WordPress event

I’m writing this blog post while I’m still in Greece. This year, I experienced the WordCamp in a different role. In 2017, I’ve joined the organizing team and continued to organize all in-person events until last year. But for the event in Athens, I had a different role.

My first trip to Greece

As so often in the past years, I got the chance to visit a new country through a WordCamp. This was my very first trip to Greece and therefore also my first visit to Athens. It started on Friday two weeks ago. We spent some time sightseeing. Visiting the Acropolis was a must for me, and the experience as worth it! But Athens has a whole lot more to offer. Not only ancient and historic sites, but also great food.

Working remotely

Since joining Inpsyde in October, I now have the freedom to work from all around the world. And since Athens is only 1 hour ahead of Berlin, it was easy to get some work done from Monday-Wednesday. Some other Inpsyder arrived Wednesday evening, and we met for a nice dinner.

Thursday: Contributor Day

Just like in previous edition, WordCamp Europe started with the Contributor Day. I had to organize some things in the morning, so I also arrived after the groups were already found. I’ve joined the “Meta + WordCamp” table, trying to work a bit on the ticket I’ve started back at WordCamp Asia in February. But since I’ve been invited to talk on a panel, I also took some time to discuss the topics with two other panelists. Right after that I had to leave, to change the hotel. So over all, the Contributor Day was not as effective as I hoped it would be.

In the evening, I was invited to “The Social” as a speaker. It was a good chance to meet some old friends and make some new ones.

Friday: The first conference Day

Even though I was 10 min late, I didn’t miss the opening remarks. Wendie, the Volunteers Team Lead, dressed up as a unicorn, to prepare the audience for the opening remarks:

Click here to display content from Twitter.
Learn more in Twitter’s privacy policy.

Right after the opening remarks, I went to the first talk.

Test instead of guessing – generate more leads through growth hacking

This talk was given by my colleague Viola. Even though it’s not something I have to deal with in my job, it is a fascinating topic and Viola prepared it perfectly! You could feel that she burns for that topic, and you would not believe, this was her first talk at a WCEU (or any other event that size).

Click here to display content from Twitter.
Learn more in Twitter’s privacy policy.

After this first slot, I met again with the other panelists, and we finalized our topics for Saturday we want to talk about and also prepared some answers for questions, that might come up. After lunch, I attended a round of three lightning talks about AI.

Take your WordPress website to another level using AI translation

Dario gave a brief introduction into the issue of translations and why it’s important to translate a site into different languages, as it extends your potential customer base. He also talked about the different solutions there are right now to translate a WordPress site, and why it’s crucial for those solutions to integrate translations AIs.

Innovating inclusion: harnessing AI for accessibility

The second lightning talk held by Sarah focussed on accessibility and how AI can help to improve it. She showed some tools that can automatically test for accessibility issues of your website. She also mentioned a service that provides a WordPress plugin, but it is using an accessibility overlay, something I personally don’t recommend, as it most often can’t solve accessibility issues successfully.

Content creation with the help of AI

The final lightning talk of this round was held by the German community member, Silvio. I think it was his first WCEU talk, and you could tell he was nervous. But he shows a fascinating case study about an experiment, where he had a human and an AI writing about the same topics and comparing the conversion rates of the two pages, in which the AI beat the human. I hope this is not going to be a trend.

Women and non-binary folx of WordPress

After these talks in track 1, I rushed into track 2 to watch a panel with some amazing folx from the WordPress community, talking about their personal experiences as women or non-binary community members. There were some great ideas, one of them regarding Q&A after talks. They proposed, that they should be optional, and I really like that idea. I hope some upcoming WordCamps will experience with that.

Click here to display content from Twitter.
Learn more in Twitter’s privacy policy.

You say you support women in tech

The last talk of the day was held by Amy in which she shared some truly personal stories of being a single mom, woman in IT who also experienced domestic violence. She gave some really good tips for all companies that really want to support women in tech. This is the kind of talks I want to see at a flagship event.

In the evening, I was invited to multiple parties, but I only managed to join the “Pride” party, co-organized by Yoast and which I also attended in Bangkok.

Saturday: the second conference day

I started my second day a bit later and used the time before my panel to visit some sponsors and meet some more people. Then it was about time to get ready for my first panel (talk) on a WordCamp Europe.

WCEU Globals: future of WCEU

I shared the stage with Lesley, Taeke, Rocío, Moncho and Tess, the former Global Leads of WCEU 2020 – 2022. Unfortunately, Jonas couldn’t join us in Athens on stage. We talked about many different aspects of organizing an event this size and some of the things we would like to see in the future. I still don’t know if I would join a future organizing team, but I am open to become a mentor for future generations of organizers, just as all the other Global Leads.

Click here to display content from Twitter.
Learn more in Twitter’s privacy policy.

Right after the panel, we all went outside for the obligatory family photo. Look how many people attended this year’s event – and made it on time for the photo 😉

Click here to display content from Twitter.
Learn more in Twitter’s privacy policy.

After lunch, I mainly talked to other attendees and visited some more sponsors. Somehow I almost forgot to collect any swag. Then it was time for the final session.

Variations on a theme: 20 years of WordPress

Following the tradition of WordCamp Europe, Matt also had a session. He was joined on stage by Josepha and Matías. They talked about Gutenberg phases 3 and 4, the Community Summit, and showed some fascinating things that are coming in the future. There was also enough time for attendees to ask some general questions. When the question around multilingual came up, which is only scheduled for phase 4, the audience was asked, who does not speak English as a first language, and it felt like everyone raised their hands. Matt also told us to “learn AI deeply”, well kind of 😉 He also almost spoiled where WCEU will be next year ?

Click here to display content from Twitter.
Learn more in Twitter’s privacy policy.

Closing remarks

But announcing the next year is something, that always rounds up the event. But before that, the organizing team was called on stage, followed by all volunteers. Then the moment everyone was finally there, the announcement of the next host city. Here is the video. SPOILER ALERT! Don’t read the tweet text 😉

Click here to display content from Twitter.
Learn more in Twitter’s privacy policy.

So we are going to meet in Torino, Italy. I had the pleasure to visit Torino through their local WordCamp back in 2017. It’s a beautiful city with amazing food! So make sure to join us there!

The after party

As I had to wake up really early the next day to catch a ferry, I didn’t have the chance to be at the after party too long. I first met the other Inpsyders for a quick dinner and then joined the crowd for about 90 min. The venue reminded me a bit about Sofia. It was really loud insides, so many attendees just occupied the area before the main entrance and enjoyed the warm evening temperatures.

Some vacation

As this was may very first trip to Greece, and I also usually spend a full week for a WordCamp Europe, we booked for another week in Greece. We took a ferry to Ikaria on Sunday, and left for Kos Friday. Today we flew back to Berlin, full of memories.

A different WordCamp Europe

As this was my first WordCamp Europe not as an organizer, for quite a while, and it felt really different. Following the tradition, I did my Local Lead -> Global Lead -> Speaker cycle and can now retire. I won’t join the next organizing team, as there are some other things in my life that will be important in the time to the next WordCamp Europe. I might not even be able to attend myself. But if I can, I will either be courageous enough to apply for a regular talk, or at least apply as a volunteer, which I only did once back in 2016. So whatever the future will have for me, we see each other in Tornio … or wherever it will be in 2025 ?