The original Live Blog is at https://wpguide.io/live-blog I will be migrating content over slowly.
AppSumo: Email Delivery – Self-Hosted Enterprise-Grade Email Platform
Introduction Thanks to Alexander van Aken for shooting me a message on Facebook about EmailDelivery.com, which is a Self-Hosted Enterprise Grade Email Platform for sending email campaigns. What is EmailDelivery.com? Appsumo sums it up perfectly. Now you can send emails using your own IPs for free, with unlimited delivery over multiple Email Service Providers (ESPs) and Mail Transfer Agents (MTAs). You can route email for optimal deliverability using sophisticated load balancing to improve your sender reputation. Set throttles for daily or hourly sending limits, automate IP warmups, and customize delivery for each customer using your ESP. Plus, you’ll be able to integrate with…
Bulk Create Discourse Threads from WordPress Posts
This site started using WordPress comments, then I moved the comments to Disqus, and then on to Discourse. Unfortunately, there is no bulk way to create topics for each WordPress post that existed before implementing the WordPress Discourse plugin. I found this thread on the Discourse forum. What I ended up doing was using the WP cli tool as follows $wp post update 396 398 402 {several more here} –tags_input=discourseBefore this I retrieved a list of row ID’s from the wp_posts table that had post_status = ‘publish’ and post_type = post I gave that list to the wp post command…
WordPress header.php, ACF the_field() and PHP 8.1 results in Uncaught Error: Call to undefined function get_field()
This was a strange one after moving from PHP 7.4 to PHP 8.0. and PHP 8.1 I ran into an issue where the Advanced Custom Fields plugin function the_field() resulted in the following error. Uncaught Error: Call to undefined function get_field() in /var/www/wp-content/themes/theme/header.php:146 The get_field() was in header.php and, as such, should be working, but I realized that perhaps the plugin isn’t loaded at this stage. So, I added the following to the top of the header.php file. // Include acf.php include_once(ABSPATH.’wp-content/plugins/advanced-custom-fields-pro/acf.php’); And the error went away! The get_field was defined due to the Advanced Custom Fields plugin being included.…
Caching Issues with Nginx/OLS and Dynamic Page Content (Gravity Forms)
Introduction This article was generated due to a Facebook post about Gravity Forms Stripe integration not functioning due to Nginx/OLS Cache. I’ve found that for Gravity Forms + Stripe credit card processing forms to work right I need to exclude that page from Redis caching following these instructions: https://gridpane.com/kb/exclude-a-page-from-server-caching/ But I sometimes forget! And then the form often spins and spins on submission and clients and customers are unhappy. Does anyone have any suggestions for how to streamline this process? Some kind of code that says, IF there a GF form on this page with Stripe fields THEN automatically block from…
Siteground and Cloudflare Captcha Redirect Loop
Introduction I was browsing Facebook one day and had some mentions on a post about Cloudflare, Siteground and a redirect issue. Here’s the post. Solution – Disable Siteground AI Firewall When you’re using Siteground, they have their firewall on all sites they host. It makes sense as to why you would not have something in place to stop resource-wasting attacks? The problem comes when you already have a service doing something similar or different, such as Cloudflare. The issue wasn’t repeatable; it only happened after a specific amount of time, and then disabling and re-enabling Cloudflare fixed the issue. After…
WP Ultimo Version 1, Increase Page Loads and cURL timeouts for versions.nextpress.co
Introduction I have a customer running WP Ultimo Version 1, specifically the latest version of their 1.x.x branch which is 1.10.18 and they were getting 30-second page loads no matter the page. The server load was high, but it didn’t make sense that the page loads were so high. I did upgrade their instance just as a quick measure for troubleshooting, and no difference. So I started digging further into WordPress, something was delaying the loads. Resolution Typically I set up php-fpm slow log, but this customer was running Openlitespeed, and unfortunately, LSAPI_SLOW_REQ_MSECS doesn’t work with Openlitespeed. So I turned…
Place All Sites on a GridPane Server into Maintenace Mode
Questions Is there a command to activate/deactivate all sites on a single server into maintenance mode? Something like gp all-sites wp maintenance-mode activate Solution There isn’t anything natively within GridPane’s CLI that will do this. However, this might help you. I created a function to list all sites on a server, excluding staging, canary and the default gridpanevps. Here is the code snippet. ls -ld /var/www/*/ | grep -v -e ‘canary’ -e ‘staging’ -e ‘gridpanevps’ -e ‘22222’ | awk ‘{print $9}’ | sed ‘s|/var/www/||’ | sed ‘s|/$||’ You can pipe this into xargs and run any command you’d like against…
Rolling your own/Selfhost Transaction Email Servers versus using Postmark
Rolling your own transactional email servers: I am curious who does this and how it works for them. If you do not roll your own, why not? The only down sides I really see here is missing automation from GP and tracking opens maybe a few other small things. I have been doing this for awhile now. I setup iRedMail, strip the heavy bits out such as clamav. a 4GB vm can support a substantial amount of sites and emails and saves a good amount of cash. Each site gets an account to connect to and is throttled by emails…
Cloudflare CNAME Flattening and Proxying
This was posted somewhere behind a membership wall. So I thought I’d post this to the public. I think this is correct for the CName Strategy in Cloudflare: website.site Type: A, Name: Cloud, IP Content:199.199.199.19, Proxy Status: off, TTL: Auto website.xyz Type: CName: Name: website.xyz, Content: cloud.website.site, Proxy Sttus: Off, TTL: Auto My only question is can we turn on proxy when doing CName Flattening. Someone had responded saying this is not CNAME flattening. But it actually is CNAME flattening. CNAME flattening allows you to create a CNAME record at the root of your domain without violating RFC’s (the rules…