Today was the first day the temperature reach above-zero-Celsius after a seven day freezing period. We really had winter for a week, and we all enjoyed it as much as we could.
I planned a walk for yesterday, but since we wanted to ice-skating (yes, on natural ice) I postponed the walk for a day.
At about 10 minutes past 7 in the morning, I left my home, and started walking. I planned a trip of 30km. See the tweet below. Also, this tweet collection contains some images of the gallery below.
After witnessing a magical sunset, walking in the snow, between people ice-skating on natural ice for the first time since about 9 years was really special. I’m posting this on my blog, because I want as many of you to experience what I saw. Sure, these are just pictures, but you can get a sense of how it was.
Here’s the picture gallery, I hope you enjoy the pictures! Complete route can be found below the pictures.
Bitcoin (₿) is a cryptocurrency invented in 2008 by an unknown person or group of people using the name Satoshi Nakamoto. The currency began use in 2009 when its implementation was released as open-source software.
Bitcoin is a decentralized digital currency, without a central bank or single administrator that can be sent from user to user on the peer-to-peer bitcoin network without the need for intermediaries.
Transactions are verified by network nodes through cryptography and recorded in a public distributed ledger called a blockchain. Bitcoins are created as a reward for a process known as mining. They can be exchanged for other currencies, products, and services. Research produced by the University of Cambridge estimated that in 2017, there were 2.9 to 5.8 million unique users using a cryptocurrency wallet, most of them using bitcoin.
Bitcoin has been criticized for its use in illegal transactions, the large amount of electricity used by miners, price volatility, and thefts from exchanges. Some economists, including several Nobel laureates, have characterized it as a speculative bubble at various times. Bitcoin has also been used as an investment, although several regulatory agencies have issued investor alerts about bitcoin.
I’m stepping down as lead organizer for WordCamp The Netherlands. Not an easy decision, but one I had to make. For myself.
Taking care of myself
With voluntary work, and the fun that it brings, for me the danger arises to accept too many tasks and drown in too much work. I like it so much, that I tend to accept too much. Also, besides doing voluntary work for the WordPress community, paid work has to be done also.
Since April 1st, I started working for Kinsta as Marketing Manager Dutch Market. This job is giving me lots of energy, teaches me new skills, makes me get to know a lot of new people and, which should be no surprise for a new job, takes time to get into my system. I really like to keep the balance level for voluntary work and paid work, this keeps me productive on both sides, and maybe even more important, prevents me from getting too busy which may result in not getting work done, or getting stressed out to get it done.
Since this COVID-19 thing entered our world, causing lot’s of tragic things to happen worldwide, lots of WordCamps have shifted to being online events. The WCNL organizing team really wanted to do a live, in-person event, so we decided to postpone the organization [NL]. Having built a new team of organizers, with lots of energy to start, this felt bad. It was the best thing we could do however.
To give the Dutch and Belgian WordPress community a change to meetup and share knowledge we decided to organize WPNL Live! A series of short online events.
WPNL Live! – first edition
The first edition was on May 28th, and it was a success. You can watch the recorded session here. Seeing how the organization team put this together, how the event was and how happy the attendees were, gave me a very good feeling about stepping down as lead organizer. Yes, I’ve had this thought for a while now…
I’ll keep contributing to WordPress
After contributing almost 10 year to WordPress, I can say for sure, I will not stop doing that. Except when things happen that I have no power over, but let’s not go there. I will be available for mentoring our new Dutch lead organizer, other organizers, and volunteers. Teaching others the details of the WordPress Community is something I really enjoy doing. WordPress is in my system and I’m happy it’s there.
My job at Kinsta
As a Marketing Manager, I take care of many different tasks for Kinsta.
One of my responsibilities is being the main contact for WordCamp related communications between WordCamp organizers and Kinsta. Having this role might bring conflict of interest if I’m also a lead organizer. Of course I would keep both roles separated, but to prevent people from seeing a conflict here, I decided it’s best to drop the lead organizer role.
I hope it’s all clear why I took this decision. If not, please reach out to me.
After almost 11 years working for a diverse range of clients, I have decided to start a new adventure. Starting April 1st, I’ll be working full-time for Kinsta – Managed WordPress Hosting, as Marketing Manager Dutch Market.
Why did I take this step?
In 2009 I decided I wanted to serve my own clients and left my employer to start nostromo.nl. Since then I have served many clients and helped them improve their publishing workflow, developed new websites and grew their revenue. And now, I’m ending that.
I’m ending this because I feel like I’m loosing enthusiasm. As I have learned from the past, when I loose enthusiasm for my job, I’m going to postpone or even prevent certain tasks. And that will definitely not help my clients. They deserve the attention and enthusiasm they are used from me, nothing less. Also, I have been looking to get employed WordPress related companies, just talks, but the option of me working for another company than my own crossed my mind. That was a confirmation of my declining enthusiasm to run my own company and serve my clients.
Another option I had thought about was scaling my company. I have been working with numerous partners to deliver what clients wanted. Sometimes my own two hands just could not complete the task because of lack of time, technical challenges, or without me knowing enough about it the task. Hiring people/companies on a project basis to get more skills in certain areas worked great but just did’nt work out all the time. Sometimes (to be honest, most of the times) partners had no time because they were already involved in other projects. When that happens, I cannot close a deal with a client, because I simply can’t handle the extra workload.
And then, the final option I have thought about, hiring people. So nostromo.nl would not be a one man company anymore. Most of the times I have thought about this it only lasted a few minutes, then I stopped considering this to be an option. Mainly because I really like the flexibility of hiring partners on a project basis and do not like to have fixed employees.
So, all options I thought about did not spark my enthusiasm in a way that I wanted to seriously pursue them. Except one. The only option that gave me positive vibes, was working for an employer, or as a contractor.
Let’s go back to May 2019. I was walking to Berlin to raise funds for DonateWC, and I named it Walk To WordCamp Europe. Do you see who was the Golden Shoe sponsor (or in normal English, the main sponsor)? Yes, Kinsta. For many reasons the conversations before the adventure, and on WordCamps where Kinsta was sponsor, really gave me a good feeling about them and their services.
So, in December 2019 I decided to contact Kinsta to explore the possibility of me working for them. Well, the result of that is now known. I’m very happy that Kinsta allows me to start this new adventure and I’m looking forward to start the new job.
Kinsta was founded in 2013 and their goal is be the best WordPress hosting platform in the world. Their team is remote-first with local hubs.
Performance is Kinsta’s obsession and by fine-tuning their servers they deliver maximum speeds. Only the best technology is used at Kinsta, from their server hardware to the software they run. No matter what development stack you use, they will always have the latest framework versions installed and up to date. Servers are powered by the Google Cloud Platform in 22 global data centers. Everything is interconnected over their premium tier network, designed to minimize distance and hops, resulting in fast and secure transport of your data.
These and much more features give customers an automatic scalable (when traffic spikes), easy manageable (with MyKinsta) and isolated (no performance impact of other sites hosted at Kinsta) WordPress hosting environment.
Since I’ll be going to work for Kinsta on a full time basis, I have no room in my schedule to deliver the same amount of service to my clients. As of March 1st, clients with a WordPress maintenance contract have been transferred to Buro Staal.
Projects that are in progress will be finished as agreed upon and I will not accept any new projects. So basically, all services delivered from nostromo.nl will be stopped.
I want to thank all my clients for choosing me and nostromo.nl for their WordPress related challenges. (Of course I have already informed and thanked all my clients of this career move).
Thanks for reading this post about my new challenge at Kinsta. I am looking forward to working for them, getting to know the team, meeting new contacts and making clients happy with the best Managed WordPress Hosting the world has to offer.
If you want to chat with me about Kinsta’s offerings, please consider this an invitation to reach out to me.
Want to show featured posts first in FacetWP results? Here’s how to do it.
A client, using FacetWP to show posts filtered by a few Advanced Custom Fields, wanted to introduce featured posts. These posts need to be show first, and the rest of the results should be shown random.
Since FacetWP does an AJAX request every time a page is requested, or a facet is changed, we need to do something to prevent every request to show random posts, since that could show posts on multiple result pages.
Thinking about a solution
When a client drops an idea, actually any idea, my brain starts to think on how to implement this. With my experience I know some filters of my favorite plugins, but not all. So I draft a solution first.
Posts need to have an extra field, where the client can indicate a post is featured. Since the posts already have some ACF fields, I will add the featured field to it.
Next up is filtering the query to feed FacetWP the $post_ids in the right order, with featured posts first, followed by the other posts in a random order. I found out the facetwp_filtered_post_ids filter can be used for that.
Coding the solution
Here’s my favorite part of implementing a clients request. The actual coding. I start with writing the facetwp_filtered_post_ids filter function. This function has to return all post ids, in the right order, with the featured post on the front of the array.
The query arguments are self explanatory, except maybe for the meta_compare argument. LIKE is used here, becuase ACF stores the value of the uitgelicht (Featured) field in a serialized way. Be careful when using this, since this might give you unexpected results. In this case, the uitgelicht field can only have a value of 'ja' (yes), or '' (empty), so we can safely use this.
The we launch the query and get the results on line 16. NOw we need to remove the featured posts from the $posts_ids variable that is passed to this function through the filter. So we walk through the $post_ids and put the featured post id in the $matches array, and remove the post id from the $post_ids array. This gives us two arrays, $matches which holds the featured posts, and $post_ids which holds all other posts, without the featured posts.
Now we need to randomize the posts in $post_ids. As stated before, we don’t want to randomize on every request. With the client I discussed this, and came to a solution where results would be randomized every hour.
First I used the shuffle() function to randomize the $post_ids array. Sadly, this did not give me an option to keep the random order for a certain amount of time. So, here comes array_multisort().
We first set a duration in minutes, get the current time in minutes and subtract the duration from this time, to set the seed. Then we use the mt_srand() function to create seed. Next is seting the order and use that to re-order the $post_ids array with array_multisort().
The final thing we need to do in this filter function is merge the randomized post ids, together with the featured posts and return the array.
🚀 Performance tip: If you only need post ids, add 'fields' => 'ids' to the query args. This results in a query that only asks for ids, and not all other fields available in the posts table.
Apply the sorting to the FacetWP template
One final step is needed to get the results right. We need to set the order and orderby parameters on the FacetWP query for the template we want this to be used for. Here’s the facetwp_query_args filter. We add the query parameters to the original query parameters, and return the $query_args variable.
Here the code on Github, feel free to comment if you want.
In this short howto I will show you how you can preselect a facet, and hide it when the page renders.
For this case the client has a few facets that are filled by custom fields. The fields are specialism and level. These are related to a custom post type Mentor.
Note: When you need to preselect values that contain special characters (tested with ‘ë’, ‘é’, ‘è’) just put a normal ‘e’ in the custom field.
To preselect a facet, we can use the facetwp_preload_url_vars filter. But, during execution the $post global variable is not available, so we need to first get the post. By using the get_uri() method of the FWP->helper class, we can get the uri. This can be mapped to the page name which a separate function nostromo_get_post_id_by_post_name() uses to get the post id.
When we have the post id, it’s possible to get the custom fields and use them as values for the preselects. We just have to add them to the url_vars array with the names of the facets.
At the end of the function we return the url_vars array, so the filter can be applied.
Hiding the preselected facet
To hide the preselected facet(s), all we have to is add a piece of CSS to the page, when the url_vars are set. Here’s when a hook comes in very handy. You can see the code on lines 23 and 35. You might need to tweak the CSS, or add some classes to make the CSS specific enough to work. Or use !important, just don’t tell anyone I gave you that advice.