<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>wordpress on {bjørn:johansen}</title>
    <link>https://bjornjohansen.com/tag/wordpress/</link>
    <description>Recent content in wordpress on {bjørn:johansen}</description>
    <generator>Hugo -- 0.118.2</generator>
    <language>en-US</language>
    <lastBuildDate>Mon, 21 Oct 2024 21:13:20 +0000</lastBuildDate>
    <atom:link href="https://bjornjohansen.com/tag/wordpress/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Farewell to the WordPress Community</title>
      <link>https://bjornjohansen.com/farewell-to-wp/</link>
      <pubDate>Mon, 21 Oct 2024 21:13:20 +0000</pubDate>
       <guid isPermaLink="false">https://bjornjohansen.com/farewell-to-wp/</guid> 
      <description>So Long, and Thanks for All the Fish</description>
    </item>
    <item>
      <title>Migrating from WordPress to Hugo</title>
      <link>https://bjornjohansen.com/wp2hugo/</link>
      <pubDate>Wed, 16 Oct 2024 23:07:00 +0000</pubDate>
       <guid isPermaLink="false">https://bjornjohansen.com/wp2hugo/</guid> 
      <description>Yesterday, I migrated this blog from WordPress to Hugo. These are the steps I took to do so.</description>
    </item>
    <item>
      <title>Goodbye WordPress, Hello Hugo</title>
      <link>https://bjornjohansen.com/goodbye-wordpress-hello-hugo/</link>
      <pubDate>Tue, 15 Oct 2024 19:11:22 +0000</pubDate>
       <guid isPermaLink="false">https://bjornjohansen.com/goodbye-wordpress-hello-hugo/</guid> 
      <description>This afternoon&amp;rsquo;s hobby project was to convert my WordPress blog into a static site using Hugo.</description>
    </item>
    <item>
      <title>Install and update translations in WordPress with Composer</title>
      <link>https://bjornjohansen.com/composer-wordpress-translations/</link>
      <pubDate>Fri, 10 Aug 2018 19:45:23 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:65613162-6231-5361-a461-626139616135</guid> 
      <description>Using Composer is a great way of organizing your WordPress project, with WordPress itself, plugins and themes declared as dependencies. However, an issue I’ve often seen is how you install translation files and keep them updated.</description>
    </item>
    <item>
      <title>Gravity Forms personal data exporter and eraser</title>
      <link>https://bjornjohansen.com/gravity-forms-personal-data-exporter-and-eraser/</link>
      <pubDate>Thu, 24 May 2018 00:25:56 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:34613161-3234-5462-b863-383936626363</guid> 
      <description>When WordPress 4.9.6 launched on May 17, 2018 it came with new tools for exporting and erasing personal data that you may have collected (you know, GDPR and all). But Gravity Forms as of version 2.3.2 doesn’t integrate with these tools. Fortunately, it is really easy to write your own exporters and erasers.</description>
    </item>
    <item>
      <title>How to mitigate CVE-2018-6389 – the load-scripts.php DoS “attack” in WordPress</title>
      <link>https://bjornjohansen.com/load-scripts-php/</link>
      <pubDate>Mon, 12 Feb 2018 22:38:40 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:64653138-3531-5034-b836-633934386261</guid> 
      <description>A little sensationalist written blog post by Barak Tawily claims that WordPress is vulnerable to a DoS attack because of the load-scripts.php file which concatenates JavaScript files on the fly.</description>
    </item>
    <item>
      <title>HTTP/2 Push WordPress Assets to First-Time Visitors</title>
      <link>https://bjornjohansen.com/http2-push-wordpress/</link>
      <pubDate>Mon, 29 Jan 2018 23:27:56 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:39323333-3831-5839-a639-343335323461</guid> 
      <description>With HTTP/2 push you can effectively send a web page’s assets to the client before the client even knows about them. Here’s how you can HTTP/2 push WordPress assets to your first-time visitors.{{ double-space-with-newline }}</description>
    </item>
    <item>
      <title>Another day, another “WordPress security vulnerability”</title>
      <link>https://bjornjohansen.com/another-day-another-wordpress-security-vulnerability/</link>
      <pubDate>Sat, 27 Jan 2018 00:36:35 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:66616636-6434-5639-a261-376632623031</guid> 
      <description>OMFG, BREAKING NEWS: Thousands of WordPress sites affected by some vulnerability.{{ double-space-with-newline }}</description>
    </item>
    <item>
      <title>Welcome to WordCamp Oslo 2018</title>
      <link>https://bjornjohansen.com/welcome-to-wordcamp-oslo-2018/</link>
      <pubDate>Thu, 25 Jan 2018 17:18:42 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:31383731-6661-5430-b834-363134626365</guid> 
      <description>On March 2–4 2018, Friday through Sunday, there will be a great chance to meet WordPressers at the conference WordCamp Oslo 2018.</description>
    </item>
    <item>
      <title>Cut 90% of your WordPress translations loading time</title>
      <link>https://bjornjohansen.com/wordpress-translations-loading-time/</link>
      <pubDate>Sat, 20 Jan 2018 20:59:27 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:65333936-3565-5538-a135-343239393364</guid> 
      <description>WordPress translations are compiled from human-readable PO-files into machine optimized MO-files, but still takes a lot of overhead to load. If you only could cache the translation load time, you would save a lot of page load time. We can easily cut 90% of our WordPress translations loading time.</description>
    </item>
    <item>
      <title>Git Pre-commit Hook for WordPress projects</title>
      <link>https://bjornjohansen.com/wordpress-git-pre-commit-hook/</link>
      <pubDate>Sat, 20 Jan 2018 19:43:51 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:64386132-6438-5064-a564-613165373034</guid> 
      <description>Wouldn’t it be cool if you, in your PHP project could define a package that makes sure that everybody who even tries to commit code is forced to follow the project’s defined coding standards? Yeah, me too. So I created this Composer plugin you can use in your projects.</description>
    </item>
    <item>
      <title>Speed up the output by 1000x with a WordPress menu cache</title>
      <link>https://bjornjohansen.com/wordpress-menu-cache/</link>
      <pubDate>Sat, 20 Jan 2018 18:29:37 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:63336138-3961-5632-b564-313362326132</guid> 
      <description>Generating the menus in WordPress is quite resource intensive. Sites with few visitors and few menu items might not notice this much. But if you have a large amount of menu items, like in a mega menu, in combination with a lot of visitors the menu generation can be a real hog on your server’s CPUs. Let’s see if we can improve the speed with a little WordPress menu cache trickery.</description>
    </item>
    <item>
      <title>Customize the WordPress maintenance mode page</title>
      <link>https://bjornjohansen.com/customize-wordpress-maintenance-mode/</link>
      <pubDate>Fri, 01 Sep 2017 17:00:17 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:30316139-3739-5163-a563-343739313463</guid> 
      <description>Whenever you upgrade a plugin, theme or WordPress itself through the WordPress dashboard, WordPress will put itself in maintenance mode and all your visitors will see the maintenance mode notice “Briefly unavailable for scheduled maintenance. Check back in a minute.”</description>
    </item>
    <item>
      <title>WordPress security for the casual blogger or small business with limited resources</title>
      <link>https://bjornjohansen.com/wordpress-security-budget/</link>
      <pubDate>Thu, 10 Aug 2017 16:37:51 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:62626336-6637-5339-a230-366461663232</guid> 
      <description>The resources you have available to spend on WordPress security for your website usually vary vastly whether you’re an international corporation or just a hobbyist blogger. But since most attacks are automated by bots looking for vulnerabilities, a lot of the threats are the same. Here are some WordPress security measures that bloggers and small business with limited resources easily can take.</description>
    </item>
    <item>
      <title>Use mu-plugins for adding custom functionality to your WordPress site</title>
      <link>https://bjornjohansen.com/mu-plugins/</link>
      <pubDate>Wed, 09 Aug 2017 16:35:35 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:35633735-6230-5838-a333-313731386133</guid> 
      <description>If you google “functions.php” you get about 7 million results. I bet most of them contain bad advice: “How to add functionality to your WordPress site”. Some of them continue even worse: “[…] without using a plugin”. For your own good, don’t edit functions.php to add custom functionality to your WordPress site. You can use mu-plugins to do that.</description>
    </item>
    <item>
      <title>Don’t be “clever” with the translatable strings in your WordPress plugin or theme</title>
      <link>https://bjornjohansen.com/clever-wordpress-translations/</link>
      <pubDate>Sun, 06 Aug 2017 09:30:00 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:30326530-6362-5439-b239-373030663265</guid> 
      <description>Since I translate a lot of WordPress themes and plugins, I sometimes come across plugins who try to be clever with their translations. This tends to not work so well in reality.</description>
    </item>
    <item>
      <title>A reference of all outgoing WordPress emails</title>
      <link>https://bjornjohansen.com/wordpress-emails/</link>
      <pubDate>Thu, 03 Aug 2017 18:53:30 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:31373732-6539-5339-a136-363637343034</guid> 
      <description>As you may know, WordPress sends out email notifications from time to time. Actually, as of WordPress 4.8.1, there are 24 different occasions when WordPress will send an email message. Don’t you think it would be useful to have a reference of all outgoing WordPress emails?</description>
    </item>
    <item>
      <title>The bus factor in the WordPress project</title>
      <link>https://bjornjohansen.com/wordpress-contingency-plan/</link>
      <pubDate>Sun, 18 Jun 2017 19:19:01 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:66333838-6333-5530-a463-366563653163</guid> 
      <description>During WordCamp Europe 2017 in Paris, there was a Q&amp;amp;A session with Matt Mullenweg. I wanted to ask him a question, but due to high demand and restricted time, I never got to ask him. I guess Matt is a busy person, so I don’t expect him to actually answer this question himself. But maybe someone in the WordPress community has answers, insights or ideas?
A person is the CEO of one of the most important WordPress-related companies.</description>
    </item>
    <item>
      <title>Proper RFC 4122 UUIDs as GUIDs in WordPress</title>
      <link>https://bjornjohansen.com/uuid-as-wordpress-guid/</link>
      <pubDate>Sat, 10 Jun 2017 15:05:02 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:66653238-6436-5933-a535-616665323332</guid> 
      <description>UUIDs (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDentifier), is a string that identifies a piece of information in computer systems. WordPress use GUIDs to identify each individual post, but use URLs (kind of) for GUIDs, and thus does not follow the standard definition (RFC 4122) of a UUID (or GUID).</description>
    </item>
    <item>
      <title>How to perform and mitigate a WordPress session donation attack</title>
      <link>https://bjornjohansen.com/wordpress-session-donation-attack/</link>
      <pubDate>Wed, 22 Mar 2017 15:16:56 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:30626132-3437-5738-b264-633332333961</guid> 
      <description>WordPress doesn’t use a nonce for the login form, which opens up for you to perform a WordPress session donation attack.</description>
    </item>
    <item>
      <title>Immutable assets with unique URLs in WordPress for enqueued JS and CSS files</title>
      <link>https://bjornjohansen.com/immutable-assets-wordpress/</link>
      <pubDate>Tue, 21 Mar 2017 19:47:48 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:36313862-3266-5261-b061-663763373839</guid> 
      <description>If you’re utilizing the browser cache correctly, you’ll gain huge performance benefits for your users, as well as save bandwidth and server capacity which equals to saving money. To do this right, you must create unique URLs for all versions of your resources, and tell them to never ask for the content again by telling the browsers that the assets are immutable resources.</description>
    </item>
    <item>
      <title>Giving users a helping hand when authorizing them in WordPress</title>
      <link>https://bjornjohansen.com/wordpress-assisted-password-check/</link>
      <pubDate>Tue, 24 Jan 2017 07:17:14 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:36323937-6365-5235-b963-353430666163</guid> 
      <description>Inspired by how Facebook assists their users when they log in, I decided to implement something like the same for WordPress.</description>
    </item>
    <item>
      <title>Move your WordPress site from non-www to www domain</title>
      <link>https://bjornjohansen.com/move-wordpress-from-non-www-to-www/</link>
      <pubDate>Mon, 23 Jan 2017 18:49:14 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:65303734-3834-5863-b362-633939623035</guid> 
      <description>So, you’ve launched your WordPress site on a non-www domain, like example.com, but since then found out that running it on on www, like &lt;a href=&#34;https://www.example.com&#34;&gt;www.example.com&lt;/a&gt;, is better and want to move? You’re in luck, because it is really easy.</description>
    </item>
    <item>
      <title>Flexible Content Fields in Field Manager</title>
      <link>https://bjornjohansen.com/field-manager-flexible-content/</link>
      <pubDate>Fri, 02 Dec 2016 19:42:06 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:30313135-6534-5139-b461-626162616366</guid> 
      <description>&lt;a href=&#34;http://fieldmanager.org/&#34;&gt;Field Manager&lt;/a&gt; doesn’t have a flexible content field type as &lt;a href=&#34;https://www.advancedcustomfields.com/pro/&#34;&gt;Advanced Custom Fields Pro&lt;/a&gt; does, but it is possible to mimic the functionality by using a little logic.</description>
    </item>
    <item>
      <title>SVG uploads in WordPress (the Inconvenient Truth)</title>
      <link>https://bjornjohansen.com/svg-in-wordpress/</link>
      <pubDate>Thu, 26 May 2016 20:02:07 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:30303135-3439-5535-b863-313431636535</guid> 
      <description>&lt;p&gt;Enabling uploads of SVG files in WordPress is quite easy, and there is a tonne of posts on the Interwebs explaining how you do it. Usually along the lines of:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;function add_svg_to_upload_mimes( $upload_mimes ) {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	$upload_mimes[&amp;#39;svg&amp;#39;] = &amp;#39;image/svg+xml&amp;#39;;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	$upload_mimes[&amp;#39;svgz&amp;#39;] = &amp;#39;image/svg+xml&amp;#39;;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	return $upload_mimes;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;add_filter( &amp;#39;upload_mimes&amp;#39;, &amp;#39;add_svg_to_upload_mimes&amp;#39;, 10, 1 );
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And that’s pretty much it.&lt;/p&gt;
&lt;p&gt;Except it is not.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Allow SVG uploads to WordPress when behind Sucuri CloudProxy</title>
      <link>https://bjornjohansen.com/svg-upload-cloudproxy/</link>
      <pubDate>Wed, 25 May 2016 19:29:02 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:32346432-3434-5362-b664-313863323232</guid> 
      <description>Uploading SVG files to WordPress when you’re behind the Sucuri CloudProxy Web Application Firewall isn’t that straightforward, but it is possible.</description>
    </item>
    <item>
      <title>Run all due cron events for WordPress with WP-CLI</title>
      <link>https://bjornjohansen.com/wordpress-cron-wp-cli/</link>
      <pubDate>Wed, 09 Dec 2015 15:45:48 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:33653861-3162-5930-a664-636666633637</guid> 
      <description>Running a real cronjob is much more reliable than WordPress’ built-in “maybe-will-trigger” solution. But if you’re running a multisite network, you have to add a crontab entry for every site you set up – which is tedious. Thanks to WP-CLI, we can use a small bash script instead, which will run all due events for all sites for us. Oh, and it works for single sites as well.</description>
    </item>
    <item>
      <title>Block access to PHP files on your WordPress site with Nginx</title>
      <link>https://bjornjohansen.com/block-access-to-php-files-with-nginx/</link>
      <pubDate>Mon, 19 Oct 2015 20:43:56 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:64396231-3165-5362-a165-633364313838</guid> 
      <description>In your WordPress site, there are directories that include PHP files that visitors should never be able to access directly. They are only there for WordPress to function as an application that runs on your server. But because of WordPress’ directory and file structure, they are kind of accessible to the public. All of them are meant to be part of a larger application – WordPress, that is – and should not cause any harm if called directly – that we know. Some of the files execute some code even when ran standalone. An attacker might know of a clever way to make that code run in an unexpected manner, causing harm. To be on the safe side, we should deny access to all these PHP files from the outside world. Since we block access to them in our Nginx configuration, PHP will still run them as usual and WordPress will work just fine.</description>
    </item>
    <item>
      <title>Strict file ownership for your WordPress installation</title>
      <link>https://bjornjohansen.com/strict-file-ownership-for-wordpress/</link>
      <pubDate>Tue, 13 Oct 2015 17:08:28 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:38653463-3732-5566-b834-323637313536</guid> 
      <description>WordPress requires write access to one directory, and that one directory only: the directory returned by &lt;code&gt;wp_upload_dir()&lt;/code&gt;. By default, this is &lt;code&gt;/wp-content/upload&lt;/code&gt;, but it can be configured to anything that is beneath your document root, like &lt;code&gt;/media&lt;/code&gt;, if you want to.</description>
    </item>
    <item>
      <title>Two Factor Authentication for WordPress</title>
      <link>https://bjornjohansen.com/two-factor-authentication-for-wordpress/</link>
      <pubDate>Wed, 07 Oct 2015 07:56:02 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:65613334-3735-5531-b236-666432386137</guid> 
      <description>If you’re using a strong password, brute-forcing is a very inefficient way of breaking into your WordPress account, and if it is really strong, dictionary attacks won’t help much either. However, there are are other, easier, ways for a mischievous person to get their hands on your login credentials e.g. with phishing, keyloggers or a MITM attack. By using a two-factor solution, you will increase your login security by an order of magnitude.</description>
    </item>
    <item>
      <title>WordPress behind Big-IP</title>
      <link>https://bjornjohansen.com/wordpress-behind-big-ip/</link>
      <pubDate>Mon, 28 Sep 2015 17:09:42 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:61323430-6437-5137-a363-313964663739</guid> 
      <description>To be honest, I don’t exactly know too much about Big-IP, but I’ve come across someone who use it. They terminate HTTPS in Big-IP and WordPress runs on plain HTTP on port 80 on the backend nodes. By default, this makes WordPress confused, so you can’t login to the WordPress dashboard.</description>
    </item>
    <item>
      <title>Using fail2ban to block WordPress login attacks</title>
      <link>https://bjornjohansen.com/using-fail2ban-with-wordpress/</link>
      <pubDate>Fri, 07 Nov 2014 19:31:38 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:35333461-3535-5165-a134-373366663038</guid> 
      <description>Fail2ban works by filtering a log file with a regular expression triggering a &lt;code&gt;ban&lt;/code&gt; action if the condition is met. After a preset time, it will trigger an &lt;code&gt;unban&lt;/code&gt; action. Without much effort, we can have WordPress log all authentication events and have fail2ban react on them.</description>
    </item>
    <item>
      <title>WordPress Quality Guidelines</title>
      <link>https://bjornjohansen.com/wordpress-quality-guidelines/</link>
      <pubDate>Thu, 27 Feb 2014 18:53:22 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:33373866-3736-5466-b337-666363396338</guid> 
      <description>Any organization where multiple developers cooperate on a regular basis needs some guidelines to assure optimal quality of the end result. Most of these rules applies to freelancers as well.</description>
    </item>
    <item>
      <title>«Slap-on» speed optimization of your WordPress site</title>
      <link>https://bjornjohansen.com/slap-speed-optimization-wordpress-site/</link>
      <pubDate>Thu, 30 Jan 2014 15:23:00 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:65613136-6138-5639-b764-616435343332</guid> 
      <description>OK, so you might have been at a WordCamp listening to talks or reading a few blog posts and you get that you should really get your WordPress site speed optimized. Starting all over isn&amp;rsquo;t either tempting nor something you have the time for. Don&amp;rsquo;t despair, you&amp;rsquo;ll get a long way by installing 5 plugins.</description>
    </item>
    <item>
      <title>Optimize your JS and CSS loading in WordPress</title>
      <link>https://bjornjohansen.com/wordpress-minify/</link>
      <pubDate>Sun, 22 Sep 2013 22:04:51 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:66636463-6261-5533-a430-353361366633</guid> 
      <description>When you get into page loading optimization, you will quickly find these «must-dos»: Combine your CSS and JavaScript files (respectively), minimize your CSS and JavaScript, load CSS before JS, load JS in body footer and then even some. Without much effort, we can make WordPress do all of this automatically.</description>
    </item>
    <item>
      <title>Make Gravity Forms&#39; JavaScript load in the footer</title>
      <link>https://bjornjohansen.com/load-gravity-forms-js-in-footer/</link>
      <pubDate>Thu, 19 Sep 2013 17:32:28 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:66356262-3663-5439-a639-353463613463</guid> 
      <description>Gravity Forms is not only THE way to create and manage forms in WordPress, but is also pretty awesome when it comes to extensibility and flexibility. However, as most software, it has its issues. One of those is how it outputs some of the JavaScript, which in certain cases will break your site. This is how to fix it.</description>
    </item>
    <item>
      <title>Why use WordPress as your corporate CMS?</title>
      <link>https://bjornjohansen.com/use-wordpress-corporate-cms/</link>
      <pubDate>Fri, 23 Aug 2013 15:42:20 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:64313861-3731-5634-b735-363535356565</guid> 
      <description>&lt;img src=&#34;https://www.bjornjohansen.com/content/uploads/2013/08/wordpress-300x186.png&#34; alt=&#34;WordPress&#34;
     loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;
There are now several years since WordPress was considered a blog platform only. Today, it&amp;rsquo;s a full blown CMS and perfectly capable of powering corporate web sites. Here I provide you with 5 non-technical reasons why WordPress is well fit for a corporate CMS.</description>
    </item>
    <item>
      <title>Publishing WordPress site from development to production server – or moving your WordPress installation from one host to another</title>
      <link>https://bjornjohansen.com/publishing-wordpress-site/</link>
      <pubDate>Mon, 12 Aug 2013 21:20:25 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:34616165-3766-5539-b631-396631393734</guid> 
      <description>&lt;img src=&#34;https://www.bjornjohansen.com/content/uploads/2013/08/wordpress-300x186.png&#34; alt=&#34;WordPress&#34;
     loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;
You have finished that WordPress site, and want to deploy it – move it from your test server to the production server where it goes live. But how? WordPress have a famous 5-minute-install, but there is no 5-minute-go-live-script*. I&amp;rsquo;ll show you how in these 5 easy-to-follow steps.</description>
    </item>
    <item>
      <title>Restricting access to WordPress login by IP address</title>
      <link>https://bjornjohansen.com/restricting-access-to-wordpress-login-by-ip-address/</link>
      <pubDate>Sat, 20 Apr 2013 20:15:34 +0000</pubDate>
       <guid isPermaLink="false">urn:uuid:33306539-3032-5330-b562-623835343236</guid> 
      <description>If you have a static IP address, like from &lt;a href=&#34;https://www.bjornjohansen.com/setting-up-your-own-pptp-vpn&#34;&gt;your own VPN&lt;/a&gt;, it is very easy to increase your security tremendously. Simply restrict all logins to that IP address.</description>
    </item>
  </channel>
</rss>
