WordPress: Broken Link Checker

Description

This plugin will monitor your blog looking for broken links and let you know if any are found.

Features

  • Monitors links in your posts, pages, comments, the blogroll, and custom fields (optional).
  • Detects links that don’t work, missing images and redirects.
  • Notifies you either via the Dashboard or by email.
  • Makes broken links display differently in posts (optional).
  • Prevents search engines from following broken links (optional).
  • You can search and filter links by URL, anchor text and so on.
  • Links can be edited directly from the plugin’s page, without manually updating each post.
  • Highly configurable.

Basic Usage

Once installed, the plugin will begin parsing your posts, bookmarks (AKA blogroll) and other content and looking for links. Depending on the size of your site this can take from a few minutes up to an hour or more. When parsing is complete, the plugin will start checking each link to see if it works. Again, how long this takes depends on how big your site is and how many links there are. You can monitor the progress and tweak various link checking options in Settings -> Link Checker.

The broken links, if any are found, will show up in a new tab of the WP admin panel – Tools -> Broken Links. A notification will also appear in the “Broken Link Checker” widget on the Dashboard. To save display space, you can keep the widget closed and configure it to expand automatically when problematic links are detected. E-mail notifications need to be enabled separately (in Settings -> Link Checker).

WordpPress Kubernetes .htaccess configuration

Introduction

This chart bootstraps a WordPress deployment on a Kubernetes cluster using the Helm package manager.

It also packages the Bitnami MariaDB chart which is required for bootstrapping a MariaDB deployment for the database requirements of the WordPress application.

Bitnami charts can be used with Kubeapps for deployment and management of Helm Charts in clusters. This chart has been tested to work with NGINX Ingress, cert-manager, fluentd and Prometheus on top of the BKPR.

Prerequisites

Disabling .htaccess

For performance and security reasons, it is a good practice to configure Apache with AllowOverride None. Instead of using .htaccess files, Apache will load the same dircetives at boot time. These directives are located in /opt/bitnami/wordpress/wordpress-htaccess.conf. The container image includes by default these directives all of the default .htaccess files in WordPress (together with the default plugins). To enable this feature, install the chart with the following value:

helm install stable/wordpress --set allowOverrideNone=yes

However, some plugins may include .htaccess directives that will not be loaded when AllowOverride is set to None. A way to make them work would be to create your own wordpress-htaccess.conf file with all the required dircectives to make the plugin work. After creating it, then create a ConfigMap with it.

kubectl create cm custom-htaccess --from-file=/path/to/wordpress-htaccess.conf

Then, install the chart:

helm install stable/wordpress --set allowOverrideNone=yes --set customHTAccessCM=custom-htaccess

Upgrading

Newspack announces second set of pilot newsrooms; first U.S. site relaunches on new platform

Newspack has chosen a group of 34 news organizations to guide the next phase of development of a new WordPress-based platform for small and medium-sized publishers. They will join the existing pilot newsrooms, including Oklahoma Watch, which just relaunched on the new platform. All sites are expected to relaunch on the Newspack platform by the end of February.

WordPress Performance – Breaking It Down by HTTP Requests

1. Disable Emojis with Code#

The first way to disable emojis is you can put the following code into your functions.php file.

<span class="token comment">/**
 * Disable the emoji's
 */</span>
<span class="token keyword">function</span> <span class="token function">disable_emojis</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token function">remove_action</span><span class="token punctuation">(</span> <span class="token single-quoted-string string">'wp_head'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'print_emoji_detection_script'</span><span class="token punctuation">,</span> <span class="token number">7</span> <span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">remove_action</span><span class="token punctuation">(</span> <span class="token single-quoted-string string">'admin_print_scripts'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'print_emoji_detection_script'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">remove_action</span><span class="token punctuation">(</span> <span class="token single-quoted-string string">'wp_print_styles'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'print_emoji_styles'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">remove_action</span><span class="token punctuation">(</span> <span class="token single-quoted-string string">'admin_print_styles'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'print_emoji_styles'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">remove_filter</span><span class="token punctuation">(</span> <span class="token single-quoted-string string">'the_content_feed'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'wp_staticize_emoji'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">remove_filter</span><span class="token punctuation">(</span> <span class="token single-quoted-string string">'comment_text_rss'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'wp_staticize_emoji'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">remove_filter</span><span class="token punctuation">(</span> <span class="token single-quoted-string string">'wp_mail'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'wp_staticize_emoji_for_email'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token function">add_filter</span><span class="token punctuation">(</span> <span class="token single-quoted-string string">'tiny_mce_plugins'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'disable_emojis_tinymce'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token function">add_action</span><span class="token punctuation">(</span> <span class="token single-quoted-string string">'init'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'disable_emojis'</span> <span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token comment">/**
 * Filter function used to remove the tinymce emoji plugin.
 *
 * @param    array  $plugins
 * @return   array             Difference betwen the two arrays
 */</span>
<span class="token keyword">function</span> <span class="token function">disable_emojis_tinymce</span><span class="token punctuation">(</span> <span class="token variable">$plugins</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span> <span class="token function">is_array</span><span class="token punctuation">(</span> <span class="token variable">$plugins</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> <span class="token function">array_diff</span><span class="token punctuation">(</span> <span class="token variable">$plugins</span><span class="token punctuation">,</span> <span class="token keyword">array</span><span class="token punctuation">(</span> <span class="token single-quoted-string string">'wpemoji'</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
        <span class="token keyword">return</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}


</span>

Step 6. Host Google Fonts#

Next, if we look closer we can see there are 4 requests being generated to fonts.gstatic.com. And this is to load Google fonts, which is included in the default WordPress theme. In our example, it is loading different font weights for Merriweather and Montserrat.

https://fonts.googleapis.com/css?family=Merriweather%3A400%2C700%2C900%2C400italic%2C700italic%2C900italic%7CMontserrat%3A400%2C700%7C&subset=latin%2Clatin-ext

https://fonts.gstatic.com/s/montserrat/v7/IQHow_FEYlDC4Gzy_m8fcoWiMMZ7xLd792ULpGE4W_Y.woff2

https://fonts.gstatic.com/s/merriweather/v13/RFda8w1V0eDZheqfcyQ4EOgdm0LZdjqr5-oayXSOefg.woff2

https://fonts.gstatic.com/s/montserrat/v7/zhcz-_WihjSQC0oHJ9TCYPk_vArhqVIZ0nv9q090hN8.woff2

It always better to reduce the number of external DNS lookups and also focus on having a single HTTP/2 connection if possible. Every external lookup introduces its own set of latency issues, content download times, TLS negotiations, etc. So what we are going to do is move the Google fonts to our CDN. This way they load from the same place as the rest of our assets.

You can check out our in-depth tutorial on how to migrate Google Fonts to your CDN. This can also be used to simply host them directly on your web server as well, if you aren’t using a CDN. We quickly download the following Google fonts from https://google-webfonts-helper.herokuapp.com and host them on our server in a folder called “fonts.”

<span class="token punctuation"> </span>

Step 7. Disable Gravatars#

As you can see we are almost down to a single HTTP/2 connection with no external DNS lookups. The only thing left is that call to gravatar.com. Thankfully they are using HTTP/2 now, but unless you really want avatars, you can disable them.

gravatar http request

This can easily be remove by un-checking the “show avatars” in the discussion setting of your WordPress dashboard.

<span class="token punctuation">

</span>

By removing the call to gravatar.com we are now down to 11 HTTP requests and are using a single HTTP/2 connection for external assets on our CDN.