<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>You searched for Downtime - Web321: Your Best WordPress Support</title>
	<atom:link href="https://web321.co/search/Downtime/feed/rss2/" rel="self" type="application/rss+xml" />
	<link>https://web321.co/</link>
	<description>Your WordPress Website Maintenance Experts</description>
	<lastBuildDate>Wed, 29 Apr 2026 03:24:37 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://web321.co/wp-content/uploads/2022/04/cropped-favicon-32x32.png</url>
	<title>You searched for Downtime - Web321: Your Best WordPress Support</title>
	<link>https://web321.co/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>WordPress Broken After an Update? Here’s What Actually Happened</title>
		<link>https://web321.co/wordpress-broken-after-an-update-heres-what-actually-happened/</link>
		
		<dc:creator><![CDATA[Web 321]]></dc:creator>
		<pubDate>Wed, 28 Jan 2026 18:53:32 +0000</pubDate>
				<category><![CDATA[Business]]></category>
		<guid isPermaLink="false">https://web321.co/?p=63495</guid>

					<description><![CDATA[<p>In 2026, what's wrong with your WordPress site? Like it's a problem with an outdated PHP version. WordPress no longer supports it.</p>
<p>The post <a href="https://web321.co/wordpress-broken-after-an-update-heres-what-actually-happened/">WordPress Broken After an Update? Here’s What Actually Happened</a> appeared first on <a href="https://web321.co">Web321: Your Best WordPress Support</a>.</p>
]]></description>
										<content:encoded><![CDATA[


<p><strong>Last updated: January 2026</strong></p>
<p>You updated WordPress.<br>Your site now shows a blank page, error messages, or does not load.</p>
<p>This situation is common.<br>It affects thousands of sites every week.</p>
<p>In early 2026, one cause explains most failures.</p>
<p><strong>Short answer:</strong><br>Your server runs an outdated PHP version. WordPress no longer supports it.</p>
<p>WordPress 6.7 and later require newer PHP. Many hosts still run PHP 7.4. That version reached end of life in 2022. It no longer receives fixes or security patches. Modern WordPress code does not work reliably on it.</p>
<p>When WordPress updates and PHP stays old, the site breaks.</p>
<hr>
<h2 id="why-wordpress-fails-after-updates">Why WordPress Fails After Updates</h2>
<h3 id="1-php-version-mismatch">1. PHP Version Mismatch</h3>
<p>This is the primary cause in 2026.</p>
<p>WordPress core now assumes PHP 8.x features.<br>PHP 7.4 cannot parse that code.</p>
<p>PHP 7.4 reached end of life on November 28, 2022.<br>It receives no security updates.<br>It receives no bug fixes.</p>
<p>Many plugins and themes no longer support it.<br>WordPress itself is removing backward compatibility.</p>
<p>Hosts keep PHP 7.4 active to avoid server work.<br>They expect customers to react after failures appear.</p>
<p><strong>Common error messages include:</strong></p>
<pre><code>Fatal <span class="hljs-built_in">error</span>: Uncaught <span class="hljs-built_in">Error</span>
<span class="hljs-built_in">Parse</span> <span class="hljs-built_in">error</span>: unexpected <span class="hljs-built_in">token</span>
<span class="hljs-keyword">Call</span> to undefined function
</code></pre><p>If your server runs PHP 7.4 or lower, this explains the failure.</p>
<hr>
<h3 id="2-plugin-conflicts">2. Plugin Conflicts</h3>
<p>Plugins that connect deeply to WordPress core often fail first.</p>
<p>Security plugins intercept file loading.<br>Caching plugins override output logic.<br>Page builders rely on internal WordPress functions.</p>
<p>When WordPress updates, those internals change.</p>
<p>Older plugins call functions that no longer exist.<br>Newer plugins assume PHP 8 syntax.</p>
<p>PHP 7.4 cannot interpret that syntax.</p>
<p>This mismatch causes fatal errors before pages render.</p>
<hr>
<h3 id="3-theme-incompatibility">3. Theme Incompatibility</h3>
<p>Themes fail when developers stop maintaining them.</p>
<p>Risk increases when:</p>
<ul>
<li>The theme has not updated in over a year  </li>
<li>The developer no longer supports it  </li>
<li>The theme targets PHP 7.x only  </li>
</ul>
<p>A single unsupported function can block page output.</p>
<hr>
<h3 id="4-hosting-infrastructure-problems">4. Hosting Infrastructure Problems</h3>
<p>Many shared hosts run outdated server stacks.</p>
<p>They delay PHP upgrades.<br>They restrict memory and execution time.<br>They cache files aggressively at the server level.</p>
<p>After an update, WordPress loads new files.<br>The server still serves cached old files.<br>The system enters a mixed state.</p>
<p>This conflict breaks page output.</p>
<hr>
<h3 id="5-database-errors">5. Database Errors</h3>
<p>Database issues occur less often but cause total failure.</p>
<p>Common causes include:</p>
<ul>
<li>Interrupted updates  </li>
<li>Permission changes  </li>
<li>Table corruption  </li>
<li>Encoding conflicts  </li>
</ul>
<p>These errors stop WordPress before content loads.</p>
<hr>
<h3 id="6-file-permission-issues">6. File Permission Issues</h3>
<p>Updates can change file ownership on some servers.</p>
<p>Security plugins may lock files.<br>FTP uploads may assign incorrect permissions.</p>
<p>WordPress then fails to read or write required files.</p>
<hr>
<h2 id="why-this-started-happening-more-often">Why This Started Happening More Often</h2>
<p>PHP 7.4 support ended years ago.<br>Compatibility lasted longer than expected.</p>
<p>WordPress maintained backward support to protect users.<br>That window has closed.</p>
<p>WordPress 6.7 uses PHP 8 features by default.</p>
<p>PHP 7.4 cannot parse them.</p>
<p>This change affects every site that updates core or plugins.</p>
<hr>
<h2 id="how-to-fix-a-broken-wordpress-site">How to Fix a Broken WordPress Site</h2>
<h3 id="emergency-option-1-restore-a-backup">Emergency Option 1: Restore a Backup</h3>
<p>Restore the last working version.</p>
<p>This returns the site to a stable state.<br>It buys time to apply proper fixes.</p>
<hr>
<h3 id="emergency-option-2-disable-plugins">Emergency Option 2: Disable Plugins</h3>
<p>If admin access fails:</p>
<ol>
<li>Rename the <code>plugins</code> directory  </li>
<li>Reload the site  </li>
<li>Restore plugins one at a time  </li>
</ol>
<p>This process isolates the failure source.</p>
<hr>
<h3 id="emergency-option-3-switch-themes">Emergency Option 3: Switch Themes</h3>
<p>Rename the active theme directory.</p>
<p>WordPress loads a default theme automatically.</p>
<p>If the site loads, the theme caused the failure.</p>
<hr>
<h2 id="permanent-fix-upgrade-php">Permanent Fix: Upgrade PHP</h2>
<p>This step is required.</p>
<p>Modern WordPress needs PHP 8.1 or higher.</p>
<p>Upgrade PHP through your hosting control panel.<br>Test the site after the change.</p>
<p>If the host cannot upgrade PHP quickly, the host is the issue.</p>
<hr>
<h2 id="when-hosting-is-the-problem">When Hosting Is the Problem</h2>
<p>Warning signs include:</p>
<ul>
<li>PHP upgrades require paid plan changes  </li>
<li>Support avoids technical explanations  </li>
<li>Updates take days to approve  </li>
<li>PHP versions lag behind standards  </li>
</ul>
<p>These conditions increase failure risk.</p>
<hr>
<h2 id="how-to-prevent-future-failures">How to Prevent Future Failures</h2>
<h3 id="use-staging">Use Staging</h3>
<p>Test updates on a copy of the site first.<br>Match PHP versions between staging and live.</p>
<hr>
<h3 id="maintain-backups">Maintain Backups</h3>
<p>Use daily automated backups.<br>Store them off the server.<br>Verify restore access.</p>
<hr>
<h3 id="monitor-php-compatibility">Monitor PHP Compatibility</h3>
<p>Check plugin and theme requirements before updates.</p>
<hr>
<h3 id="maintain-the-site">Maintain the Site</h3>
<p>Routine checks prevent emergency failures.</p>
<hr>
<h2 id="when-to-get-professional-help">When to Get Professional Help</h2>
<p>Get help if:</p>
<ul>
<li>The site generates revenue  </li>
<li>Errors persist after basic fixes  </li>
<li>Database errors appear  </li>
<li>No recent backups exist  </li>
</ul>
<p>Downtime costs more than repair.</p>
<hr>
<h2 id="final-takeaway">Final Takeaway</h2>
<p>WordPress failures after updates follow a pattern.</p>
<p>Outdated PHP causes most issues.<br>Budget hosting increases risk.<br>Lack of testing triggers downtime.</p>
<p>PHP 7.4 will continue to break sites.</p>
<p>Upgrade now under control.<br>Do not wait for the next failure.</p>

<p>The post <a href="https://web321.co/wordpress-broken-after-an-update-heres-what-actually-happened/">WordPress Broken After an Update? Here’s What Actually Happened</a> appeared first on <a href="https://web321.co">Web321: Your Best WordPress Support</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The Idea Mill</title>
		<link>https://web321.co/the-idea-mill/</link>
		
		<dc:creator><![CDATA[Web 321]]></dc:creator>
		<pubDate>Sun, 07 Dec 2025 07:36:31 +0000</pubDate>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[1]]></category>
		<guid isPermaLink="false">https://web321.co/?p=62812</guid>

					<description><![CDATA[<p>We've been busy. What have we turned out recently? These are the projects that need something– some oomph– to get them into the spotlight. Something is getting in the way of them finding their way to the right audience.</p>
<p>The post <a href="https://web321.co/the-idea-mill/">The Idea Mill</a> appeared first on <a href="https://web321.co">Web321: Your Best WordPress Support</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>&nbsp;</p>



<p><img fetchpriority="high" decoding="async" class="alignright size-medium_large wp-image-62815" align="right" hspace="10" src="https://web321co.b-cdn.net/wp-content/uploads/2025/12/ideamill-768x403.jpg" alt="" width="768" height="403" srcset="https://web321co.b-cdn.net/wp-content/uploads/2025/12/ideamill-768x403.jpg 768w, https://web321co.b-cdn.net/wp-content/uploads/2025/12/ideamill-300x158.jpg 300w, https://web321co.b-cdn.net/wp-content/uploads/2025/12/ideamill-1024x538.jpg 1024w, https://web321co.b-cdn.net/wp-content/uploads/2025/12/ideamill-1080x567.jpg 1080w, https://web321co.b-cdn.net/wp-content/uploads/2025/12/ideamill-2x1.jpg 2w, https://web321co.b-cdn.net/wp-content/uploads/2025/12/ideamill.jpg 1200w" sizes="(max-width: 768px) 100vw, 768px">I know screenwriters who angst over their screenplay for years. I see productions from screenwriters who say, “we cranked out a screenplay in two weeks.” It’s not that bad work comes from a long lingering limp towards completion. And it’s certainly not that a rush job captures lightning in a bottle. The fast turn around comes from experience: the ability to get through the hard stuff fast, and know in advance where the potholes and dead ends lay. This is why a prolific scriptwriter could stack up their screenplays. It’s why a small web development team can stack up a list of products and services. Products and services that people need to hear about.</p>
<p data-wp-editing="1">In the course of my work, I have been asked to write a lot of code. I’ve gotten good at writing code fast. I can cut through the issues. The result: lots of output. I’ve worked in web design since 1996, tinkered with web design since 1994, and started coding in 1982. We spun up Web321 to scale. We wanted to take our ability to manage websites and experience with what goes wrong and why; and we wanted to scale that service to a market of thousands of businesses and organizations who need what we’re offering. We wanted to carve out a few hundred of those clients for Web321. Our numbers are climbing. Our churn is very low. We’re still well short of our goals and it all comes down to marketing and promotion. It lays bare a problem: marketing to a broad audience.</p>
<p data-wp-editing="1">Using some downtime, we have developed a number of plugins, add-ons, apps and projects. They’re falling flat. It’s embarrassing to admit that we have a marketing company and we can’t market these initiatives. It’s the dismal truth, but it’s the truth.</p>
<p>These are the projects that need something– some oomph– to get them into the spotlight. Maybe they need some more polish. Maybe they need a new application– a new way to use them.</p>
<h2><b>Web321</b></h2>
<p><a href="https://web321.co/our-services/website-maintenance/" target="_new">https://web321.co/our-services/website-maintenance/</a></p>
<p>Let’s start with the most basic one: Web321. We launched five years ago to help small businesses that need an IT person in their back pocket: people who can keep their website up to date and offer advice when things get rocky. Someone who can take that work off the plate of a business owner or their staff. We’ve had uptake on our services. We’re <a rel="tag" class="hashtag u-tag u-category" href="https://web321.co/tag/1/">#1</a> in Google on the topic of “WordPress Support in Victoria.” Still: we don’t have the volume we need to make this really work well.</p>
<p>There are other players offering WordPress help as their core business.&nbsp; With 43% of the Internet running on WordPress, and plenty of those businesses in the ideal size to use our services, there’s plenty of room in the marketplace for the existing players to all get enough of the pie. Cold calls do very poorly. Our advertising and prospecting has been a swing-and-a-miss.</p>
<h2><b>WP Descriptor</b></h2>
<p><a href="https://descriptor.web321.co/" target="_new">https://descriptor.web321.co/</a></p>
<p>Search engines love meta data: alt text, title tags, captions. WP Descriptor is a WordPress plugin. It’s installed on a WordPress website. When the media uploader is used, it adds in new functionality– it goes to an AI wrapper and generates text that is appropriate to the image in the context of the website that contains that image. For example: a comic book cover on a comic store website would have a different focus that that same cover image on a website celebrating the artist; or a website talking about the pop culture image of that cover.</p>
<h2><b>Business Card to Website</b></h2>
<p><a href="https://businesscard2website.com/" target="_new">https://businesscard2website.com/</a></p>
<p>The premise: upload a picture of your business card and the system turns it into a website. It will pull in the colour cues, the fonts and the business card details. It crafts content relevant to the business. At points, the user can edit the content, add additional images and steer the design. When it’s done, the service finds the right domain for you and registers it for you. It posts the website and its assets to website hosting. All done for you.</p>
<p>This service is aimed at people who don’t want to become a web designer and those who don’t want to work with a web designer. This is for people who need one page and no BS. We built it to pack as much SEO oomph as possible to the site the best chance at ranking for its area of interest.</p>
<h2><b>Menu to Website</b></h2>
<p><a href="https://menu2website.com/" target="_new">https://menu2website.com/</a></p>
<p>The best thing about the Internet: easy access to information, even when on the go. The worst thing about the Internet (well, okay– on the list of the worst things about the Internet) are restaurant menus. You see a nice website with lots of colourful photos of food. Intrigued, you visit the “menu” page– most of the time, it’s either a JPEG of their menu; or a PDF of their menu– it’s often not HTML. If it’s not formatted text in the website, it’s not part of the website then it gets indexed differently. While search engines can read text on image and decipher PDFs, their go-to ingestion is HTML. More than that: people hate pinching and zooming menu images on their phones. And for WCAG accessibility: images and PDFs are a dud– a dud that could be very expensive for the business owner who is out of compliance with the AADA.</p>
<p>Menu-to-website takes those images and PDFs that websites use. It uses AI to parse the menus, then it turns that content into HTML. It tries to match the PDF / image design using the same font faces, colour and layout. Our user is given options for how to practically embed the menu on their website in place of PDF or images they’re using. The menu remains in our system, allowing them to edit the menu to update prices and products.</p>
<p>This project is closing in on launch. I think it could help a lot of restaurants that need something to work in their favour. We’ve run the numbers and come up with membership tiers that are affordable.</p>
<h2><b>PropDB</b></h2>
<p><a href="https://propdb.ca/" target="_new">https://propdb.ca/</a></p>
<p>We were approached by a theatre company to redesign their website. They, like all theatrical companies, had a huge inventory. They needed a good management system to track the items with photos and attachments for each inventory item. It allows multiple users to add records to the database. It’s based on WordPress and an in-house build plugin that uses <a href="http://datatables.net">DataTables.net</a> to show all of the records and allow mass editing. It has the capacity front end display to show off what props, set pieces and costumes they have in their inventory.</p>
<p>This one is about ready to go. It’s been used in beta for two years. We need to polish up the import and migration part of the system to allow inventories to move around. It has very old competing products. It does need a renaming before it sees the light of day. <a href="mailto:shawn@web31.co">Any suggestions?</a></p>
<h2><b>Resource Finder System</b></h2>
<p><a href="https://web321.co/our-plugins/resource-finder-system/" target="_new">https://web321.co/our-plugins/resource-finder-system/</a></p>
<p>Our custom WordPress plugin, inspired by our design and functionality of the Athlete &amp; Coach Benefits system we developed for PISE/ Canadian Sports Institute. We rebuilt this new tool for WordPress (<a href="https://pacificsportcolumbiabasin.com/local-sport-organizations-finder/">see it in action</a>). It’s specifically crafted to meet the unique needs of non-profit sport organizations.</p>
<p>We have deployed this on a couple websites. We have reached out to other organizations who could use this. The problem: they’re not biting.</p>
<h2><b>Bulk Taxonomy</b></h2>
<p><a href="https://web321.co/our-plugins/bulk_taxonomy/" target="_new">https://web321.co/our-plugins/bulk_taxonomy/</a></p>
<p>Are you a website administrator juggling numerous categories, tags, or custom taxonomies on your WordPress site? Manually adding terms one by one can be a tedious and time-consuming task. Bulk Term Importer from Web321 is here to revolutionize the way you manage your site’s taxonomy, making it faster, easier, and more efficient.</p>
<p>The Bulk Term Importer from Web321 enhances your WordPress admin UI by adding a simple form to your taxonomy management pages. When I’ve demonstrated to other WordPress users, they’re in awe of how simple it is. I don’t know why other taxonomy import tools are so complicated. This one just lets the admin dump in a list of terms and the plugin adds them to the taxonomy. No fuss. No muss. This should be added to any site that needs to import a lot of taxonomy.</p>
<h2><b>No News Is Good News</b><b><br>
</b></h2>
<p><a href="https://web321.co/app/no-news-is-good-news/" target="_new">https://web321.co/app/no-news-is-good-news/</a></p>
<p>If you can’t stand some news topics, use this browser add-on to blur out the news. Use this browser extension to blur our posts that have topics you won’t want to see. Mousing over the story for three seconds will de-blur the story.</p>
<p>I needed a simple way to mute a topic: a celebrity, a politician, a social problem– just tune it out. Social media wants us to see your story to get your attention– it’s called rage baiting and it works. My premise: if no one can see a troubling post, they won’t engage with it.</p>
<p>The add-on is available for Firefox, Chrome; soon Edge and Safari.</p>
<hr>
<p>These are the products and services we have on offer. People who have tried them, like them. Our Web321 service has very low churn. Our problem: exposure and visibility. We have built up a healthy search engine position. We have plenty of backlinks. We’ve advertised. We’ve done outreach to garner attention. Clearly: there’s a problem.</p>
<p>On a Facebook group, I put a proposition forward: partner with us. Unleash your promotion skills on one or more of these offerings. In return, we’ll share the proceeds. We’ll do the customer support. We’ll keep improving the products and services. We’ll find new utility and applications.</p>
<p>Who is up for a team up? Is it you? If so,<a href="mailto:shawn@web321.co" target="_new"> let’s talk.</a></p>
<p>The post <a href="https://web321.co/the-idea-mill/">The Idea Mill</a> appeared first on <a href="https://web321.co">Web321: Your Best WordPress Support</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>When Domain Registrars Screw Up</title>
		<link>https://web321.co/when-domain-registrars-screw-up/</link>
		
		<dc:creator><![CDATA[Web 321]]></dc:creator>
		<pubDate>Tue, 02 Dec 2025 03:47:33 +0000</pubDate>
				<category><![CDATA[Business]]></category>
		<guid isPermaLink="false">https://web321.co/?p=62714</guid>

					<description><![CDATA[<p>We manage a lot of client websites and their domain names. We often have to answer the question of why is a website down? Today, it looks like someone had taken over a client&#8217;s website. We investigated and discovered that our registrar changed their nameservers to point to ParkLogic. The problem: it looks like our [&#8230;]</p>
<p>The post <a href="https://web321.co/when-domain-registrars-screw-up/">When Domain Registrars Screw Up</a> appeared first on <a href="https://web321.co">Web321: Your Best WordPress Support</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>We manage a lot of client websites and their domain names. We often have to answer the question of <a href="https://web321.co/knowledgebase/why-is-a-site-down/" target="_new">why is a website down?</a> Today, it looks like someone had taken over a client&#8217;s website. We investigated and discovered that our registrar changed their nameservers to point to ParkLogic. The problem: it looks like our client&#8217;s domain had not lapsed. We got into a two hour chat and blew through multiple people before we got to the point that we could resolve this.</p>
<p>I could name and shame the registrar, but I think all of them are capable of failing you. Here&#8217;s what happened in the chat when our client&#8217;s domain lapsed without warning:</p>
<p>Engagement NC-GON-8285 Chat Transcript &#8211; DOMAIN REGISTRAR</p>
<p><b>Web321</b> : There is a nameserver issue with Web321-Client-Domain.ca</p>
<p>[Suzy Q joined the chat]</p>
<p><b>Suzy Q</b> : Hello! Thank you for contacting our DOMAIN REGISTRAR support team. To assist you further with the nameserver issue for Web321-Client-Domain.ca, could you please clarify what specific problem you are experiencing? For example, are you trying to update the nameservers, experiencing downtime, or seeing an error message? Any additional details will help us understand your situation better.</p>
<p><b>Web321</b> : This account is [nope]</p>
<p><b>Suzy Q</b> : Thank you for providing the account information. I will transfer your details to a live CS specialist who will look into the nameserver issue for Web321-Client-Domain.ca associated with the [nope] account. Please stand by while I connect you with an appropriate person.</p>
<p>[Armaan M. joined the chat]</p>
<p>[Suzy Q left the chat]</p>
<p><b>Armaan M.</b> : Hello, I will be happy to assist you. Please allow me 5-10 minutes to check the details.</p>
<p><b>Web321</b> : I went to the domain manager. I see that ns1.nsdomaininfo_nope.net and ns2.overall.net are registered as the nameserver. I wanted to add &#8216;ns1.nsdomaininfo_also_nope.com&#8217;</p>
<p><b>Armaan M.</b> : Kindly allow me 5-10 minutes to check the details and get back to you.</p>
<p><b>Web321</b> : The error I got was: &#8220;Oops, something went wrong. Please try again.&#8221;</p>
<p><b>Web321</b> : When I looked up the domain via CIRA WHOIS, it says the nameservers are: Name servers DNS 1 hostname dns101.registrar-servers.com DNS 2 hostname dns102.registrar-servers.com</p>
<p><b>Armaan M.</b> : Thank you for letting me know,.</p>
<p><b>Web321</b> : Web321-Client-Domain.ca should resolve to [again.. .nope]. When I ping it, it resolves to 172.239.57.117</p>
<p><b>Armaan M.</b> : Checking on it.</p>
<p><b>Armaan M.</b> : If I understand correctly, you want to add the nameserver &#8216;ns1.nsdomaininfo_also_nope.com&#8217; to the domain Web321-Client-Domain.ca, right?</p>
<p><b>Web321</b> : The core problem: Web321-Client-Domain.ca is using the wrong nameservers. CIRA shows the wrong nameserver The Nameheap UI shows two correct nameservers. When I tried to add a third nameserver, the UI would not allow that.</p>
<p><b>Web321</b> : It appears that DOMAIN REGISTRAR is serving out the incorrect nameserver information.</p>
<p><b>Web321</b> : eg. https://www.nslookup.io/domains/Web321-Client-Domain.ca/dns-records/</p>
<p><b>Web321</b> : [Screenshot 2025-12-01 at 16-55-12 Domain.png]</p>
<p><b>Armaan M.</b> : Checking on it.</p>
<p><b>Armaan M.</b> : Please note that any changes in DNS take up to 30-60 minutes to propagate through the internet. You can also check this guide here: https://www.DOMAIN REGISTRAR.com/support/knowledgebase/article.aspx/9622/10/dns-propagation-explained/</p>
<p><b>Web321</b> : That is irrelevant.</p>
<p><b>Web321</b> : The domain nameservers are being redirected to parklogic without our permission or action.</p>
<p><b>Armaan M.</b> : Thank you for letting me know.</p>
<p><b>Web321</b> : The DOMAIN REGISTRAR UI for Web321-Client-Domain.ca in our account does not match what the world at large is seeing.</p>
<p><b>Armaan M.</b> : Kindly allow me 5-10 minutes to get back to you.</p>
<p><b>Web321</b> : thank you</p>
<p><b>Armaan M.</b> : You are welcome.</p>
<p><b>Web321</b> : This is a registrar-side delegation issue, not a DNS propagation delay, and that it requires a backend resolution on their side due to failed nameserver updates. 2 December, 2025Time Zone &#8211; GMT (UTC +00)</p>
<p><b>Armaan M.</b> : Thank you for specifying. Please let me transfer our chat session to the Domains department representative, who will assist you better with your particular request.</p>
<p>[Shalini P. joined the chat]</p>
<p>[Armaan M. left the chat]</p>
<p><b>Shalini P.</b> : Hello, this is Shalini here! I will assist you further. Please give me 5 -10 minutes to go through the previous conversation, review the necessary details, and look into your request.</p>
<p><b>Web321</b> : Thank you. This is a registrar-side delegation issue, not a DNS propagation delay, and that it requires a backend resolution on DOMAIN REGISTRAR&#8217;s side due to failed nameserver updates.</p>
<p><b>Shalini P.</b> : I am sorry that you have faced such inconvenience. I will try my best to sort this all out for you as soon as possible.</p>
<p><b>Web321</b> : Thank you for that. The immediate issue is to get the nameserver prorogation to match our UI and what it has been for some time. The follow-up issue is to get details on how an unauthorized party (which looks to be ParkLogic) was able to redirect our domain to their servers. And, what steps will DOMAIN REGISTRAR take to close this exploit and when those changes will the implemented.</p>
<p><b>Shalini P.</b> : May I request a quick pause of 5 to 7 minutes to thoroughly check this for you?</p>
<p><b>Web321</b> : That&#8217;s fine, thank you.</p>
<p><b>Shalini P.</b> : To make the changes, you will receive a confirmation code at your email address. Once you receive it, please provide the code so I can proceed with saving the changes.</p>
<p><b>Shalini P.</b> : Please let me transfer our chat session to the representative who will assist you better with your particular request.</p>
<p>[Kayathri M. joined the chat]</p>
<p>[Shalini P. left the chat]</p>
<p><b>Kayathri M.</b> : Hello! I&#8217;ll assist you further. Would you please allow me 5-7 minutes to look through your previous conversation?</p>
<p><b>Web321</b> : This is the confirmation code: [guess what: nope]</p>
<p><b>Kayathri M.</b> : The domain is currently pointed to ns1.nsdomaininfo_nope.net ns2.nsdomaininfo_nope.net Do you want to add the 3rd nameservers?</p>
<p><b>Web321</b> : According to third party sources (as well as ping and the loading of the website) it is not pointing: https://www.nslookup.io/domains/Web321-Client-Domain.ca/dns-records/</p>
<p><b>Web321</b> : Please look at the NS Records</p>
<p><b>Web321</b> : DOMAIN REGISTRAR appears to have either been exploited or there is a database failure and the records that are propagating are incorrect.</p>
<p><b>Kayathri M.</b> : Checking.</p>
<p><b>Kayathri M.</b> : Okay. Please give me a few minutes to check it.</p>
<p><b>Web321</b> : This is a registrar-side delegation issue, not a DNS propagation delay, and that it requires a backend resolution on the DOMAIN REGISTRAR side due to failed nameserver updates.</p>
<p><b>Web321</b> : This is the domain name recent history: [Showing only 5 of them domain history items from the domain history.]</p>
<p><b>Web321</b> : Evidence that the database has a fault: when I try to add a third nameserver record (eg. ns1.nsdomaininfo_also_nope.com) I get the error that I cannot update my nameserver records.</p>
<p><b>Kayathri M.</b> : Checking on your request.</p>
<p><b>Kayathri M.</b> : Please hold on for a few more minutes.</p>
<p><b>Kayathri M.</b> : Thank you for waiting!</p>
<p><b>Kayathri M.</b> : Per my check, the domain expired on 11/30/2025 That&#8217;s why it is pointed to parking nameservers: dns101.registrar-servers.com dns102.registrar-servers.com You should reactivate it first.</p>
<p><b>Web321</b> : Please explain to me why the &#8220;Status and Validity&#8221; reads &#8220;Nov. 4. 2022 &#8211; Feb. 15, 2026&#8221; ?</p>
<p><b>Kayathri M.</b> : Could you please share a screenshot of it?</p>
<p><img decoding="async" class="aligncenter  wp-image-62715" src="https://web321co.b-cdn.net/wp-content/uploads/2025/12/dr-status-fail.jpg" alt="" width="767" height="486" /></p>
<p><b>Kayathri M.</b> : Thank you. Checking.</p>
<p><b>Web321</b> : We are checking with the domain owner. None of the points of contact got anything like a renewal notice.</p>
<p><b>Kayathri M.</b> : Please refresh the page and check. It might be a temporary glitch.</p>
<p><b>Web321</b> : I have refreshed page after saving what the previous date said.</p>
<p><b>Web321</b> : It now says it lapsed yesterday and its in a Grace period.</p>
<p><b>Web321</b> : Can we now renew this?</p>
<p><b>Kayathri M.</b> : Yes. You can reactivate the domain on your end.</p>
<p><b>Kayathri M.</b> : You can use this direct link as well: https://www.DOMAIN REGISTRAR.com/cart/addtocart.aspx?producttype&amp;#x3D ;domains&amp;action=reactivate&amp;domainlist=Web321-Client-Domain.ca</p>
<p><b>Web321</b> : Is there a way to get a notification when the domain is up for renewal? Neither email point of contact got a renewal notice. Our Domain List dashboard on DOMAIN REGISTRAR didn&#8217;t show that this was going to expire; and the Status &amp; Validity didn&#8217;t show this was going to lapse until Feb. 15, 2026.</p>
<p><b>Kayathri M.</b> : Let me check.</p>
<p><b>Kayathri M.</b> : We are also sending out notices about an upcoming auto-renewal to the account email address (the emails are sent 35-65 days before the domain expiration date containing information about the products that are due for renewal) to make sure that no domain names are auto-renewed without customer&#8217;s authorization. These notices can be found in the account at https://ap.www.DOMAIN REGISTRAR.com/dashboard/messages/inbox</p>
<p><b>Web321</b> : Thank you for pointing that out. When I search the inbox for &#8220;[CLIENT]&#8221; there are no messages. I tried searching for &#8220;canada&#8221; as one domain is up for renewal.</p>
<p><img decoding="async" class="aligncenter size-full wp-image-62717" src="https://web321co.b-cdn.net/wp-content/uploads/2025/12/drf-notifications0.jpg" alt="" width="1180" height="578" srcset="https://web321co.b-cdn.net/wp-content/uploads/2025/12/drf-notifications0.jpg 1180w, https://web321co.b-cdn.net/wp-content/uploads/2025/12/drf-notifications0-300x147.jpg 300w, https://web321co.b-cdn.net/wp-content/uploads/2025/12/drf-notifications0-1024x502.jpg 1024w, https://web321co.b-cdn.net/wp-content/uploads/2025/12/drf-notifications0-768x376.jpg 768w, https://web321co.b-cdn.net/wp-content/uploads/2025/12/drf-notifications0-1080x529.jpg 1080w, https://web321co.b-cdn.net/wp-content/uploads/2025/12/drf-notifications0-2x1.jpg 2w" sizes="(max-width: 1180px) 100vw, 1180px" /></p>
<p><b>Web321</b> : Can you explain why the inbox has no messages related to the renewal? And, when can an issue like this be resolved so that it doesn&#8217;t happen again?</p>
<p><b>Kayathri M.</b> : A few minutes, please.</p>
<p><b>Kayathri M.</b> : Since it has a different renewal date due to a bug, the renewal notices were not sent</p>
<p><b>Web321</b> : Where was the origin of the bug? It appears that this was an issue with DOMAIN REGISTRAR&#8217;s ability to track the dates, giving us incorrect Status &amp; Validity data; and giving us no renewal notice.</p>
<p><b>Kayathri M.</b> : We apologize for this inconvenience. You encountered this error due to a bug in our system. Rest assured, we have forwarded details of the issue to the corresponding team for further investigation. Please accept our sincere apologies for the confusion that occurred, and if this situation might have caused you any inconvenience.</p>
<p><b>Web321</b> : Thank you for all of that. Web321-Client-Domain.ca is a charity. With their domain DNS being disrupted on the day before Giving Tuesday is impactful to them. It would go a long way to put this behind us if DOMAIN REGISTRAR credited the domain a year of registration.</p>
<p><b>Kayathri M.</b> : We apologize for any inconvenience this might cause and highly appreciate your patience.</p>
<p><b>Kayathri M.</b> : Apparently, our chat session has expired. Feel free to get back to us at any moment. Thank you for contacting DOMAIN REGISTRAR Live Support!</p>
<p>[Kayathri M. left the chat]</p>
<p><i><strong>My review and feedback</strong>: DOMAIN REGISTAR&#8217;s system had bugs, so we didn&#8217;t get renewal notifications. When we discovered the domain had got to a third party, we relied on the Status &amp; Validity date, but it was incorrect and we were prompted to reload to see the changed information. When I cited NSLookup and other websites, the support people either didn&#8217;t check the link or didn&#8217;t know what it meant. It took two hours to get to the point where they told use the domain had lapsed. CLIENT is a charity that relies on donations. This happened the day before Giving Tuesday. At this point, we don&#8217;t know what the financial impacts are. When I asked if CLIENT could be compensated by giving us a one year extension, I got a non-answer, leaving the topic of impact and compensation open.</i></p>
<p><i>The staff should be trained to review the previous message on a chat when they join a chat.</i></p>
<p>The post <a href="https://web321.co/when-domain-registrars-screw-up/">When Domain Registrars Screw Up</a> appeared first on <a href="https://web321.co">Web321: Your Best WordPress Support</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Website Migration</title>
		<link>https://web321.co/knowledgebase/website-migration/</link>
					<comments>https://web321.co/knowledgebase/website-migration/#respond</comments>
		
		<dc:creator><![CDATA[Shawn DeWolfe]]></dc:creator>
		<pubDate>Wed, 23 Jul 2025 06:33:18 +0000</pubDate>
				<guid isPermaLink="false">https://web321.co/knowledgebase/website-migration/</guid>

					<description><![CDATA[<p>The process of moving a website from one host, domain, or platform to another. Requires careful planning to avoid downtime and SEO loss. The main benefits are improved performance or features. Consider backing up your site, using 301 redirects, and testing thoroughly after migration. Search for Website Migration</p>
<p>The post <a href="https://web321.co/knowledgebase/website-migration/">Website Migration</a> appeared first on <a href="https://web321.co">Web321: Your Best WordPress Support</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>The process of moving a website from one host, domain, or platform to another. Requires careful planning to avoid downtime and SEO loss. The main benefits are improved performance or features. Consider backing up your site, using 301 redirects, and testing thoroughly after migration.<br />
<br /><a href="https://web321.co/?s=Website+Migration">Search for Website Migration</a></p>
<p>The post <a href="https://web321.co/knowledgebase/website-migration/">Website Migration</a> appeared first on <a href="https://web321.co">Web321: Your Best WordPress Support</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://web321.co/knowledgebase/website-migration/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Staging Site</title>
		<link>https://web321.co/knowledgebase/staging-site/</link>
					<comments>https://web321.co/knowledgebase/staging-site/#respond</comments>
		
		<dc:creator><![CDATA[Shawn DeWolfe]]></dc:creator>
		<pubDate>Wed, 23 Jul 2025 06:33:07 +0000</pubDate>
				<guid isPermaLink="false">https://web321.co/knowledgebase/staging-site/</guid>

					<description><![CDATA[<p>A staging site is a clone of your live website that is used for testing and development purposes. It&#8217;s a private, non-public environment where you can safely make changes to your site without affecting your live visitors. For a small business, a staging site is an invaluable tool for testing new plugins, themes, and custom [&#8230;]</p>
<p>The post <a href="https://web321.co/knowledgebase/staging-site/">Staging Site</a> appeared first on <a href="https://web321.co">Web321: Your Best WordPress Support</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>A staging site is a clone of your live website that is used for testing and development purposes. It&#8217;s a private, non-public environment where you can safely make changes to your site without affecting your live visitors. For a small business, a staging site is an invaluable tool for testing new plugins, themes, and custom code before deploying them to your live site. Small business owners should use a staging site to avoid breaking their live site when making changes. The main benefits are the ability to test changes in a safe environment, the prevention of downtime, and a more professional development workflow. Consider using a staging site for all of your website development and testing.<br />
<br /><a href="https://web321.co/?s=Staging+Site">Search for Staging Site</a></p>
<p>The post <a href="https://web321.co/knowledgebase/staging-site/">Staging Site</a> appeared first on <a href="https://web321.co">Web321: Your Best WordPress Support</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://web321.co/knowledgebase/staging-site/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Disaster Recovery</title>
		<link>https://web321.co/knowledgebase/disaster-recovery/</link>
					<comments>https://web321.co/knowledgebase/disaster-recovery/#respond</comments>
		
		<dc:creator><![CDATA[Shawn DeWolfe]]></dc:creator>
		<pubDate>Wed, 23 Jul 2025 06:32:58 +0000</pubDate>
				<guid isPermaLink="false">https://web321.co/knowledgebase/disaster-recovery/</guid>

					<description><![CDATA[<p>A strategy that includes regular backups and a clear plan for restoring a website after a major incident (e.g., hack, server failure). Ensures data protection, minimizes downtime, and allows a business to recover quickly from disasters. Search for Disaster Recovery</p>
<p>The post <a href="https://web321.co/knowledgebase/disaster-recovery/">Disaster Recovery</a> appeared first on <a href="https://web321.co">Web321: Your Best WordPress Support</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>A strategy that includes regular backups and a clear plan for restoring a website after a major incident (e.g., hack, server failure). Ensures data protection, minimizes downtime, and allows a business to recover quickly from disasters.<br />
<br /><a href="https://web321.co/?s=Disaster+Recovery">Search for Disaster Recovery</a></p>
<p>The post <a href="https://web321.co/knowledgebase/disaster-recovery/">Disaster Recovery</a> appeared first on <a href="https://web321.co">Web321: Your Best WordPress Support</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://web321.co/knowledgebase/disaster-recovery/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Downtime</title>
		<link>https://web321.co/knowledgebase/downtime/</link>
					<comments>https://web321.co/knowledgebase/downtime/#respond</comments>
		
		<dc:creator><![CDATA[Shawn DeWolfe]]></dc:creator>
		<pubDate>Wed, 23 Jul 2025 06:32:58 +0000</pubDate>
				<guid isPermaLink="false">https://web321.co/knowledgebase/downtime/</guid>

					<description><![CDATA[<p>Periods when a website is inaccessible due to server issues, maintenance, or attacks. Downtime leads to lost sales and damaged reputation. The main benefits of minimizing downtime are a better user experience, a more professional appearance, and a lower risk of losing customers. Consider using a reliable hosting provider and an uptime monitoring service to [&#8230;]</p>
<p>The post <a href="https://web321.co/knowledgebase/downtime/">Downtime</a> appeared first on <a href="https://web321.co">Web321: Your Best WordPress Support</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Periods when a website is inaccessible due to server issues, maintenance, or attacks. Downtime leads to lost sales and damaged reputation. The main benefits of minimizing downtime are a better user experience, a more professional appearance, and a lower risk of losing customers. Consider using a reliable hosting provider and an uptime monitoring service to keep your website online and available.<br />
<br /><a href="https://web321.co/?s=Downtime">Search for Downtime</a></p>
<p>The post <a href="https://web321.co/knowledgebase/downtime/">Downtime</a> appeared first on <a href="https://web321.co">Web321: Your Best WordPress Support</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://web321.co/knowledgebase/downtime/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Why Is A Site Down?</title>
		<link>https://web321.co/knowledgebase/why-is-a-site-down/</link>
		
		<dc:creator><![CDATA[Web 321]]></dc:creator>
		<pubDate>Thu, 14 Nov 2024 19:39:53 +0000</pubDate>
				<guid isPermaLink="false">https://web321.co/?post_type=kbe_knowledgebase&#038;p=58917</guid>

					<description><![CDATA[<p>Website downtime can significantly impact your online presence, but most issues can be resolved with systematic troubleshooting. By methodically checking each potential problem area, you can often identify and fix the issue quickly.</p>
<p>The post <a href="https://web321.co/knowledgebase/why-is-a-site-down/">Why Is A Site Down?</a> appeared first on <a href="https://web321.co">Web321: Your Best WordPress Support</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Why Is My Website Down? A Step-by-Step Troubleshooting Guide</h2>
<p>Discovering that your website is down can be both alarming and frustrating. Whether it&#8217;s affecting your business operations, personal blog, or online portfolio, getting your site back up is crucial. This comprehensive guide will help you identify common reasons why your website might be offline and provide actionable steps to resolve the issues.</p>
<hr />
<h2>0. <strong>Get A Fast Answer</strong></h2>
<p>We have a tool, <a href="https://whatiswrongwithmy.website/" target="_new">https://whatiswrongwithmy.website/</a>. Try it out and see if it provides any answers to what&#8217;s wrong with your website.</p>
<h2>1. <strong>Check Your Domain Name</strong></h2>
<p>Your domain name is the gateway to your website. Issues with your domain can lead to your site appearing offline, displaying errors, or even showing an entirely different website.</p>
<h3><strong>Action Steps:</strong></h3>
<ul>
<li><strong>Verify Domain Registration:</strong> Ensure that your domain registration is current and hasn&#8217;t expired.</li>
<li><strong>Review DNS Settings:</strong> Check your Domain Name System (DNS) records to confirm they are correctly pointing to your hosting server.</li>
<li><strong>Consider DNS Propagation:</strong> If you&#8217;ve recently made changes to your DNS settings, remember that it can take up to 48 hours for changes to propagate globally.</li>
<li></li>
</ul>
<hr />
<h2>2. <strong>Confirm Your Hosting Plan Is Active</strong></h2>
<p>An expired or suspended hosting plan can cause your website to go offline or display incorrectly.</p>
<h3><strong>Signs of Hosting Issues:</strong></h3>
<ul>
<li>Missing plugins or themes.</li>
<li>Inability to upload new content or media.</li>
<li>Error messages when attempting to access your site.</li>
</ul>
<h3><strong>Action Steps:</strong></h3>
<ul>
<li><strong>Check Hosting Account Status:</strong> Log in to your hosting provider&#8217;s dashboard to verify your account is active and in good standing.</li>
<li><strong>Renew or Upgrade Plan:</strong> If necessary, renew your hosting plan or consider upgrading to a plan that suits your current needs.</li>
<li><strong>Contact Support:</strong> Reach out to your hosting provider&#8217;s customer service for assistance if you&#8217;re unsure about your account status.</li>
</ul>
<hr />
<h2>3. <strong>Test Your Internet Connection</strong></h2>
<p>Sometimes, the problem isn&#8217;t with your website but with your local internet connection.</p>
<h3><strong>Action Steps:</strong></h3>
<ul>
<li><strong>Website Availability Check:</strong> Use online tools like &#8220;Down for Everyone or Just Me&#8221; to determine if others can access your site.</li>
<li><strong>Restart Networking Equipment:</strong> Turn off your modem and router for about 10 seconds, then power them back on to reset your connection.</li>
<li><strong>Try a Different Network:</strong> Attempt to access your website using a different internet connection or mobile data.</li>
<li><strong>Check for Network Restrictions:</strong> If you&#8217;re on a corporate or educational network, certain websites might be blocked. Consider using a VPN to bypass these restrictions.</li>
</ul>
<hr />
<h2>4. <strong>Identify and Resolve Critical Errors</strong></h2>
<p>Installing or updating plugins and themes can sometimes introduce conflicts or errors that take your site down.</p>
<h3><strong>Common Error Message:</strong></h3>
<blockquote><p><strong>&#8220;There has been a critical error on your website. Please check your site admin email inbox for instructions.&#8221;</strong></p></blockquote>
<h3><strong>Action Steps:</strong></h3>
<ul>
<li><strong>Check Administrative Emails:</strong> Look for any messages from your website system detailing the error and possible solutions.</li>
<li><strong>Enable Debug Mode:</strong> If you&#8217;re using a content management system (CMS) like WordPress, enable debug mode to identify the source of the error.</li>
<li><strong>Disable Recent Additions:</strong> Access your site&#8217;s files via FTP or your hosting control panel to deactivate recently added plugins or themes that may be causing the issue.</li>
<li><strong>Restore from Backup:</strong> If available, restore your website to a previous state before the error occurred.</li>
</ul>
<hr />
<h2>5. <strong>Review Essential Plugins and Extensions</strong></h2>
<p>Certain plugins or extensions are critical for your website&#8217;s functionality. Issues with these can lead to downtime.</p>
<h3><strong>Action Steps:</strong></h3>
<ul>
<li><strong>Ensure Key Plugins are Active:</strong> Verify that essential plugins or extensions are installed and active.</li>
<li><strong>Update Plugins and Extensions:</strong> Outdated software can cause compatibility issues. Make sure all components are up to date.</li>
<li><strong>Check for Conflicts:</strong> Sometimes, plugins can conflict with each other. Try deactivating all plugins and reactivate them one by one to identify any problematic ones.</li>
</ul>
<hr />
<h2>6. <strong>Restore a Backup</strong></h2>
<p>If you&#8217;ve recently made changes that caused your site to go down, restoring a backup can be a quick fix.</p>
<h3><strong>Action Steps:</strong></h3>
<ul>
<li><strong>Access Backup Tools:</strong> Use your hosting provider&#8217;s backup and restore features or a backup plugin you&#8217;ve installed.</li>
<li><strong>Select a Restore Point:</strong> Choose a backup from a date when your website was functioning correctly.</li>
<li><strong>Perform the Restore:</strong> Follow the instructions provided by your backup tool to restore your website.</li>
<li><strong>Verify Functionality:</strong> After restoration, check your website thoroughly to ensure everything is working as expected.</li>
</ul>
<hr />
<h2>7. <strong>Check for Server-Side Issues</strong></h2>
<p>Sometimes, the problem lies on the server side due to maintenance, crashes, or other technical difficulties.</p>
<h3><strong>Action Steps:</strong></h3>
<ul>
<li><strong>Review Server Status:</strong> Check if your hosting provider is experiencing any outages or maintenance periods.</li>
<li><strong>Error Logs:</strong> Access server error logs through your hosting control panel to identify any server-related issues.</li>
<li><strong>Resource Limits:</strong> Ensure your website hasn&#8217;t exceeded server resource limits like CPU usage, memory, or bandwidth.</li>
</ul>
<hr />
<h2>8. <strong>Contact Your Hosting Provider</strong></h2>
<p>If you&#8217;ve exhausted all other options and your site is still down, it&#8217;s time to seek professional help.</p>
<h3><strong>Action Steps:</strong></h3>
<ul>
<li><strong>Gather Information:</strong> Document any error messages and steps you&#8217;ve already taken to resolve the issue.</li>
<li><strong>Submit a Support Ticket:</strong> Contact your hosting provider&#8217;s technical support with detailed information.</li>
<li><strong>Follow Up:</strong> Keep in communication with support staff and provide any additional information they might need.</li>
</ul>
<hr />
<p>Website downtime can significantly impact your online presence, but most issues can be resolved with systematic troubleshooting. By methodically checking each potential problem area, you can often identify and fix the issue quickly.</p>
<p><strong>Remember:</strong> Regular website maintenance, including updates and backups, can prevent many common issues that lead to downtime.</p>
<p>The post <a href="https://web321.co/knowledgebase/why-is-a-site-down/">Why Is A Site Down?</a> appeared first on <a href="https://web321.co">Web321: Your Best WordPress Support</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Upgrading to PHP8: Why You Should Upgrade Your WordPress Server</title>
		<link>https://web321.co/upgrading-to-php8-why-you-should-upgrade-your-wordpress-server/</link>
		
		<dc:creator><![CDATA[Shawn DeWolfe]]></dc:creator>
		<pubDate>Wed, 06 Sep 2023 18:08:04 +0000</pubDate>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[PHP8]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://web321.co/?p=57015</guid>

					<description><![CDATA[<p>In a world where tech never stops evolving, staying current is crucial for both optimal user experience and robust security. PHP, the engine behind WordPress, has transitioned through versions 5.x, 6.x, and 7.x, and now stands at version 8.</p>
<p>The post <a href="https://web321.co/upgrading-to-php8-why-you-should-upgrade-your-wordpress-server/">Upgrading to PHP8: Why You Should Upgrade Your WordPress Server</a> appeared first on <a href="https://web321.co">Web321: Your Best WordPress Support</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>In a world where tech never stops evolving, staying current is crucial for both optimal user experience and robust security. PHP, the engine behind WordPress, has transitioned through versions 5.x, 6.x, and 7.x, and now stands at version 8. Many are using the sub-version, 8.2. PHP8 brings a host of improvements and compelling features that we&#8217;ll delve into. Importantly, support for older PHP versions will cease on November 28, 2022.</p>
<h2>Why It’s Time to Move On</h2>
<h3>Elevating Security Measures</h3>
<p>The foremost incentive for migrating to PHP 8 is to guarantee that your WordPress platform runs on a version that regularly receives updates and security patches. Unsupported versions of PHP lack these critical updates, leaving your web applications vulnerable to security risks. Thus, it&#8217;s wise to confirm whether your hosting provider offers the most recent PHP versions before deploying a web application.</p>
<h3>Ensuring Compatibility</h3>
<p>Another compelling reason to embrace the latest PHP version is to avoid the pitfalls of incompatibility. Operating on outdated versions could jeopardize the functionality of your website—a major concern for any web developer. Supported versions of PHP are continually refined and monitored to fix any issues or vulnerabilities, making it imperative to stay abreast of the latest updates.</p>
<h3>Boosting Performance Metrics</h3>
<p>PHP 8 brings a notable increase in performance. For instance, PHP 7.4 enabled systems to execute thrice as many REST API requests per second compared to PHP 5.6. PHP 8 takes this a step further, offering performance that is almost four times better. Refer to the table below for detailed speed scores and REST API performance metrics.</p>
<h2>How To Do The Update To PHP8</h2>
<h3><b>Upgrading PHP: A How-to Guide</b></h3>
<p>Upgrading to a newer PHP version can be a smooth process if you&#8217;re prepared. However, potential challenges such as bugs or failed upgrades can occur.</p>
<h4><b>Pre-Upgrade Checks</b></h4>
<p>First, make sure that your website is compatible with the latest PHP version. You can check this information through your web hosting control panel. If an upgrade is available, you can usually complete it in a few simple steps. Switching to a supported PHP version through the control panel is generally straightforward.</p>
<h4><b>PHP Version Lifespan</b></h4>
<p>Note that a PHP version typically has a lifespan of three years, after which it&#8217;s advisable to move on to a newer version.</p>
<h4>Step 1: Make a backup. Backup your entire site and keep that copy safe.</h4>
<p><b>Use a Backup Plugin</b></p>
<ol>
<li aria-level="1">Backup your WordPress site using a plugin like &#8220;Duplicator&#8221;.</li>
<li aria-level="1">Navigate to your WordPress dashboard, then go to wp-admin &gt; plugins &gt; add new.</li>
<li aria-level="1">Search for “Duplicator.” <i>Side note: Our clients get the use of the Duplicator Pro license. Also, we would do this for our clients.</i></li>
<li aria-level="1">After activation, follow the on-screen instructions to back up your site.</li>
</ol>
<p>With a backup in hand, you can confidently upgrade your PHP version.</p>
<p>Alternatively, some service providers allow the backup and generation of a staging site. If that’s available, try it out.</p>
<h4>Step 2: Make a staging site. Use the backup to make a staging copy of the website.</h4>
<p>Create an identical copy of your website in a staging environment to test the PHP upgrade. Benefits of using a staging site include:</p>
<ul>
<li aria-level="1"><b>Risk Mitigation</b>: Testing on a staging site helps prevent revenue loss or user decline if something goes wrong. It’s also security through obscurity: if a staging site is hard to find, it’s hard to hack.</li>
<li aria-level="1"><b>Thorough Testing</b>: Staging allows for extended testing, reducing the likelihood of overlooking bugs or bugs that only come up from outlier situations.</li>
<li aria-level="1"><b>No Downtime or Glitches</b>: Any issues can be fixed on the staging site first, ensuring your reputation remains intact.</li>
</ul>
<h4>Step 3: Let ‘er rip.</h4>
<p>Update the staging site to PHP 8.1 or 8.2 and then see what breaks. Current code will be ready for PHP8 in most cases. You may see very few issues. If the result is a disaster, make note of all of the errors that came up, then downgrade back to your previous PHP version and proceed cautiously.</p>
<h4>Step 4: Meticulous re-coding.</h4>
<p>If things go wrong with the “Let ‘er rip” approach, you need to do some detective work.</p>
<ul>
<li aria-level="1">Make sure your PHP8 has all of the correct extensions active. Some service providers offer PHP8 but leave many of the extensions inactive.</li>
<li aria-level="1">Make sure WordPress code is current. It will be PHP8 compatible.</li>
<li aria-level="1">Make sure your theme is current. If it isn&#8217;t, contact the developer who made the theme and ask them for a PHP8 compatible version.</li>
<li aria-level="1">Make sure the plugins are current. Again: if they cause issues, take those issues to the respective plugin developers.</li>
<li aria-level="1">Make sure your custom code works. If it doesn’t bring in a developer. (<a href="https://web321.co/contact-us/"><i>we’re developers, FYI</i></a>).</li>
</ul>
<h2>PHP.net list of Changes</h2>
<p>This list of changes and issues comes from <a href="https://www.php.net/manual/en/migration80.incompatible.php">PHP.net</a>:</p>
<div id="migration80.incompatible.core" class="sect2">
<div id="migration80.incompatible.core.other" class="sect3">
<h4 class="title">Other incompatible Changes</h4>
<ul class="itemizedlist">
<li class="listitem">
<p class="para"><code class="literal">match</code> is now a reserved keyword.</p>
</li>
<li class="listitem">
<p class="para"><code class="literal">mixed</code> is now a reserved word, so it cannot be used to name a class, interface or trait, and is also prohibited from being used in namespaces.</p>
</li>
<li class="listitem">
<p class="para">Assertion failures now throw by default. If the old behavior is desired, <code class="code">assert.exception=0</code> can be set in the INI settings.</p>
</li>
<li class="listitem">
<p class="para">Methods with the same name as the class are no longer interpreted as constructors. The <a class="link" href="https://www.php.net/manual/en/language.oop5.decon.php#object.construct">__construct()</a> method should be used instead.</p>
</li>
<li class="listitem">
<p class="para">The ability to call non-static methods statically has been removed. Thus <span class="function"><a class="function" href="https://www.php.net/manual/en/function.is-callable.php">is_callable()</a></span> will fail when checking for a non-static method with a classname (must check with an object instance).</p>
</li>
<li class="listitem">
<p class="para">The <code class="code">(real)</code> and <code class="code">(unset)</code> casts have been removed.</p>
</li>
<li class="listitem">
<p class="para">The <a class="link" href="https://www.php.net/manual/en/errorfunc.configuration.php#ini.track-errors">track_errors</a> ini directive has been removed. This means that <var class="varname">php_errormsg</var> is no longer available. The <span class="function"><a class="function" href="https://www.php.net/manual/en/function.error-get-last.php">error_get_last()</a></span> function may be used instead.</p>
</li>
<li class="listitem">
<p class="para">The ability to define case-insensitive constants has been removed. The third argument to <span class="function"><a class="function" href="https://www.php.net/manual/en/function.define.php">define()</a></span> may no longer be <strong><code>true</code></strong>.</p>
</li>
<li class="listitem">
<p class="para">The ability to specify an autoloader using an <span class="function"><a class="function" href="https://www.php.net/manual/en/function.autoload.php">__autoload()</a></span> function has been removed. <span class="function"><a class="function" href="https://www.php.net/manual/en/function.spl-autoload-register.php">spl_autoload_register()</a></span> should be used instead.</p>
</li>
<li class="listitem">
<p class="para">The <code class="parameter">errcontext</code> argument will no longer be passed to custom error handlers set with <span class="function"><a class="function" href="https://www.php.net/manual/en/function.set-error-handler.php">set_error_handler()</a></span>.</p>
</li>
<li class="listitem">
<p class="para"><span class="function"><a class="function" href="https://www.php.net/manual/en/function.create-function.php">create_function()</a></span> has been removed. Anonymous functions may be used instead.</p>
</li>
<li class="listitem">
<p class="para"><span class="function"><a class="function" href="https://www.php.net/manual/en/function.each.php">each()</a></span> has been removed. <a class="link" href="https://www.php.net/manual/en/control-structures.foreach.php">foreach</a> or <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.arrayiterator.php">ArrayIterator</a></span> should be used instead.</p>
</li>
<li class="listitem">
<p class="para">The ability to unbind <var class="varname">this</var> from closures that were created from a method, using <span class="methodname"><a class="methodname" href="https://www.php.net/manual/en/closure.fromcallable.php">Closure::fromCallable()</a></span> or <span class="methodname"><a class="methodname" href="https://www.php.net/manual/en/reflectionmethod.getclosure.php">ReflectionMethod::getClosure()</a></span>, has been removed.</p>
</li>
<li class="listitem">
<p class="para">The ability to unbind <var class="varname">this</var> from proper closures that contain uses of <var class="varname">this</var> has also been removed.</p>
</li>
<li class="listitem">
<p class="para">The ability to use <span class="function"><a class="function" href="https://www.php.net/manual/en/function.array-key-exists.php">array_key_exists()</a></span> with objects has been removed. <span class="function"><a class="function" href="https://www.php.net/manual/en/function.isset.php">isset()</a></span> or <span class="function"><a class="function" href="https://www.php.net/manual/en/function.property-exists.php">property_exists()</a></span> may be used instead.</p>
</li>
<li class="listitem">
<p class="para">The behavior of <span class="function"><a class="function" href="https://www.php.net/manual/en/function.array-key-exists.php">array_key_exists()</a></span> regarding the type of the <code class="parameter">key</code> parameter has been made consistent with <span class="function"><a class="function" href="https://www.php.net/manual/en/function.isset.php">isset()</a></span> and normal array access. All key types now use the usual coercions and array/object keys throw a <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.typeerror.php">TypeError</a></span>.</p>
</li>
<li class="listitem">
<p class="para">Any array that has a number <span class="replaceable">n</span> as its first numeric key will use <span class="replaceable">n+1</span> for its next implicit key, even if <span class="replaceable">n</span> is negative.</p>
</li>
<li class="listitem">
<p class="para">The default error_reporting level is now <strong><code>E_ALL</code></strong>. Previously it excluded <strong><code>E_NOTICE</code></strong> and <strong><code>E_DEPRECATED</code></strong>.</p>
</li>
<li class="listitem">
<p class="para"><a class="link" href="https://www.php.net/manual/en/errorfunc.configuration.php#ini.display-startup-errors">display_startup_errors</a> is now enabled by default.</p>
</li>
<li class="listitem">
<p class="para">Using <span class="type"><span class="type parent">parent</span></span> inside a class that has no parent will now result in a fatal compile-time error.</p>
</li>
<li class="listitem">
<p class="para">The <code class="literal">@</code> operator will no longer silence fatal errors (<strong><code>E_ERROR</code></strong>, <strong><code>E_CORE_ERROR</code></strong>, <strong><code>E_COMPILE_ERROR</code></strong>, <strong><code>E_USER_ERROR</code></strong>, <strong><code>E_RECOVERABLE_ERROR</code></strong>, <strong><code>E_PARSE</code></strong>). Error handlers that expect error_reporting to be <code class="literal">0</code> when <code class="literal">@</code> is used, should be adjusted to use a mask check instead:</p>
<div class="example-contents">
<div class="phpcode"><code>&lt;?php<br />
// Replace<br />
function my_error_handler($err_no, $err_msg, $filename, $linenum) {<br />
if (error_reporting() == 0) {<br />
return false;<br />
}<br />
// ...<br />
}</code></div>
</div>
<p>// With<br />
function my_error_handler($err_no, $err_msg, $filename, $linenum) {<br />
if (!(error_reporting() &amp; $err_no)) {<br />
return false;<br />
}<br />
// &#8230;<br />
}<br />
?&gt;</li>
</ul>
</div>
</div>
<p class="para">Additionally, care should be taken that error messages are not displayed in production environments, which can result in information leaks. Please ensure that <code class="code">display_errors=Off</code> is used in conjunction with error logging.</p>
<ul>
<li class="listitem">
<p class="para"><code class="literal">#[</code> is no longer interpreted as the start of a comment, as this syntax is now used for attributes.</p>
</li>
<li class="listitem">
<p class="para">Inheritance errors due to incompatible method signatures (LSP violations) will now always generate a fatal error. Previously a warning was generated in some cases.</p>
</li>
<li class="listitem">
<p class="para">The precedence of the concatenation operator has changed relative to bitshifts and addition as well as subtraction.</p>
<div class="example-contents">
<div class="phpcode"><code>&lt;?php<br />
echo "Sum: " . $a + $b;<br />
// was previously interpreted as:<br />
echo ("Sum: " . $a) + $b;<br />
// is now interpreted as:<br />
echo "Sum:" . ($a + $b);<br />
?&gt;</code></div>
</div>
</li>
<li class="listitem">
<p class="para">Arguments with a default value that resolves to <strong><code>null</code></strong> at runtime will no longer implicitly mark the argument type as nullable. Either an explicit nullable type, or an explicit <strong><code>null</code></strong> default value has to be used instead.</p>
<div class="example-contents">
<div class="phpcode"><code>&lt;?php<br />
// Replace<br />
function test(int $arg = CONST_RESOLVING_TO_NULL) {}<br />
// With<br />
function test(?int $arg = CONST_RESOLVING_TO_NULL) {}<br />
// Or<br />
function test(int $arg = null) {}<br />
?&gt;</code></div>
</div>
</li>
<li class="listitem">
<p class="para">A number of warnings have been converted into <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.error.php">Error</a></span> exceptions:</p>
<ul class="simplelist">
<li class="member">Attempting to write to a property of a non-object. Previously this implicitly created an stdClass object for null, false and empty strings.</li>
<li class="member">Attempting to append an element to an array for which the PHP_INT_MAX key is already used.</li>
<li class="member">Attempting to use an invalid type (array or object) as an array key or string offset.</li>
<li class="member">Attempting to write to an array index of a scalar value.</li>
<li class="member">Attempting to unpack a non-array/Traversable.</li>
<li class="member">Attempting to access unqualified constants which are undefined. Previously, unqualified constant accesses resulted in a warning and were interpreted as strings.</li>
<li class="member">Passing the wrong number of arguments to a non-variadic built-in function will throw an <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.argumentcounterror.php">ArgumentCountError</a></span>.</li>
</ul>
<p class="para">A number of notices have been converted into warnings:</p>
<ul class="simplelist">
<li class="member">Attempting to read an undefined variable.</li>
<li class="member">Attempting to read an undefined property.</li>
<li class="member">Attempting to read an undefined array key.</li>
<li class="member">Attempting to read a property of a non-object.</li>
<li class="member">Attempting to access an array index of a non-array.</li>
<li class="member">Attempting to convert an array to string.</li>
<li class="member">Attempting to use a resource as an array key.</li>
<li class="member">Attempting to use null, a boolean, or a float as a string offset.</li>
<li class="member">Attempting to read an out-of-bounds string offset.</li>
<li class="member">Attempting to assign an empty string to a string offset.</li>
</ul>
</li>
<li class="listitem">
<p class="para">Attempting to assign multiple bytes to a string offset will now emit a warning.</p>
</li>
<li class="listitem">
<p class="para">Unexpected characters in source files (such as NUL bytes outside of strings) will now result in a <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.parseerror.php">ParseError</a></span> exception instead of a compile warning.</p>
</li>
<li class="listitem">
<p class="para">Uncaught exceptions now go through &#8220;clean shutdown&#8221;, which means that destructors will be called after an uncaught exception.</p>
</li>
<li class="listitem">
<p class="para">The compile time fatal error &#8220;Only variables can be passed by reference&#8221; has been delayed until runtime, and converted into an &#8220;Argument cannot be passed by reference&#8221; <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.error.php">Error</a></span> exception.</p>
</li>
<li class="listitem">
<p class="para">Some &#8220;Only variables should be passed by reference&#8221; notices have been converted to &#8220;Argument cannot be passed by reference&#8221; exception.</p>
</li>
<li class="listitem">
<p class="para">The generated name for anonymous classes has changed. It will now include the name of the first parent or interface:</p>
<div class="example-contents">
<div class="phpcode"><code>&lt;?php<br />
new class extends ParentClass {};<br />
// -&gt; ParentClass@anonymous<br />
new class implements FirstInterface, SecondInterface {};<br />
// -&gt; FirstInterface@anonymous<br />
new class {};<br />
// -&gt; class@anonymous<br />
?&gt;</code></div>
</div>
<p class="para">The name shown above is still followed by a NUL byte and a unique suffix.</p>
</li>
<li class="listitem">
<p class="para">Non-absolute trait method references in trait alias adaptations are now required to be unambiguous:</p>
<div class="example-contents">
<div class="phpcode"><code>&lt;?php<br />
class X {<br />
use T1, T2 {<br />
func as otherFunc;<br />
}<br />
function func() {}<br />
}<br />
?&gt;</code></div>
</div>
<p class="para">If both <code class="code">T1::func()</code> and <code class="code">T2::func()</code> exist, this code was previously silently accepted, and func was assumed to refer to <code class="code">T1::func</code>. Now it will generate a fatal error instead, and either <code class="code">T1::func</code> or <code class="code">T2::func</code> needs to be written explicitly.</p>
</li>
<li class="listitem">
<p class="para">The signature of abstract methods defined in traits is now checked against the implementing class method:</p>
<div class="example-contents">
<div class="phpcode"><code>&lt;?php<br />
trait MyTrait {<br />
abstract private function neededByTrait(): string;<br />
}</code></div>
</div>
<p>class MyClass {<br />
use MyTrait;</p>
<p>// Error, because of return type mismatch.<br />
private function neededByTrait(): int { return 42; }<br />
}<br />
?&gt;</li>
<li class="listitem">
<p class="para">Disabled functions are now treated exactly like non-existent functions. Calling a disabled function will report it as unknown, and redefining a disabled function is now possible.</p>
</li>
<li class="listitem">
<p class="para"><code class="literal">data://</code> stream wrappers are no longer writable, which matches the documented behavior.</p>
</li>
<li class="listitem">
<p class="para">The arithmetic and bitwise operators <code class="literal">+</code>, <code class="literal">-</code>, <code class="literal">*</code>, <code class="literal">/</code>, <code class="literal">**</code>, <code class="literal">%</code>, <code class="literal">&lt;&lt;</code>, <code class="literal">&gt;&gt;</code>, <code class="literal">&amp;</code>, <code class="literal">|</code>, <code class="literal">^</code>, <code class="literal">~</code>, <code class="literal">++</code>, <code class="literal">--</code> will now consistently throw a <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.typeerror.php">TypeError</a></span> when one of the operands is an <span class="type">array</span>, <a class="link" href="https://www.php.net/manual/en/language.types.resource.php">resource</a> or non-overloaded <span class="type">object</span>. The only exception to this is the array <code class="literal">+</code> array merge operation, which remains supported.</p>
</li>
<li class="listitem">
<p class="para">Float to string casting will now always behave locale-independently.</p>
<div class="example-contents">
<div class="phpcode"><code>&lt;?php<br />
setlocale(LC_ALL, "de_DE");<br />
$f = 3.14;<br />
echo $f, "\n";<br />
// Previously: 3,14<br />
// Now:        3.14<br />
?&gt;</code></div>
</div>
<p class="para">See <span class="function"><a class="function" href="https://www.php.net/manual/en/function.printf.php">printf()</a></span>, <span class="function"><a class="function" href="https://www.php.net/manual/en/function.number-format.php">number_format()</a></span> and <span class="methodname"><strong>NumberFormatter()</strong></span> for ways to customize number formatting.</p>
</li>
<li class="listitem">
<p class="para">Support for deprecated curly braces for offset access has been removed.</p>
<div class="example-contents">
<div class="phpcode"><code>&lt;?php<br />
// Instead of:<br />
$array{0};<br />
$array{"key"};<br />
// Write:<br />
$array[0];<br />
$array["key"];<br />
?&gt;</code></div>
</div>
</li>
<li class="listitem">
<p class="para">Applying the final modifier on a private method will now produce a warning unless that method is the constructor.</p>
</li>
<li class="listitem">
<p class="para">If an object constructor <span class="function"><a class="function" href="https://www.php.net/manual/en/function.exit.php">exit()</a></span>s, the object destructor will no longer be called. This matches the behavior when the constructor throws.</p>
</li>
<li class="listitem">
<p class="para">Namespaced names can no longer contain whitespace: While <code class="code">Foo\Bar</code> will be recognized as a namespaced name, <code class="code">Foo \ Bar</code> will not. Conversely, reserved keywords are now permitted as namespace segments, which may also change the interpretation of code: <code class="code">new\x</code> is now the same as <code class="code">constant('new\x')</code>, not <code class="code">new \x()</code>.</p>
</li>
<li class="listitem">
<p class="para">Nested ternaries now require explicit parentheses.</p>
</li>
<li class="listitem">
<p class="para"><span class="function"><a class="function" href="https://www.php.net/manual/en/function.debug-backtrace.php">debug_backtrace()</a></span> and <span class="methodname"><a class="methodname" href="https://www.php.net/manual/en/exception.gettrace.php">Exception::getTrace()</a></span> will no longer provide references to arguments. It will not be possible to change function arguments through the backtrace.</p>
</li>
<li class="listitem">
<p class="para">Numeric string handling has been altered to be more intuitive and less error-prone. Trailing whitespace is now allowed in numeric strings for consistency with how leading whitespace is treated. This mostly affects:</p>
<ul class="simplelist">
<li class="member">The <span class="function"><a class="function" href="https://www.php.net/manual/en/function.is-numeric.php">is_numeric()</a></span> function</li>
<li class="member">String-to-string comparisons</li>
<li class="member">Type declarations</li>
<li class="member">Increment and decrement operations</li>
</ul>
<p class="para">The concept of a &#8220;leading-numeric string&#8221; has been mostly dropped; the cases where this remains exist in order to ease migration. Strings which emitted an <strong><code>E_NOTICE</code></strong> &#8220;A non well-formed numeric value encountered&#8221; will now emit an <strong><code>E_WARNING</code></strong> &#8220;A non-numeric value encountered&#8221; and all strings which emitted an <strong><code>E_WARNING</code></strong> &#8220;A non-numeric value encountered&#8221; will now throw a <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.typeerror.php">TypeError</a></span>. This mostly affects:</p>
<ul class="simplelist">
<li class="member">Arithmetic operations</li>
<li class="member">Bitwise operations</li>
</ul>
<p class="para">This <strong><code>E_WARNING</code></strong> to <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.typeerror.php">TypeError</a></span> change also affects the <strong><code>E_WARNING</code></strong> &#8220;Illegal string offset &#8216;string'&#8221; for illegal string offsets. The behavior of explicit casts to int/float from strings has not been changed.</p>
</li>
<li class="listitem">
<p class="para">Magic Methods will now have their arguments and return types checked if they have them declared. The signatures should match the following list:</p>
<ul class="simplelist">
<li class="member"><code class="code">__call(string $name, array $arguments): mixed</code></li>
<li class="member"><code class="code">__callStatic(string $name, array $arguments): mixed</code></li>
<li class="member"><code class="code">__clone(): void</code></li>
<li class="member"><code class="code">__debugInfo(): ?array</code></li>
<li class="member"><code class="code">__get(string $name): mixed</code></li>
<li class="member"><code class="code">__invoke(mixed $arguments): mixed</code></li>
<li class="member"><code class="code">__isset(string $name): bool</code></li>
<li class="member"><code class="code">__serialize(): array</code></li>
<li class="member"><code class="code">__set(string $name, mixed $value): void</code></li>
<li class="member"><code class="code">__set_state(array $properties): object</code></li>
<li class="member"><code class="code">__sleep(): array</code></li>
<li class="member"><code class="code">__unserialize(array $data): void</code></li>
<li class="member"><code class="code">__unset(string $name): void</code></li>
<li class="member"><code class="code">__wakeup(): void</code></li>
</ul>
</li>
<li class="listitem">
<p class="para"><span class="function"><a class="function" href="https://www.php.net/manual/en/function.call-user-func-array.php">call_user_func_array()</a></span> array keys will now be interpreted as parameter names, instead of being silently ignored.</p>
</li>
<li class="listitem">
<p class="para">Declaring a function called <code class="literal">assert()</code> inside a namespace is no longer allowed, and issues <strong><code>E_COMPILE_ERROR</code></strong>. The <span class="function"><a class="function" href="https://www.php.net/manual/en/function.assert.php">assert()</a></span> function is subject to special handling by the engine, which may lead to inconsistent behavior when defining a namespaced function with the same name.</p>
</li>
</ul>
<div id="migration80.incompatible.resource2object" class="sect2">
<h3 class="title">Resource to Object Migration<a class="genanchor" href="https://www.php.net/manual/en/migration80.incompatible.php#migration80.incompatible.resource2object"> ¶</a></h3>
<p class="para">Several <a class="link" href="https://www.php.net/manual/en/language.types.resource.php">resource</a>s have been migrated to <span class="type">object</span>s. Return value checks using <span class="function"><a class="function" href="https://www.php.net/manual/en/function.is-resource.php">is_resource()</a></span> should be replaced with checks for <strong><code>false</code></strong>.</p>
<ul class="itemizedlist">
<li class="listitem">
<p class="para"><span class="function"><a class="function" href="https://www.php.net/manual/en/function.curl-init.php">curl_init()</a></span> will now return a <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.curlhandle.php">CurlHandle</a></span> object rather than a <a class="link" href="https://www.php.net/manual/en/language.types.resource.php">resource</a>. The <span class="function"><a class="function" href="https://www.php.net/manual/en/function.curl-close.php">curl_close()</a></span> function no longer has an effect, instead the <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.curlhandle.php">CurlHandle</a></span> instance is automatically destroyed if it is no longer referenced.</p>
</li>
<li class="listitem">
<p class="para"><span class="function"><a class="function" href="https://www.php.net/manual/en/function.curl-multi-init.php">curl_multi_init()</a></span> will now return a <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.curlmultihandle.php">CurlMultiHandle</a></span> object rather than a <a class="link" href="https://www.php.net/manual/en/language.types.resource.php">resource</a>. The <span class="function"><a class="function" href="https://www.php.net/manual/en/function.curl-multi-close.php">curl_multi_close()</a></span> function no longer has an effect, instead the <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.curlmultihandle.php">CurlMultiHandle</a></span> instance is automatically destroyed if it is no longer referenced.</p>
</li>
<li class="listitem">
<p class="para"><span class="function"><a class="function" href="https://www.php.net/manual/en/function.curl-share-init.php">curl_share_init()</a></span> will now return a <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.curlsharehandle.php">CurlShareHandle</a></span> object rather than a <a class="link" href="https://www.php.net/manual/en/language.types.resource.php">resource</a>. The <span class="function"><a class="function" href="https://www.php.net/manual/en/function.curl-share-close.php">curl_share_close()</a></span> function no longer has an effect, instead the <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.curlsharehandle.php">CurlShareHandle</a></span> instance is automatically destroyed if it is no longer referenced.</p>
</li>
<li class="listitem">
<p class="para"><span class="function"><a class="function" href="https://www.php.net/manual/en/function.enchant-broker-init.php">enchant_broker_init()</a></span> will now return an <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.enchantbroker.php">EnchantBroker</a></span> object rather than a <a class="link" href="https://www.php.net/manual/en/language.types.resource.php">resource</a>.</p>
</li>
<li class="listitem">
<p class="para"><span class="function"><a class="function" href="https://www.php.net/manual/en/function.enchant-broker-request-dict.php">enchant_broker_request_dict()</a></span> and <span class="function"><a class="function" href="https://www.php.net/manual/en/function.enchant-broker-request-pwl-dict.php">enchant_broker_request_pwl_dict()</a></span> will now return an <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.enchantdictionary.php">EnchantDictionary</a></span> object rather than a <a class="link" href="https://www.php.net/manual/en/language.types.resource.php">resource</a>.</p>
</li>
<li class="listitem">
<p class="para">The GD extension now uses <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.gdimage.php">GdImage</a></span> objects as the underlying data structure for images, rather than <a class="link" href="https://www.php.net/manual/en/language.types.resource.php">resource</a>s. The <span class="function"><a class="function" href="https://www.php.net/manual/en/function.imagedestroy.php">imagedestroy()</a></span> function no longer has an effect; instead the <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.gdimage.php">GdImage</a></span> instance is automatically destroyed if it is no longer referenced.</p>
</li>
<li class="listitem">
<p class="para"><span class="function"><a class="function" href="https://www.php.net/manual/en/function.openssl-x509-read.php">openssl_x509_read()</a></span> and <span class="function"><a class="function" href="https://www.php.net/manual/en/function.openssl-csr-sign.php">openssl_csr_sign()</a></span> will now return an <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.opensslcertificate.php">OpenSSLCertificate</a></span> object rather than a <a class="link" href="https://www.php.net/manual/en/language.types.resource.php">resource</a>. The <span class="function"><a class="function" href="https://www.php.net/manual/en/function.openssl-x509-free.php">openssl_x509_free()</a></span> function is deprecated and no longer has an effect, instead the <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.opensslcertificate.php">OpenSSLCertificate</a></span> instance is automatically destroyed if it is no longer referenced.</p>
</li>
<li class="listitem">
<p class="para"><span class="function"><a class="function" href="https://www.php.net/manual/en/function.openssl-csr-new.php">openssl_csr_new()</a></span> will now return an <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.opensslcertificatesigningrequest.php">OpenSSLCertificateSigningRequest</a></span> object rather than a <a class="link" href="https://www.php.net/manual/en/language.types.resource.php">resource</a>.</p>
</li>
<li class="listitem">
<p class="para"><span class="function"><a class="function" href="https://www.php.net/manual/en/function.openssl-pkey-new.php">openssl_pkey_new()</a></span> will now return an <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.opensslasymmetrickey.php">OpenSSLAsymmetricKey</a></span> object rather than a <a class="link" href="https://www.php.net/manual/en/language.types.resource.php">resource</a>. The <span class="function"><a class="function" href="https://www.php.net/manual/en/function.openssl-pkey-free.php">openssl_pkey_free()</a></span> function is deprecated and no longer has an effect, instead the <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.opensslasymmetrickey.php">OpenSSLAsymmetricKey</a></span> instance is automatically destroyed if it is no longer referenced.</p>
</li>
<li class="listitem">
<p class="para"><span class="function"><a class="function" href="https://www.php.net/manual/en/function.shmop-open.php">shmop_open()</a></span> will now return a <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.shmop.php">Shmop</a></span> object rather than a <a class="link" href="https://www.php.net/manual/en/language.types.resource.php">resource</a>. The <span class="function"><a class="function" href="https://www.php.net/manual/en/function.shmop-close.php">shmop_close()</a></span> function no longer has an effect, and is deprecated; instead the <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.shmop.php">Shmop</a></span> instance is automatically destroyed if it is no longer referenced.</p>
</li>
<li class="listitem">
<p class="para"><span class="function"><a class="function" href="https://www.php.net/manual/en/function.socket-create.php">socket_create()</a></span>, <span class="function"><a class="function" href="https://www.php.net/manual/en/function.socket-create-listen.php">socket_create_listen()</a></span>, <span class="function"><a class="function" href="https://www.php.net/manual/en/function.socket-accept.php">socket_accept()</a></span>, <span class="function"><a class="function" href="https://www.php.net/manual/en/function.socket-import-stream.php">socket_import_stream()</a></span>, <span class="function"><a class="function" href="https://www.php.net/manual/en/function.socket-addrinfo-connect.php">socket_addrinfo_connect()</a></span>, <span class="function"><a class="function" href="https://www.php.net/manual/en/function.socket-addrinfo-bind.php">socket_addrinfo_bind()</a></span>, and <span class="function"><a class="function" href="https://www.php.net/manual/en/function.socket-wsaprotocol-info-import.php">socket_wsaprotocol_info_import()</a></span> will now return a <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.socket.php">Socket</a></span> object rather than a <a class="link" href="https://www.php.net/manual/en/language.types.resource.php">resource</a>. <span class="function"><a class="function" href="https://www.php.net/manual/en/function.socket-addrinfo-lookup.php">socket_addrinfo_lookup()</a></span> will now return an array of <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.addressinfo.php">AddressInfo</a></span> objects rather than <a class="link" href="https://www.php.net/manual/en/language.types.resource.php">resource</a>s.</p>
</li>
<li class="listitem">
<p class="para"><span class="function"><a class="function" href="https://www.php.net/manual/en/function.msg-get-queue.php">msg_get_queue()</a></span> will now return an <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.sysvmessagequeue.php">SysvMessageQueue</a></span> object rather than a <a class="link" href="https://www.php.net/manual/en/language.types.resource.php">resource</a>.</p>
</li>
<li class="listitem">
<p class="para"><span class="function"><a class="function" href="https://www.php.net/manual/en/function.sem-get.php">sem_get()</a></span> will now return an <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.sysvsemaphore.php">SysvSemaphore</a></span> object rather than a <a class="link" href="https://www.php.net/manual/en/language.types.resource.php">resource</a>.</p>
</li>
<li class="listitem">
<p class="para"><span class="function"><a class="function" href="https://www.php.net/manual/en/function.shm-attach.php">shm_attach()</a></span> will now return an <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.sysvsharedmemory.php">SysvSharedMemory</a></span> object rather than a <a class="link" href="https://www.php.net/manual/en/language.types.resource.php">resource</a>.</p>
</li>
<li class="listitem">
<p class="para"><span class="function"><a class="function" href="https://www.php.net/manual/en/function.xml-parser-create.php">xml_parser_create()</a></span> and <span class="function"><a class="function" href="https://www.php.net/manual/en/function.xml-parser-create-ns.php">xml_parser_create_ns()</a></span> will now return an <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.xmlparser.php">XMLParser</a></span> object rather than a <a class="link" href="https://www.php.net/manual/en/language.types.resource.php">resource</a>. The <span class="function"><a class="function" href="https://www.php.net/manual/en/function.xml-parser-free.php">xml_parser_free()</a></span> function no longer has an effect, instead the XMLParser instance is automatically destroyed if it is no longer referenced.</p>
</li>
<li class="listitem">
<p class="para">The <a class="link" href="https://www.php.net/manual/en/book.xmlwriter.php">XMLWriter</a> functions now accept and return, respectively, <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.xmlwriter.php">XMLWriter</a></span> objects instead of <a class="link" href="https://www.php.net/manual/en/language.types.resource.php">resource</a>s.</p>
</li>
<li class="listitem">
<p class="para"><span class="function"><a class="function" href="https://www.php.net/manual/en/function.inflate-init.php">inflate_init()</a></span> will now return an <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.inflatecontext.php">InflateContext</a></span> object rather than a <a class="link" href="https://www.php.net/manual/en/language.types.resource.php">resource</a>.</p>
</li>
<li class="listitem">
<p class="para"><span class="function"><a class="function" href="https://www.php.net/manual/en/function.deflate-init.php">deflate_init()</a></span> will now return a <span class="classname"><a class="classname" href="https://www.php.net/manual/en/class.deflatecontext.php">DeflateContext</a></span> object rather than a <a class="link" href="https://www.php.net/manual/en/language.types.resource.php">resource</a>.</p>
</li>
</ul>
</div>
<p>The post <a href="https://web321.co/upgrading-to-php8-why-you-should-upgrade-your-wordpress-server/">Upgrading to PHP8: Why You Should Upgrade Your WordPress Server</a> appeared first on <a href="https://web321.co">Web321: Your Best WordPress Support</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>It&#8217;s 2021: These Are Seven “Features” That Shouldn’t Cost Extra</title>
		<link>https://web321.co/seven-features-that-shouldnt-cost-extra/</link>
		
		<dc:creator><![CDATA[Web 321]]></dc:creator>
		<pubDate>Mon, 21 Sep 2020 16:28:42 +0000</pubDate>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Premium Features]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Web Design Features]]></category>
		<category><![CDATA[Web Development]]></category>
		<guid isPermaLink="false">https://web321.co/?p=4317</guid>

					<description><![CDATA[<p>&#160; When it comes to web design, there are many designers and packages available. Various players in the web industry have tried to differentiate themselves with new features and buzzwords &#8211; but how many of these “premium features” are actually standard? In many cases, your provider may be artificially throttling a feature they get for [&#8230;]</p>
<p>The post <a href="https://web321.co/seven-features-that-shouldnt-cost-extra/">It&#8217;s 2021: These Are Seven “Features” That Shouldn’t Cost Extra</a> appeared first on <a href="https://web321.co">Web321: Your Best WordPress Support</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" class="aligncenter wp-image-4325" src="https://web321co.b-cdn.net/wp-content/uploads/2020/09/Infographic-Features_Final.png" alt="Seven “Features” That Shouldn’t Cost Extra" width="649" height="811" srcset="https://web321co.b-cdn.net/wp-content/uploads/2020/09/Infographic-Features_Final.png 1080w, https://web321co.b-cdn.net/wp-content/uploads/2020/09/Infographic-Features_Final-240x300.png 240w, https://web321co.b-cdn.net/wp-content/uploads/2020/09/Infographic-Features_Final-819x1024.png 819w, https://web321co.b-cdn.net/wp-content/uploads/2020/09/Infographic-Features_Final-768x960.png 768w, https://web321co.b-cdn.net/wp-content/uploads/2020/09/Infographic-Features_Final-980x1225.png 980w, https://web321co.b-cdn.net/wp-content/uploads/2020/09/Infographic-Features_Final-480x600.png 480w" sizes="auto, (max-width: 649px) 100vw, 649px" /></p>
<p>&nbsp;</p>
<p><span style="font-weight: 400;">When it comes to web design, there are many designers and packages available. Various players in the web industry have tried to differentiate themselves with new features and buzzwords &#8211; but how many of these “premium features” are actually standard? In many cases, your provider may be artificially throttling a feature they get for free, or in unlimited supply, just to turn around and sell it to you as something special.</span></p>
<p><span style="font-weight: 400;">When looking for your next website design, make sure that you are not paying a premium for the following features: </span></p>
<h4><span style="font-weight: 400;">1. WordPress Website</span></h4>
<p><span style="font-weight: 400;">WordPress websites are fast, powerful, and secure &#8211; but they are built using open-source software which, on its own, is free. Web developers may use WordPress as a foundation to build great websites, but they aren’t paying anything for the tool they’re using. Granted, it does take a small amount of effort for a developer to install WordPress and connect it to a database, but that’s true of any website content management system. WordPress should be marketed as a feature &#8211; because it’s definitely one of the better platforms out there &#8211; but if a package charges you a premium for WordPress, look out!</span></p>
<h4><span style="font-weight: 400;">2. Mobile-Ready</span></h4>
<p><span style="font-weight: 400;">In a time where almost everything is digitally driven, 45-55% of website audiences are viewing sites using mobile devices. In fact, having a mobile-ready (“responsive”) website is more important than ever! 57% of users visiting a non-responsive website on their mobile device won’t recommend that business.</span><span style="font-weight: 400;">   A good web designer should make every site they build responsive by default, without a premium charge. If your designer is trying to tack on extra fees for this “feature”, look elsewhere!</span></p>
<h4><span style="font-weight: 400;">3. 99% Uptime </span></h4>
<p><span style="font-weight: 400;">Website uptime is the time that a website or web service is available to the users (“up”) over a given period. Optimal website uptime is 99.9%, which guarantees your website is up and running with only 43 minutes of downtime out of the 720 hours in a month. </span></p>
<p><span style="font-weight: 400;">If your website has an uptime of 99%, out of the 720 hours in a month, your website will have a downtime of 7.2 hours per month. That difference is huge!</span></p>
<p><span style="font-weight: 400;">A 99% uptime guarantee is nothing special and falls far short of the minimum 99.9% uptime you should be looking for. If you’re being charged a premium for 99% uptime, in our opinion, you’re getting fleeced.</span></p>
<h4><span style="font-weight: 400;">4. Unlimited Email Addresses </span></h4>
<p><span style="font-weight: 400;">Hearing “unlimited” always sounds like a win and mentally justifies a premium price. However, you may not know that most hosting comes with unlimited email addresses for your domain &#8211; all your web designer has to do is activate them for you. What’s actually limited is the drive space available on the server &#8211; and most providers will cap the size of each email account to prevent hitting the drive space limit. Essentially, if your web designer is charging you extra for more email addresses, they are charging you a premium for something they get for free.</span></p>
<p><span style="font-weight: 400;">To put this in perspective, imagine a pizza parlour offering you a pizza that has 20 slices. This sounds like a great deal, however, is the pizza really any bigger than if they cut the same pizza into 10 slices? Be careful you aren’t paying more money for the same thing just because there’s a more impressive number attached.</span></p>
<h4><span style="font-weight: 400;">5. Unlimited Blogging </span></h4>
<p><span style="font-weight: 400;">Here’s another example of how packages use the word “unlimited” to create the illusion of a juicy deal. The space available on your server, or server farm will reach a cap at some point. However, this cap is usually very large and isn’t a problem for most businesses (unless you’re an extremely large firm such as Facebook).  </span></p>
<p><span style="font-weight: 400;">When it comes to blogging, you shouldn’t have a limit to how much you can publish. Blogging as a tool on your platform helps create viewership on your website and demonstrates your thought leadership. It gives you the opportunity to drive search traffic, generates leads, and acts as content for email newsletters. </span></p>
<p><span style="font-weight: 400;">If you’re given a limit of how many blogs you can post on your website, your provider is artificially throttling your growth simply so they can ask you for more money. The only limit on how much you blog isn’t server space &#8211; it’s subject matter and time. (We can actually </span><a href="https://web321.co/write-on-blog-article-booster/"><span style="font-weight: 400;">help with that</span></a><span style="font-weight: 400;">, too.)</span></p>
<h4><span style="font-weight: 400;">6. Unlimited Form Submissions</span></h4>
<p><span style="font-weight: 400;">Forms on your website allow your future clients to contact you about purchasing your services, request quotes, or inquire about your company. Form submissions are the key to successful conversion on your website. </span></p>
<p><span style="font-weight: 400;">Some providers are stingy with their bandwidth, and will actually throttle the number of form submissions you’re allowed &#8211; even though their capacity to handle form submissions is huge! This means that at some point, you’ll reach a limit of form submissions for a given time frame. If you want more, you’ll have to shell out extra money for this “feature”. Not cool.</span></p>
<h4><span style="font-weight: 400;">7. Content Editors </span></h4>
<p><span style="font-weight: 400;">As your business grows, you’ll probably look towards hiring talent to contribute or edit the content on your website. A hidden element of some packages is artificial “limits” to how many content editors you are allowed on your website. On WordPress websites, for example, there are no practical limits to how many editors you can add to the site &#8211; unless your web developer imposes one.</span></p>
<p><span style="font-weight: 400;">When it comes to your website, you may want to limit the number of content contributors for administrative or tracking purposes, but your web provider should never impose a technical limit on this number. If they do, they’re likely looking to make an extra buck off you.</span></p>
<h3><span style="font-weight: 400;">Web321 is Different</span></h3>
<p><span style="font-weight: 400;">At Web321, we know you don’t have money to waste. You shouldn’t need to bribe your web design, web management or hosting company for features that should come standard. Our pricing structure is simple &#8211; $321 for everything you need, no artificial limits imposed. That means if we don’t pay for it, neither do you.</span></p>
<p><span style="font-weight: 400;">So if you want an all-in-one web design, hosting, and management experience that includes standard in every build:</span></p>
<ul>
<li style="font-weight: 400;"><span style="font-weight: 400;">WordPress website platform</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">mobile responsiveness for every screen size</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">free premium plugins</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">99.9% uptime guarantee</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">unlimited email addresses</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">unlimited blogging</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">unlimited form submissions</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">unlimited content editors</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">unlimited done-for-you content updates</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">and a lot </span><a href="https://web321.co/services/plans-pricing/#MWP"><span style="font-weight: 400;">more</span></a><span style="font-weight: 400;">&#8230;</span></li>
</ul>
<p><span style="font-weight: 400;">&#8230;visit our website at </span><a href="https://web321.co/"><span style="font-weight: 400;">https://web321.co</span></a><span style="font-weight: 400;"> or email us at </span><span style="font-weight: 400;">contact@web321.co</span><span style="font-weight: 400;"> for info.</span></p>
<p>&nbsp;</p>
<p>The post <a href="https://web321.co/seven-features-that-shouldnt-cost-extra/">It&#8217;s 2021: These Are Seven “Features” That Shouldn’t Cost Extra</a> appeared first on <a href="https://web321.co">Web321: Your Best WordPress Support</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
