<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[AdminsForum - aaPanel WordPress Guides]]></title>
		<link>https://adminsforum.com/</link>
		<description><![CDATA[AdminsForum - https://adminsforum.com]]></description>
		<pubDate>Thu, 15 Oct 2026 06:11:11 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Run WordPress Scheduled Tasks with aaPanel Cron]]></title>
			<link>https://adminsforum.com/Thread-guide-run-wordpress-scheduled-tasks-with-aapanel-cron</link>
			<pubDate>Tue, 13 Oct 2026 11:42:03 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-run-wordpress-scheduled-tasks-with-aapanel-cron</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">Quick answer</span><br />
Create one aaPanel task that runs your site's wp-cron.php using the correct PHP interpreter and website user. Verify a due event actually runs, then keep traffic-triggered WP-Cron disabled for that site. Our lab now has one five-minute task for wp.adminslab.com; its native log and a due WordPress test event both passed.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Why use a server schedule?</span><br />
WordPress normally checks scheduled events during website traffic. A low-traffic site can therefore run due work late. A server scheduler gives WordPress regular opportunities to process its due queue, even when nobody visits the site. It does not make every plugin task safe, repair broken callbacks or force future events to run early.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Check the actual website and PHP</span><br />
Record the exact document root and active PHP version. Our website root is /www/wwwroot/wp.adminslab.com and its active PHP-FPM runtime is PHP 8.5.11. The matching CLI interpreter is /www/server/php/85/bin/php. Verify those paths on your own server instead of copying 85 for a website using another version.<br />
WordPress Site Health reports the web runtime. The server's generic php command may point to another interpreter with different extensions and limits. Test the executable you will schedule.<br />
Also identify the website's OS user. Our site files use www. Running the PHP workload as the website user helps avoid root-owned generated files.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Create one task</span><br />
In aaPanel, open Cron and keep Task type set to Shell Script. Give it a specific name such as “WordPress scheduled tasks — wp.adminslab.com”. Choose N Minutes and set the interval to 5. Check that the description says it executes every five minutes, rather than a daily time or a five-hour interval.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=127" target="_blank" title="">wordpress-cron-settings-branded-20261013.jpg</a> (Size: 101.45 KB / Downloads: 6)
<!-- end: postbit_attachments_attachment --><br />
Our panel stores the scheduler wrapper as root, and the command explicitly runs PHP as www. If your panel supports selecting the correct website user directly, use that with the corresponding plain PHP command instead. Do not substitute another OS account without checking its access.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Use a command with visible exit status</span><br />
The exact tested lab wrapper is:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>/usr/sbin/runuser -u www -- /www/server/php/85/bin/php -q /www/wwwroot/wp.adminslab.com/wp-cron.php
af_status=&#36;?
echo "WordPress scheduler finished; exit code: &#36;af_status"
exit "&#36;af_status"</code></div></div>Change the website path, PHP interpreter and website user to match your setup. The wrapper's scheduler account must be allowed to use runuser; a non-root task cannot generally switch to arbitrary accounts.<br />
Keep the exit status: it makes a failed PHP invocation visible. Do not suppress every error and then print a misleading success message. Our first silent version gave an unhelpful empty log, so the tested final version reports the interpreter's result.<br />
Save the task once. Check the task list for an existing equivalent job before adding another.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Verify the native task</span><br />
Use Execute for this specific task, confirm the named task and inspect its Log. An empty output is not by itself proof that a due WordPress callback ran.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=125" target="_blank" title="">wordpress-cron-log-branded-20261013.jpg</a> (Size: 75.79 KB / Downloads: 8)
<!-- end: postbit_attachments_attachment --><br />
Our final native log reported exit code 0 and Successful. A subsequent automatic five-minute run also logged success. The existing certificate-renewal task stayed running, and the earlier website/database backup demo tasks stayed stopped.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Verify an actual due WordPress event</span><br />
For the lab, we registered a temporary, uniquely named test hook, scheduled it as due and had its callback write a timestamp. The native task processed it. A separate check read the recorded execution time and confirmed DISABLE_WP_CRON was true. The test hook and marker were then cleaned up.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=126" target="_blank" title="">wordpress-cron-proof-branded-20261013.jpg</a> (Size: 41.17 KB / Downloads: 6)
<!-- end: postbit_attachments_attachment --><br />
This is stronger evidence than the task's Running label. For your real site, inspect a known due event or a scheduled post after its due time, and review any plugin-specific errors. Do not change every plugin schedule just to create a test.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Replace traffic-triggered WP-Cron</span><br />
Back up wp-config.php privately. Once the server task is ready and its operation is verified, add the following before WordPress loads wp-settings.php:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>define('DISABLE_WP_CRON', true);</code></div></div>Check first whether that constant is already defined. Do not create duplicate definitions. Lint the configuration and confirm the site still loads.<br />
If the new task fails, restore the previous scheduling behavior while you fix the task. Leaving both traffic-triggered and external scheduling disabled can prevent due work from running. The lab's final state keeps the verified five-minute task running and traffic-triggered execution disabled for this site.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Troubleshooting</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">PHP executable not found:</span> use the full installed interpreter path for the website's intended PHP version.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Permission denied:</span> check the website user, directory permissions and command wrapper. Avoid making the entire website world-writable.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Task exits successfully but an event remains overdue:</span> inspect that event's callback, application logs and any cron lock; scheduler invocation alone cannot repair plugin logic.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Task runs twice:</span> check for duplicate native jobs, external schedulers and the site's DISABLE_WP_CRON configuration.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Wrong timestamps:</span> distinguish server/log timezone from WordPress display timezone. The lab verification timestamp was recorded in UTC.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Rollback</span><br />
Restore traffic-triggered scheduling if needed, then stop the equivalent aaPanel task so you do not leave redundant schedulers. Verify a due event again. Do not disable unrelated SSL renewal, mail or backup tasks.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">References:</span> <a href="https://developer.wordpress.org/plugins/cron/hooking-wp-cron-into-the-system-task-scheduler/" target="_blank" rel="noopener" class="mycode_url">WordPress system-scheduler documentation</a> and <a href="https://www.aapanel.com/docs/Function/Cron.html" target="_blank" rel="noopener" class="mycode_url">aaPanel Cron documentation</a>. © AdminsForum.]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">Quick answer</span><br />
Create one aaPanel task that runs your site's wp-cron.php using the correct PHP interpreter and website user. Verify a due event actually runs, then keep traffic-triggered WP-Cron disabled for that site. Our lab now has one five-minute task for wp.adminslab.com; its native log and a due WordPress test event both passed.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Why use a server schedule?</span><br />
WordPress normally checks scheduled events during website traffic. A low-traffic site can therefore run due work late. A server scheduler gives WordPress regular opportunities to process its due queue, even when nobody visits the site. It does not make every plugin task safe, repair broken callbacks or force future events to run early.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Check the actual website and PHP</span><br />
Record the exact document root and active PHP version. Our website root is /www/wwwroot/wp.adminslab.com and its active PHP-FPM runtime is PHP 8.5.11. The matching CLI interpreter is /www/server/php/85/bin/php. Verify those paths on your own server instead of copying 85 for a website using another version.<br />
WordPress Site Health reports the web runtime. The server's generic php command may point to another interpreter with different extensions and limits. Test the executable you will schedule.<br />
Also identify the website's OS user. Our site files use www. Running the PHP workload as the website user helps avoid root-owned generated files.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Create one task</span><br />
In aaPanel, open Cron and keep Task type set to Shell Script. Give it a specific name such as “WordPress scheduled tasks — wp.adminslab.com”. Choose N Minutes and set the interval to 5. Check that the description says it executes every five minutes, rather than a daily time or a five-hour interval.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=127" target="_blank" title="">wordpress-cron-settings-branded-20261013.jpg</a> (Size: 101.45 KB / Downloads: 6)
<!-- end: postbit_attachments_attachment --><br />
Our panel stores the scheduler wrapper as root, and the command explicitly runs PHP as www. If your panel supports selecting the correct website user directly, use that with the corresponding plain PHP command instead. Do not substitute another OS account without checking its access.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Use a command with visible exit status</span><br />
The exact tested lab wrapper is:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>/usr/sbin/runuser -u www -- /www/server/php/85/bin/php -q /www/wwwroot/wp.adminslab.com/wp-cron.php
af_status=&#36;?
echo "WordPress scheduler finished; exit code: &#36;af_status"
exit "&#36;af_status"</code></div></div>Change the website path, PHP interpreter and website user to match your setup. The wrapper's scheduler account must be allowed to use runuser; a non-root task cannot generally switch to arbitrary accounts.<br />
Keep the exit status: it makes a failed PHP invocation visible. Do not suppress every error and then print a misleading success message. Our first silent version gave an unhelpful empty log, so the tested final version reports the interpreter's result.<br />
Save the task once. Check the task list for an existing equivalent job before adding another.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Verify the native task</span><br />
Use Execute for this specific task, confirm the named task and inspect its Log. An empty output is not by itself proof that a due WordPress callback ran.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=125" target="_blank" title="">wordpress-cron-log-branded-20261013.jpg</a> (Size: 75.79 KB / Downloads: 8)
<!-- end: postbit_attachments_attachment --><br />
Our final native log reported exit code 0 and Successful. A subsequent automatic five-minute run also logged success. The existing certificate-renewal task stayed running, and the earlier website/database backup demo tasks stayed stopped.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Verify an actual due WordPress event</span><br />
For the lab, we registered a temporary, uniquely named test hook, scheduled it as due and had its callback write a timestamp. The native task processed it. A separate check read the recorded execution time and confirmed DISABLE_WP_CRON was true. The test hook and marker were then cleaned up.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=126" target="_blank" title="">wordpress-cron-proof-branded-20261013.jpg</a> (Size: 41.17 KB / Downloads: 6)
<!-- end: postbit_attachments_attachment --><br />
This is stronger evidence than the task's Running label. For your real site, inspect a known due event or a scheduled post after its due time, and review any plugin-specific errors. Do not change every plugin schedule just to create a test.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Replace traffic-triggered WP-Cron</span><br />
Back up wp-config.php privately. Once the server task is ready and its operation is verified, add the following before WordPress loads wp-settings.php:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>define('DISABLE_WP_CRON', true);</code></div></div>Check first whether that constant is already defined. Do not create duplicate definitions. Lint the configuration and confirm the site still loads.<br />
If the new task fails, restore the previous scheduling behavior while you fix the task. Leaving both traffic-triggered and external scheduling disabled can prevent due work from running. The lab's final state keeps the verified five-minute task running and traffic-triggered execution disabled for this site.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Troubleshooting</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">PHP executable not found:</span> use the full installed interpreter path for the website's intended PHP version.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Permission denied:</span> check the website user, directory permissions and command wrapper. Avoid making the entire website world-writable.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Task exits successfully but an event remains overdue:</span> inspect that event's callback, application logs and any cron lock; scheduler invocation alone cannot repair plugin logic.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Task runs twice:</span> check for duplicate native jobs, external schedulers and the site's DISABLE_WP_CRON configuration.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Wrong timestamps:</span> distinguish server/log timezone from WordPress display timezone. The lab verification timestamp was recorded in UTC.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Rollback</span><br />
Restore traffic-triggered scheduling if needed, then stop the equivalent aaPanel task so you do not leave redundant schedulers. Verify a due event again. Do not disable unrelated SSL renewal, mail or backup tasks.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">References:</span> <a href="https://developer.wordpress.org/plugins/cron/hooking-wp-cron-into-the-system-task-scheduler/" target="_blank" rel="noopener" class="mycode_url">WordPress system-scheduler documentation</a> and <a href="https://www.aapanel.com/docs/Function/Cron.html" target="_blank" rel="noopener" class="mycode_url">aaPanel Cron documentation</a>. © AdminsForum.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Enable Redis Object Cache for WordPress in aaPanel]]></title>
			<link>https://adminsforum.com/Thread-guide-enable-redis-object-cache-for-wordpress-in-aapanel</link>
			<pubDate>Tue, 13 Oct 2026 11:37:33 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-enable-redis-object-cache-for-wordpress-in-aapanel</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">Quick answer</span><br />
Install the official Redis Object Cache plugin, configure its connection before enabling it and verify the cache really persists. Our lab uses Redis 7.4.11 on localhost, database 15 and the prefix af_wp_lab:. The plugin connects through Predis; a PhpRedis extension was not required for this tested free-plugin setup.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">What this cache does</span><br />
A persistent object cache stores WordPress objects between requests and can reduce repeated database work. It differs from HTML page caching and PHP OPcache. Enabling Redis does not by itself configure a CDN, LiteSpeed page cache or every website on the server.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Check Redis before changing WordPress</span><br />
In aaPanel App Store, locate Redis. Install the official package if absent; if installed, open its settings and check its service and configuration. Our lab already had Redis because the mail stack uses it. We did not reinstall it or change the mail service's database.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=123" target="_blank" title="">panel-tls-proof-branded-20261013.jpg</a> (Size: 61.42 KB / Downloads: 7)
<!-- end: postbit_attachments_attachment --><br />
Our checks found bind 127.0.0.1, protected-mode yes, port 6379 and an existing authentication requirement. The active listener was localhost only. No public Redis firewall port was added.<br />
Do not remove authentication to solve a WordPress connection error. Read the existing configuration privately and give the intended client the correct authorized configuration.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Choose an isolated cache namespace</span><br />
Pick an unused Redis database and a unique prefix for the WordPress site. The lab had 16 logical databases, and database 15 was empty before use. We selected it without clearing anything. Do not assume database 15 is free on your server; check first.<br />
A database number and prefix prevent accidental key collisions, but they are not a security boundary between mutually untrusted users. On a production server shared with mail or other applications, plan an appropriately restricted Redis identity or separate instance. Do not share an unrestricted administrator credential between unrelated users.<br />
Avoid global cache flushes. Clearing all Redis data can remove mail filtering or other application state.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Install the correct WordPress plugin</span><br />
In WordPress, open Plugins → Add Plugin and search for Redis Object Cache. Verify the author is Till Krüss, use Install Now and then Activate. Our installed version was 3.0.0. A similarly named cache plugin may have a different configuration or backend.<br />
Activation alone does not mean persistence is enabled. Initially our plugin reported Redis unreachable because the server requires authentication; after the proper configuration and reload, it reported Reachable.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Configure wp-config.php privately</span><br />
Back up wp-config.php outside the publicly served website before editing. Add the connection constants before the line that loads wp-settings.php. Our tested configuration was:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_DATABASE', 15);
define('WP_REDIS_PREFIX', 'af_wp_lab:');
define('WP_REDIS_CLIENT', 'predis');
define('WP_REDIS_PASSWORD', 'YOUR_EXISTING_AUTHORIZED_REDIS_PASSWORD');</code></div></div>Replace the password placeholder privately and choose your own unused database/prefix. Do not paste the real secret into a public support request. The screenshot masks it.<br />
Check PHP syntax before reloading the website. Our PHP 8.5 configuration lint passed. A typo in wp-config.php can break the whole site, so keep the backup ready.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Enable Object Cache</span><br />
Open Settings → Redis. Confirm Redis says Reachable, then select Enable Object Cache. The plugin installs its object-cache drop-in and should report Connected.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=122" target="_blank" title="">redis-connected-branded-20261013.jpg</a> (Size: 93.8 KB / Downloads: 6)
<!-- end: postbit_attachments_attachment --><br />
Our page showed Connected, a writable filesystem, host 127.0.0.1, port 6379, database 15, the separate prefix and Predis 2.4.1. The free plugin was connected even though the separate Pro promotion noted that PhpRedis was absent; that promotion is not the same as the free plugin's connection status.<br />
If another plugin already manages an object-cache.php drop-in, resolve ownership before replacing it. Do not enable two competing persistent object-cache implementations at once.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Verify persistence, not just the status label</span><br />
We loaded the same WordPress installation in two separate PHP processes. The first stored a temporary value through wp_cache_set. The second retrieved it through wp_cache_get and checked the content, then removed only that test key.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=124" target="_blank" title="">redis-persistence-branded-20261013.jpg</a> (Size: 31.56 KB / Downloads: 7)
<!-- end: postbit_attachments_attachment --><br />
Both checks passed. Without persistence, a value stored only in the first process's memory would not survive into the second. We also reloaded the administration page successfully after enabling the cache.<br />
This proves the tested connection and persistence. It is not a benchmark or a claim that every site will load a particular percentage faster. Measure your own workload after configuration.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Troubleshooting</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">NOAUTH:</span> check the intended Redis credential in private configuration. Do not make the service unauthenticated.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Connection refused:</span> confirm Redis is running and the configured address/port match its listener. Keep a local-only setup local.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Not enabled but Reachable:</span> the connection works, but the persistent drop-in still needs enabling.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Drop-in conflict:</span> identify which cache plugin owns object-cache.php before modifying it.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Unexpected cached data:</span> confirm each site has a unique database/prefix and review the application's cache policy. Do not use FLUSHALL as a first response.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Rollback</span><br />
Use Disable Object Cache in the plugin before deactivating it, then check the site still loads. Keep the private wp-config.php backup. If WordPress cannot load at all, use your established file-management/recovery route to inspect the drop-in and restore the correct configuration. Do not stop a shared Redis server used by mail merely to disable one WordPress cache.<br />
The tested lab cache remains enabled on its separate database/prefix. No other Redis database was flushed.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">References:</span> <a href="https://wordpress.org/plugins/redis-cache/" target="_blank" rel="noopener" class="mycode_url">Redis Object Cache plugin</a> and <a href="https://www.aapanel.com/docs/Function/Redis.html" target="_blank" rel="noopener" class="mycode_url">aaPanel Redis documentation</a>. © AdminsForum.]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">Quick answer</span><br />
Install the official Redis Object Cache plugin, configure its connection before enabling it and verify the cache really persists. Our lab uses Redis 7.4.11 on localhost, database 15 and the prefix af_wp_lab:. The plugin connects through Predis; a PhpRedis extension was not required for this tested free-plugin setup.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">What this cache does</span><br />
A persistent object cache stores WordPress objects between requests and can reduce repeated database work. It differs from HTML page caching and PHP OPcache. Enabling Redis does not by itself configure a CDN, LiteSpeed page cache or every website on the server.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Check Redis before changing WordPress</span><br />
In aaPanel App Store, locate Redis. Install the official package if absent; if installed, open its settings and check its service and configuration. Our lab already had Redis because the mail stack uses it. We did not reinstall it or change the mail service's database.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=123" target="_blank" title="">panel-tls-proof-branded-20261013.jpg</a> (Size: 61.42 KB / Downloads: 7)
<!-- end: postbit_attachments_attachment --><br />
Our checks found bind 127.0.0.1, protected-mode yes, port 6379 and an existing authentication requirement. The active listener was localhost only. No public Redis firewall port was added.<br />
Do not remove authentication to solve a WordPress connection error. Read the existing configuration privately and give the intended client the correct authorized configuration.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Choose an isolated cache namespace</span><br />
Pick an unused Redis database and a unique prefix for the WordPress site. The lab had 16 logical databases, and database 15 was empty before use. We selected it without clearing anything. Do not assume database 15 is free on your server; check first.<br />
A database number and prefix prevent accidental key collisions, but they are not a security boundary between mutually untrusted users. On a production server shared with mail or other applications, plan an appropriately restricted Redis identity or separate instance. Do not share an unrestricted administrator credential between unrelated users.<br />
Avoid global cache flushes. Clearing all Redis data can remove mail filtering or other application state.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Install the correct WordPress plugin</span><br />
In WordPress, open Plugins → Add Plugin and search for Redis Object Cache. Verify the author is Till Krüss, use Install Now and then Activate. Our installed version was 3.0.0. A similarly named cache plugin may have a different configuration or backend.<br />
Activation alone does not mean persistence is enabled. Initially our plugin reported Redis unreachable because the server requires authentication; after the proper configuration and reload, it reported Reachable.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Configure wp-config.php privately</span><br />
Back up wp-config.php outside the publicly served website before editing. Add the connection constants before the line that loads wp-settings.php. Our tested configuration was:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_DATABASE', 15);
define('WP_REDIS_PREFIX', 'af_wp_lab:');
define('WP_REDIS_CLIENT', 'predis');
define('WP_REDIS_PASSWORD', 'YOUR_EXISTING_AUTHORIZED_REDIS_PASSWORD');</code></div></div>Replace the password placeholder privately and choose your own unused database/prefix. Do not paste the real secret into a public support request. The screenshot masks it.<br />
Check PHP syntax before reloading the website. Our PHP 8.5 configuration lint passed. A typo in wp-config.php can break the whole site, so keep the backup ready.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Enable Object Cache</span><br />
Open Settings → Redis. Confirm Redis says Reachable, then select Enable Object Cache. The plugin installs its object-cache drop-in and should report Connected.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=122" target="_blank" title="">redis-connected-branded-20261013.jpg</a> (Size: 93.8 KB / Downloads: 6)
<!-- end: postbit_attachments_attachment --><br />
Our page showed Connected, a writable filesystem, host 127.0.0.1, port 6379, database 15, the separate prefix and Predis 2.4.1. The free plugin was connected even though the separate Pro promotion noted that PhpRedis was absent; that promotion is not the same as the free plugin's connection status.<br />
If another plugin already manages an object-cache.php drop-in, resolve ownership before replacing it. Do not enable two competing persistent object-cache implementations at once.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Verify persistence, not just the status label</span><br />
We loaded the same WordPress installation in two separate PHP processes. The first stored a temporary value through wp_cache_set. The second retrieved it through wp_cache_get and checked the content, then removed only that test key.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=124" target="_blank" title="">redis-persistence-branded-20261013.jpg</a> (Size: 31.56 KB / Downloads: 7)
<!-- end: postbit_attachments_attachment --><br />
Both checks passed. Without persistence, a value stored only in the first process's memory would not survive into the second. We also reloaded the administration page successfully after enabling the cache.<br />
This proves the tested connection and persistence. It is not a benchmark or a claim that every site will load a particular percentage faster. Measure your own workload after configuration.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Troubleshooting</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">NOAUTH:</span> check the intended Redis credential in private configuration. Do not make the service unauthenticated.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Connection refused:</span> confirm Redis is running and the configured address/port match its listener. Keep a local-only setup local.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Not enabled but Reachable:</span> the connection works, but the persistent drop-in still needs enabling.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Drop-in conflict:</span> identify which cache plugin owns object-cache.php before modifying it.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Unexpected cached data:</span> confirm each site has a unique database/prefix and review the application's cache policy. Do not use FLUSHALL as a first response.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Rollback</span><br />
Use Disable Object Cache in the plugin before deactivating it, then check the site still loads. Keep the private wp-config.php backup. If WordPress cannot load at all, use your established file-management/recovery route to inspect the drop-in and restore the correct configuration. Do not stop a shared Redis server used by mail merely to disable one WordPress cache.<br />
The tested lab cache remains enabled on its separate database/prefix. No other Redis database was flushed.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">References:</span> <a href="https://wordpress.org/plugins/redis-cache/" target="_blank" rel="noopener" class="mycode_url">Redis Object Cache plugin</a> and <a href="https://www.aapanel.com/docs/Function/Redis.html" target="_blank" rel="noopener" class="mycode_url">aaPanel Redis documentation</a>. © AdminsForum.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Install LiteSpeed Cache in aaPanel WordPress and Verify Cache Hits]]></title>
			<link>https://adminsforum.com/Thread-guide-install-litespeed-cache-in-aapanel-wordpress-and-verify-cache-hits</link>
			<pubDate>Tue, 13 Oct 2026 02:57:54 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-install-litespeed-cache-in-aapanel-wordpress-and-verify-cache-hits</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">Quick answer</span><br />
Install the official LiteSpeed Cache WordPress plugin, confirm your website actually uses OpenLiteSpeed, enable public-page caching and check repeated anonymous HTTPS requests for X-LiteSpeed-Cache: hit. Test purging separately. A plugin activation message or green settings switch is not proof that visitors receive cached pages.<br />
<br />
Our test used aaPanel 8.0.6, OpenLiteSpeed 1.8.5, lsphp 8.5.11 and LiteSpeed Cache 7.9.1 on an isolated Ubuntu 22.04 lab on 12 October 2026. We verified real cache hits, observed misses after a homepage purge, and then disabled/deactivated the plugin before returning the lab site to Nginx.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Verify the backend before installing a cache plugin</span><br />
This guide tests OpenLiteSpeed's server page cache. The WordPress plugin also has other optimization features, but those do not make its LiteSpeed server cache work on an ordinary Nginx/PHP-FPM backend.<br />
<br />
Open WordPress Tools → Site Health → Info → Server. Our test reported Web server: LiteSpeed and PHP SAPI: litespeed after selecting Nginx + Openlitespeed in aaPanel. Follow <a href="https://adminsforum.com/Thread-guide-switch-wordpress-to-openlitespeed-in-aapanel-and-test-rollback" target="_blank" rel="noopener" class="mycode_url">the engine-switch and rollback walkthrough</a> first if necessary.<br />
<br />
Keep a current website/database/configuration backup. Record other cache plugins or reverse-proxy caching already in use so you do not mistake one cache layer for another. Our lab had no other active WordPress plugin when this test began.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Install the official plugin</span><br />
In WordPress, open Plugins → Add Plugin. Search for LiteSpeed Cache. Identify the plugin published by LiteSpeed Technologies, then click Install Now. Wait until installation finishes and the button becomes Activate. Click Activate and confirm the installed plugin is active.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=101" target="_blank" title="">ols-cache-install-branded-20261012.jpg</a> (Size: 175.09 KB / Downloads: 11)
<!-- end: postbit_attachments_attachment --><br />
<br />
We installed version 7.9.1 through WordPress's native Plugin Directory interface. Do not install a similarly named package from an unknown download page.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Use a simple public-page configuration</span><br />
Open LiteSpeed Cache → Cache → the Cache tab. Confirm Enable Cache is ON. For this public-page lab test we set Cache Logged-in Users, Cache Commenters and Cache REST API to OFF, then clicked Save Changes. Cache Login Page and Cache Mobile were already OFF.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=102" target="_blank" title="">ols-cache-settings-branded-20261012.jpg</a> (Size: 106.87 KB / Downloads: 11)
<!-- end: postbit_attachments_attachment --><br />
<br />
These choices keep the test focused on anonymous public pages. They are not a universal performance preset. Evaluate membership, shopping-cart, personalized and API behavior separately before enabling additional caching. We did not add Force Public Cache URIs or force private/account pages into public cache.<br />
<br />
We did not connect QUIC.cloud, enable a CDN, request remote image optimization or enable the crawler. None of those steps was needed to verify the local OpenLiteSpeed page cache in this lab. Avoid changing minification and other optimization settings while diagnosing basic caching.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Test without your administrator login cookies</span><br />
An administrator browser session is not a reliable anonymous cache test. Use a separate signed-out browser session and inspect the document response headers, or run cookie-free requests from a terminal.<br />
<br />
This is the exact spaced request test we used. Replace the URL with your public homepage. It makes three ordinary HTTPS GET requests without login cookies, checks curl's exit code, and prints only the relevant response headers:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>python3 - &lt;&lt;'PY'
import subprocess,time
for n in range(1,4):
 print('Anonymous GET',n)
 r=subprocess.run(['curl','-sS','--max-time','20','-D','-','-o','/dev/null','https://wp.adminslab.com/'],capture_output=True,text=True)
 print('curl exit:',r.returncode)
 for line in r.stdout.splitlines():
  if line.lower().startswith(('http/','server:','x-litespeed-cache:','x-litespeed-cache-control:','cache-control:','age:')):print(line)
 if r.returncode:print('Request failed; inspect connectivity before retrying')
 time.sleep(2)
PY</code></div></div><br />
This uses GET rather than assuming that a HEAD request behaves identically. It does not log in, weaken certificate verification or print authentication/cookie headers.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Interpret the result</span><ul class="mycode_list"><li>HTTP 200 and curl exit 0: the requested page was reached successfully.<br />
</li>
<li>X-LiteSpeed-Cache: miss: this response was not served from a stored LiteSpeed cache entry.<br />
</li>
<li>X-LiteSpeed-Cache: hit: this response was served from LiteSpeed's page cache.<br />
</li>
<li>No hit/miss header: confirm the selected backend, cache configuration and eligible URL before claiming caching works.<br />
</li>
</ul>
<br />
Our first tests returned repeated misses. Later anonymous requests returned hits. A cold cache or operation still completing can affect the first results; recheck after processing finishes rather than treating one immediate miss as a finished diagnosis. If misses persist, inspect cache storage permissions, server configuration, exclusions and conflicting layers using the official troubleshooting documentation.<br />
<br />
Nginx remained the public front end, so the response's Server header said nginx even when X-LiteSpeed-Cache reported hit. The backend was independently verified through WordPress's litespeed SAPI.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Test the purge operation</span><br />
Open LiteSpeed Cache → Toolbox → Purge. For the plugin's page cache, choose Purge All - LSCache. The lab displayed Notified LiteSpeed Web Server to purge all LSCache entries. We also tested Purge Front Page to invalidate only the homepage.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=103" target="_blank" title="">ols-cache-purge-branded-20261012.jpg</a> (Size: 160.69 KB / Downloads: 11)
<!-- end: postbit_attachments_attachment --><br />
<br />
Repeat the anonymous request check. Our targeted homepage purge was not instantaneous: the first observed response still showed hit, followed by subsequent miss responses. The screenshot captures that transition. This checks the actual response after the notification rather than treating the notification alone as evidence.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=104" target="_blank" title="">ols-cache-hit-branded-20261012.jpg</a> (Size: 73 KB / Downloads: 11)
<!-- end: postbit_attachments_attachment --><br />
<br />
After a purge, allow the site to generate fresh eligible responses and recheck for hits before declaring it warmed again. We did not measure a purge latency guarantee or performance improvement. Do not use Empty Entire Cache as a routine substitute for the narrower plugin/page purge; its scope is broader.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Check normal website behavior</span><br />
Open a post and a standalone page over HTTPS. In the lab, /hello-world/ and /sample-page/ rendered successfully on OpenLiteSpeed. We also opened the dashboard and uploaded an original branded JPEG through WordPress; its public HTTPS image loaded at its original dimensions.<br />
<br />
For a real site, check logged-in and logged-out behavior separately and test any forms, carts or personalized screens before keeping new cache settings in production.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">7. Disable caching before an engine return test</span><br />
We set Enable Cache to OFF and saved the setting, then deactivated LiteSpeed Cache through Plugins → Installed Plugins. The plugin remained installed for future lab testing. We used aaPanel's native Rollback and a validated Nginx reload, then verified WordPress reported nginx/1.30.5 with fpm-fcgi SAPI.<br />
<br />
Anonymous HTTPS requests still returned HTTP 200, but no longer reported a LiteSpeed cache hit/miss header. Public content and the uploaded image remained accessible. The lab is left on Nginx with LiteSpeed Cache inactive.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">What this test proves</span><br />
The official plugin installed and activated, public-page settings saved, anonymous requests received cache hits, and the homepage purge was followed by misses. Website content/media checks and the return to PHP-FPM passed. This is a tested setup and verification guide, not a speed benchmark or a recommendation to cache every URL.<br />
<br />
References: <a href="https://wordpress.org/plugins/litespeed-cache/" target="_blank" rel="noopener" class="mycode_url">official WordPress plugin listing</a>, <a href="https://docs.litespeedtech.com/lscache/lscwp/installation/" target="_blank" rel="noopener" class="mycode_url">LiteSpeed installation/cache verification</a> and <a href="https://docs.litespeedtech.com/lscache/lscwp/troubleshoot/" target="_blank" rel="noopener" class="mycode_url">cache troubleshooting</a>. Screenshots are original © AdminsForum lab captures.]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">Quick answer</span><br />
Install the official LiteSpeed Cache WordPress plugin, confirm your website actually uses OpenLiteSpeed, enable public-page caching and check repeated anonymous HTTPS requests for X-LiteSpeed-Cache: hit. Test purging separately. A plugin activation message or green settings switch is not proof that visitors receive cached pages.<br />
<br />
Our test used aaPanel 8.0.6, OpenLiteSpeed 1.8.5, lsphp 8.5.11 and LiteSpeed Cache 7.9.1 on an isolated Ubuntu 22.04 lab on 12 October 2026. We verified real cache hits, observed misses after a homepage purge, and then disabled/deactivated the plugin before returning the lab site to Nginx.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Verify the backend before installing a cache plugin</span><br />
This guide tests OpenLiteSpeed's server page cache. The WordPress plugin also has other optimization features, but those do not make its LiteSpeed server cache work on an ordinary Nginx/PHP-FPM backend.<br />
<br />
Open WordPress Tools → Site Health → Info → Server. Our test reported Web server: LiteSpeed and PHP SAPI: litespeed after selecting Nginx + Openlitespeed in aaPanel. Follow <a href="https://adminsforum.com/Thread-guide-switch-wordpress-to-openlitespeed-in-aapanel-and-test-rollback" target="_blank" rel="noopener" class="mycode_url">the engine-switch and rollback walkthrough</a> first if necessary.<br />
<br />
Keep a current website/database/configuration backup. Record other cache plugins or reverse-proxy caching already in use so you do not mistake one cache layer for another. Our lab had no other active WordPress plugin when this test began.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Install the official plugin</span><br />
In WordPress, open Plugins → Add Plugin. Search for LiteSpeed Cache. Identify the plugin published by LiteSpeed Technologies, then click Install Now. Wait until installation finishes and the button becomes Activate. Click Activate and confirm the installed plugin is active.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=101" target="_blank" title="">ols-cache-install-branded-20261012.jpg</a> (Size: 175.09 KB / Downloads: 11)
<!-- end: postbit_attachments_attachment --><br />
<br />
We installed version 7.9.1 through WordPress's native Plugin Directory interface. Do not install a similarly named package from an unknown download page.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Use a simple public-page configuration</span><br />
Open LiteSpeed Cache → Cache → the Cache tab. Confirm Enable Cache is ON. For this public-page lab test we set Cache Logged-in Users, Cache Commenters and Cache REST API to OFF, then clicked Save Changes. Cache Login Page and Cache Mobile were already OFF.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=102" target="_blank" title="">ols-cache-settings-branded-20261012.jpg</a> (Size: 106.87 KB / Downloads: 11)
<!-- end: postbit_attachments_attachment --><br />
<br />
These choices keep the test focused on anonymous public pages. They are not a universal performance preset. Evaluate membership, shopping-cart, personalized and API behavior separately before enabling additional caching. We did not add Force Public Cache URIs or force private/account pages into public cache.<br />
<br />
We did not connect QUIC.cloud, enable a CDN, request remote image optimization or enable the crawler. None of those steps was needed to verify the local OpenLiteSpeed page cache in this lab. Avoid changing minification and other optimization settings while diagnosing basic caching.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Test without your administrator login cookies</span><br />
An administrator browser session is not a reliable anonymous cache test. Use a separate signed-out browser session and inspect the document response headers, or run cookie-free requests from a terminal.<br />
<br />
This is the exact spaced request test we used. Replace the URL with your public homepage. It makes three ordinary HTTPS GET requests without login cookies, checks curl's exit code, and prints only the relevant response headers:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>python3 - &lt;&lt;'PY'
import subprocess,time
for n in range(1,4):
 print('Anonymous GET',n)
 r=subprocess.run(['curl','-sS','--max-time','20','-D','-','-o','/dev/null','https://wp.adminslab.com/'],capture_output=True,text=True)
 print('curl exit:',r.returncode)
 for line in r.stdout.splitlines():
  if line.lower().startswith(('http/','server:','x-litespeed-cache:','x-litespeed-cache-control:','cache-control:','age:')):print(line)
 if r.returncode:print('Request failed; inspect connectivity before retrying')
 time.sleep(2)
PY</code></div></div><br />
This uses GET rather than assuming that a HEAD request behaves identically. It does not log in, weaken certificate verification or print authentication/cookie headers.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Interpret the result</span><ul class="mycode_list"><li>HTTP 200 and curl exit 0: the requested page was reached successfully.<br />
</li>
<li>X-LiteSpeed-Cache: miss: this response was not served from a stored LiteSpeed cache entry.<br />
</li>
<li>X-LiteSpeed-Cache: hit: this response was served from LiteSpeed's page cache.<br />
</li>
<li>No hit/miss header: confirm the selected backend, cache configuration and eligible URL before claiming caching works.<br />
</li>
</ul>
<br />
Our first tests returned repeated misses. Later anonymous requests returned hits. A cold cache or operation still completing can affect the first results; recheck after processing finishes rather than treating one immediate miss as a finished diagnosis. If misses persist, inspect cache storage permissions, server configuration, exclusions and conflicting layers using the official troubleshooting documentation.<br />
<br />
Nginx remained the public front end, so the response's Server header said nginx even when X-LiteSpeed-Cache reported hit. The backend was independently verified through WordPress's litespeed SAPI.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Test the purge operation</span><br />
Open LiteSpeed Cache → Toolbox → Purge. For the plugin's page cache, choose Purge All - LSCache. The lab displayed Notified LiteSpeed Web Server to purge all LSCache entries. We also tested Purge Front Page to invalidate only the homepage.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=103" target="_blank" title="">ols-cache-purge-branded-20261012.jpg</a> (Size: 160.69 KB / Downloads: 11)
<!-- end: postbit_attachments_attachment --><br />
<br />
Repeat the anonymous request check. Our targeted homepage purge was not instantaneous: the first observed response still showed hit, followed by subsequent miss responses. The screenshot captures that transition. This checks the actual response after the notification rather than treating the notification alone as evidence.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=104" target="_blank" title="">ols-cache-hit-branded-20261012.jpg</a> (Size: 73 KB / Downloads: 11)
<!-- end: postbit_attachments_attachment --><br />
<br />
After a purge, allow the site to generate fresh eligible responses and recheck for hits before declaring it warmed again. We did not measure a purge latency guarantee or performance improvement. Do not use Empty Entire Cache as a routine substitute for the narrower plugin/page purge; its scope is broader.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Check normal website behavior</span><br />
Open a post and a standalone page over HTTPS. In the lab, /hello-world/ and /sample-page/ rendered successfully on OpenLiteSpeed. We also opened the dashboard and uploaded an original branded JPEG through WordPress; its public HTTPS image loaded at its original dimensions.<br />
<br />
For a real site, check logged-in and logged-out behavior separately and test any forms, carts or personalized screens before keeping new cache settings in production.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">7. Disable caching before an engine return test</span><br />
We set Enable Cache to OFF and saved the setting, then deactivated LiteSpeed Cache through Plugins → Installed Plugins. The plugin remained installed for future lab testing. We used aaPanel's native Rollback and a validated Nginx reload, then verified WordPress reported nginx/1.30.5 with fpm-fcgi SAPI.<br />
<br />
Anonymous HTTPS requests still returned HTTP 200, but no longer reported a LiteSpeed cache hit/miss header. Public content and the uploaded image remained accessible. The lab is left on Nginx with LiteSpeed Cache inactive.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">What this test proves</span><br />
The official plugin installed and activated, public-page settings saved, anonymous requests received cache hits, and the homepage purge was followed by misses. Website content/media checks and the return to PHP-FPM passed. This is a tested setup and verification guide, not a speed benchmark or a recommendation to cache every URL.<br />
<br />
References: <a href="https://wordpress.org/plugins/litespeed-cache/" target="_blank" rel="noopener" class="mycode_url">official WordPress plugin listing</a>, <a href="https://docs.litespeedtech.com/lscache/lscwp/installation/" target="_blank" rel="noopener" class="mycode_url">LiteSpeed installation/cache verification</a> and <a href="https://docs.litespeedtech.com/lscache/lscwp/troubleshoot/" target="_blank" rel="noopener" class="mycode_url">cache troubleshooting</a>. Screenshots are original © AdminsForum lab captures.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Set WordPress Permalinks in aaPanel and Check Nginx Rewrite Rules]]></title>
			<link>https://adminsforum.com/Thread-guide-set-wordpress-permalinks-in-aapanel-and-check-nginx-rewrite-rules</link>
			<pubDate>Tue, 13 Oct 2026 00:25:46 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-set-wordpress-permalinks-in-aapanel-and-check-nginx-rewrite-rules</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">Quick answer</span><br />
For a new WordPress website, open <span style="font-weight: bold;" class="mycode_b">Settings → Permalinks</span>, choose <span style="font-weight: bold;" class="mycode_b">Post name</span> and click <span style="font-weight: bold;" class="mycode_b">Save Changes</span>. Then open an actual published post. On Nginx, the site also needs a WordPress routing rule so URLs such as /hello-world/ reach index.php.<br />
<br />
This walkthrough was tested on our isolated AdminsForum lab on 12 October 2026: aaPanel 8.0.6, Nginx 1.30.5, PHP 8.5 and WordPress 7.1.3. We changed Plain to Post name and opened the resulting published post successfully. The required rewrite rule was already present; we inspected it rather than replacing a working configuration.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Before you start</span><ul class="mycode_list"><li>WordPress must already be installed and accessible over HTTPS. See <a href="https://adminsforum.com/Thread-guide-install-wordpress-with-aapanel-wp-toolkit-free-edition" target="_blank" rel="noopener" class="mycode_url">our WP Toolkit installation guide</a>.<br />
</li>
<li>Sign in as a WordPress administrator. The aaPanel account and WordPress account are separate.<br />
</li>
<li>Have a current files-and-database backup. See <a href="https://adminsforum.com/Thread-guide-back-up-wordpress-with-aapanel-wp-toolkit" target="_blank" rel="noopener" class="mycode_url">our backup guide</a>.<br />
</li>
<li>For an established site, plan redirects from existing URLs before changing the structure. Do this on staging first; existing bookmarks and external links can depend on the old URLs.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">1. Open the permalink settings</span><br />
In the WordPress dashboard, expand <span style="font-weight: bold;" class="mycode_b">Settings</span> and click <span style="font-weight: bold;" class="mycode_b">Permalinks</span>. Our fresh installation used Plain, which creates a URL such as <a href="https://example.com/?p=123" target="_blank" rel="noopener" class="mycode_url">https://example.com/?p=123</a>.<br />
<br />
Choose <span style="font-weight: bold;" class="mycode_b">Post name</span> for the /sample-post/ structure. The Custom Structure field should show <br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>/%postname%/</code></div></div>Do not enter the whole domain in that field. Leave Category base and Tag base alone unless you are deliberately changing archive URLs.<br />
<br />
The screenshot shows the resulting saved configuration: marker 1 identifies Permalinks, marker 2 identifies Post name and marker 3 identifies the confirmation message.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=73" target="_blank" title="">wp-permalinks-saved-branded-20261012.jpg</a> (Size: 174.47 KB / Downloads: 9)
<!-- end: postbit_attachments_attachment --><br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Save and check the confirmation</span><br />
Scroll to the bottom and click <span style="font-weight: bold;" class="mycode_b">Save Changes</span>. Wait for <span style="font-weight: bold;" class="mycode_b">Permalink structure updated</span>. Reload this settings page and confirm Post name remains selected. Selecting the radio button without saving does not update the site.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=74" target="_blank" title="">wp-permalinks-savebutton-branded-20261012.jpg</a> (Size: 106.02 KB / Downloads: 8)
<!-- end: postbit_attachments_attachment --><br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Check the Nginx routing in aaPanel</span><br />
For a site created through WP Toolkit, go to <span style="font-weight: bold;" class="mycode_b">WP Toolkit → your website → Modify → Config → URL rewrite</span>. For a manually created PHP site, open that website's configuration under Website and look for URL rewrite.<br />
<br />
Our root-installed WordPress site used this working rule:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>location /
{
    try_files &#36;uri &#36;uri/ /index.php?&#36;args;
}
rewrite /wp-admin&#36; &#36;scheme://&#36;host&#36;uri/ permanent;</code></div></div>The try_files line serves real files/directories first and sends other requests to WordPress's index.php, preserving the query string. The wp-admin rule adds the trailing slash to that administration URL.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=75" target="_blank" title="">wp-permalinks-rewrite-branded-20261012.jpg</a> (Size: 112.91 KB / Downloads: 8)
<!-- end: postbit_attachments_attachment --><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Keep an already working rule.</span> If yours is missing and pretty URLs return 404, first save a copy of the existing rule, then use the WordPress template offered by your aaPanel installation for the correct web server and site layout. Review it before saving. Do not paste a second location / block into a configuration that already has one. A WordPress installation in a subdirectory needs rules for that layout; the root-site example above is not a universal replacement.<br />
<br />
Nginx does not read Apache .htaccess rules. If you run Apache or OpenLiteSpeed, use the configuration appropriate to that server rather than pasting this Nginx block. This tutorial tested Nginx only.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Test real content, not just the homepage</span><br />
Open the public homepage and click the title of a published post. In our lab, Hello world! changed to <br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>https://wp.adminslab.com/hello-world/</code></div></div>and opened with its content and comments intact.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=76" target="_blank" title="">wp-permalinks-result-branded-20261012.jpg</a> (Size: 81.73 KB / Downloads: 8)
<!-- end: postbit_attachments_attachment --><br />
<br />
Also open a published page, such as Sample Page, directly from the navigation. Test in a logged-out/private window and refresh a deep URL directly. A working homepage alone does not prove that rewritten URLs work.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">If you get a 404</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Homepage works, every pretty URL fails:</span> check the web-server rewrite rule and whether it belongs to the same domain/site root you changed.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Only one URL fails:</span> check its actual slug, publication status and copied URL. A draft page is not a public page.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Changes look stale:</span> clear any relevant page cache/CDN cache, then retest the exact URL.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">The panel refuses the configuration:</span> restore the saved rule and inspect the error; do not repeatedly add duplicate blocks.<br />
</li>
</ul>
For a new test site, selecting Plain again and saving can help distinguish a rewrite problem from an application problem. On a live site, use your rollback plan so a second URL change does not add confusion.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Does this guarantee better Google rankings?</span><br />
No. Readable URLs help visitors understand links, but rankings still depend on useful content, indexing and the rest of the site. Avoid repeated permalink changes just to chase SEO.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Our verified result</span><br />
Post name saved successfully; /hello-world/ opened the published post; the Nginx WordPress rule was visible in aaPanel. We did not simulate a broken rule or test an Apache/OpenLiteSpeed migration in this walkthrough.<br />
<br />
Reference: <a href="https://wordpress.org/documentation/article/customize-permalinks/" target="_blank" rel="noopener" class="mycode_url">WordPress permalink documentation</a>. Screenshots are original AdminsForum lab captures.]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">Quick answer</span><br />
For a new WordPress website, open <span style="font-weight: bold;" class="mycode_b">Settings → Permalinks</span>, choose <span style="font-weight: bold;" class="mycode_b">Post name</span> and click <span style="font-weight: bold;" class="mycode_b">Save Changes</span>. Then open an actual published post. On Nginx, the site also needs a WordPress routing rule so URLs such as /hello-world/ reach index.php.<br />
<br />
This walkthrough was tested on our isolated AdminsForum lab on 12 October 2026: aaPanel 8.0.6, Nginx 1.30.5, PHP 8.5 and WordPress 7.1.3. We changed Plain to Post name and opened the resulting published post successfully. The required rewrite rule was already present; we inspected it rather than replacing a working configuration.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Before you start</span><ul class="mycode_list"><li>WordPress must already be installed and accessible over HTTPS. See <a href="https://adminsforum.com/Thread-guide-install-wordpress-with-aapanel-wp-toolkit-free-edition" target="_blank" rel="noopener" class="mycode_url">our WP Toolkit installation guide</a>.<br />
</li>
<li>Sign in as a WordPress administrator. The aaPanel account and WordPress account are separate.<br />
</li>
<li>Have a current files-and-database backup. See <a href="https://adminsforum.com/Thread-guide-back-up-wordpress-with-aapanel-wp-toolkit" target="_blank" rel="noopener" class="mycode_url">our backup guide</a>.<br />
</li>
<li>For an established site, plan redirects from existing URLs before changing the structure. Do this on staging first; existing bookmarks and external links can depend on the old URLs.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">1. Open the permalink settings</span><br />
In the WordPress dashboard, expand <span style="font-weight: bold;" class="mycode_b">Settings</span> and click <span style="font-weight: bold;" class="mycode_b">Permalinks</span>. Our fresh installation used Plain, which creates a URL such as <a href="https://example.com/?p=123" target="_blank" rel="noopener" class="mycode_url">https://example.com/?p=123</a>.<br />
<br />
Choose <span style="font-weight: bold;" class="mycode_b">Post name</span> for the /sample-post/ structure. The Custom Structure field should show <br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>/%postname%/</code></div></div>Do not enter the whole domain in that field. Leave Category base and Tag base alone unless you are deliberately changing archive URLs.<br />
<br />
The screenshot shows the resulting saved configuration: marker 1 identifies Permalinks, marker 2 identifies Post name and marker 3 identifies the confirmation message.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=73" target="_blank" title="">wp-permalinks-saved-branded-20261012.jpg</a> (Size: 174.47 KB / Downloads: 9)
<!-- end: postbit_attachments_attachment --><br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Save and check the confirmation</span><br />
Scroll to the bottom and click <span style="font-weight: bold;" class="mycode_b">Save Changes</span>. Wait for <span style="font-weight: bold;" class="mycode_b">Permalink structure updated</span>. Reload this settings page and confirm Post name remains selected. Selecting the radio button without saving does not update the site.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=74" target="_blank" title="">wp-permalinks-savebutton-branded-20261012.jpg</a> (Size: 106.02 KB / Downloads: 8)
<!-- end: postbit_attachments_attachment --><br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Check the Nginx routing in aaPanel</span><br />
For a site created through WP Toolkit, go to <span style="font-weight: bold;" class="mycode_b">WP Toolkit → your website → Modify → Config → URL rewrite</span>. For a manually created PHP site, open that website's configuration under Website and look for URL rewrite.<br />
<br />
Our root-installed WordPress site used this working rule:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>location /
{
    try_files &#36;uri &#36;uri/ /index.php?&#36;args;
}
rewrite /wp-admin&#36; &#36;scheme://&#36;host&#36;uri/ permanent;</code></div></div>The try_files line serves real files/directories first and sends other requests to WordPress's index.php, preserving the query string. The wp-admin rule adds the trailing slash to that administration URL.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=75" target="_blank" title="">wp-permalinks-rewrite-branded-20261012.jpg</a> (Size: 112.91 KB / Downloads: 8)
<!-- end: postbit_attachments_attachment --><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Keep an already working rule.</span> If yours is missing and pretty URLs return 404, first save a copy of the existing rule, then use the WordPress template offered by your aaPanel installation for the correct web server and site layout. Review it before saving. Do not paste a second location / block into a configuration that already has one. A WordPress installation in a subdirectory needs rules for that layout; the root-site example above is not a universal replacement.<br />
<br />
Nginx does not read Apache .htaccess rules. If you run Apache or OpenLiteSpeed, use the configuration appropriate to that server rather than pasting this Nginx block. This tutorial tested Nginx only.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Test real content, not just the homepage</span><br />
Open the public homepage and click the title of a published post. In our lab, Hello world! changed to <br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>https://wp.adminslab.com/hello-world/</code></div></div>and opened with its content and comments intact.<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=76" target="_blank" title="">wp-permalinks-result-branded-20261012.jpg</a> (Size: 81.73 KB / Downloads: 8)
<!-- end: postbit_attachments_attachment --><br />
<br />
Also open a published page, such as Sample Page, directly from the navigation. Test in a logged-out/private window and refresh a deep URL directly. A working homepage alone does not prove that rewritten URLs work.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">If you get a 404</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Homepage works, every pretty URL fails:</span> check the web-server rewrite rule and whether it belongs to the same domain/site root you changed.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Only one URL fails:</span> check its actual slug, publication status and copied URL. A draft page is not a public page.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Changes look stale:</span> clear any relevant page cache/CDN cache, then retest the exact URL.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">The panel refuses the configuration:</span> restore the saved rule and inspect the error; do not repeatedly add duplicate blocks.<br />
</li>
</ul>
For a new test site, selecting Plain again and saving can help distinguish a rewrite problem from an application problem. On a live site, use your rollback plan so a second URL change does not add confusion.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Does this guarantee better Google rankings?</span><br />
No. Readable URLs help visitors understand links, but rankings still depend on useful content, indexing and the rest of the site. Avoid repeated permalink changes just to chase SEO.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Our verified result</span><br />
Post name saved successfully; /hello-world/ opened the published post; the Nginx WordPress rule was visible in aaPanel. We did not simulate a broken rule or test an Apache/OpenLiteSpeed migration in this walkthrough.<br />
<br />
Reference: <a href="https://wordpress.org/documentation/article/customize-permalinks/" target="_blank" rel="noopener" class="mycode_url">WordPress permalink documentation</a>. Screenshots are original AdminsForum lab captures.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Set a WordPress Featured Image on an aaPanel Website]]></title>
			<link>https://adminsforum.com/Thread-guide-set-a-wordpress-featured-image-on-an-aapanel-website</link>
			<pubDate>Mon, 12 Oct 2026 20:50:18 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-set-a-wordpress-featured-image-on-an-aapanel-website</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">How do you set a featured image in WordPress?</span><br />
Open the page or post editor, select the Page or Post settings tab and click Set featured image. Choose an image from Media Library, confirm the selection, then save the content and preview it. Where it appears depends on the theme and template.<br />
<br />
We tested this on the draft page created in <a href="https://adminsforum.com/Thread-guide-create-and-preview-a-wordpress-page-on-an-aapanel-website" target="_blank" rel="noopener" class="mycode_url">our page-and-preview walkthrough</a>. The aaPanel-hosted lab runs WordPress 7.1.3 with the Twenty Twenty-Five theme. The image selection persisted after reloading the editor and appeared in the draft preview.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Featured image versus an Image block</span><br />
A featured image is associated with the page or post as a whole. Themes may display it in a header, article card or another template location. An Image block places a picture at a specific position inside the content.<br />
<br />
Selecting a featured image does not automatically insert an Image block into your paragraph. It also does not guarantee that your SEO plugin will use it as the social-sharing image. Review the theme and any SEO/sharing settings separately.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Open the content editor</span><br />
In WordPress choose Pages → All Pages or Posts → All Posts, then Edit the correct item. We used our saved About-this-website draft rather than changing a published page.<br />
<br />
If the settings sidebar is closed, use <span style="font-weight: bold;" class="mycode_b">Settings</span> in the editor’s top bar. Select the <span style="font-weight: bold;" class="mycode_b">Page</span> or <span style="font-weight: bold;" class="mycode_b">Post</span> tab instead of Block. In our page editor the sidebar offered <span style="font-weight: bold;" class="mycode_b">Set featured image</span>.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Choose an existing image</span><br />
Click Set featured image. The Featured image dialog offers Upload files and Media Library. We chose <span style="font-weight: bold;" class="mycode_b">Media Library</span> because the demonstration image was already uploaded.<br />
<br />
Select the exact image. Check its title, thumbnail and attachment information before confirming. If your library is large, use Search media and the date/type filters to locate the intended item.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=66" target="_blank" title="">wp-featured-select-20261012.jpg</a> (Size: 134.08 KB / Downloads: 10)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Our selected AdminsForum image in the Featured image dialog.</span><br />
<br />
For uploading a new item, follow <a href="https://adminsforum.com/Thread-guide-upload-images-to-wordpress-on-an-aapanel-website" target="_blank" rel="noopener" class="mycode_url">our WordPress media-upload guide</a>. Review screenshots for private information before uploading, and only publish images you are allowed to use.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Set the featured image</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Set featured image</span> in the dialog. The dialog closes and the editor sidebar should show a thumbnail plus Replace and Remove controls.<br />
<br />
Our image already had useful alternative text saved in Media Library. Review image descriptions for the context in which the picture is used. Avoid using a keyword list as alternative text.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Save and verify persistence</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Save draft</span> when editing a draft. Wait for the save to finish. For existing public content the save control may differ; review what action it will perform before submitting.<br />
<br />
Reload or reopen the editor after saving. We verified that the selected image remained associated with the draft after the editor reloaded.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=67" target="_blank" title="">wp-featured-saved-20261012.jpg</a> (Size: 134.48 KB / Downloads: 9)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">The saved editor shows the featured image and keeps the page status as Draft.</span><br />
<br />
An image visible immediately after selection is not proof that it was saved. Confirm the saved state and reopen the editor when you need to be certain.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Preview the page in its theme</span><br />
Use <span style="font-weight: bold;" class="mycode_b">View → Preview in new tab</span>. Inspect where the theme places the image, how it scales and whether the crop is suitable for the page. Check the layout on relevant screen sizes before publishing.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=68" target="_blank" title="">wp-featured-preview-20261012.jpg</a> (Size: 128.23 KB / Downloads: 8)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Our Twenty Twenty-Five draft preview displayed the selected featured image.</span><br />
<br />
Other themes or templates may not display a featured image in the same location—or may not display it at all. If it is saved but absent from the page, inspect the template before assuming the upload failed.<br />
<br />
The preview is not the same as publishing. Our demonstration page stayed a draft. The uploaded image itself already had a direct file URL; draft content should not be treated as private file storage.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Replace or remove the association</span><br />
The sidebar exposes Replace and Remove controls. Replace lets you choose another featured image. Remove clears its association with this item; it is different from deleting the file from Media Library.<br />
<br />
We did not test those removal actions in this walkthrough. Before deleting a media file, check whether other pages use it. Deleting the shared file can affect more than one content item.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Troubleshooting</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">No Set featured image control:</span> confirm that the document settings tab is selected, and check whether your theme/content type supports featured images.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Selection disappears after reload:</span> inspect whether the save completed, whether the session expired and whether the editor reported an error.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Image saved but not shown in preview:</span> review the theme’s page/post template and cache behavior.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Image crop is unsuitable:</span> choose artwork that fits the template’s display area and inspect the actual preview before publication.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Social preview still uses another image:</span> check your SEO/sharing configuration separately; featured-image selection alone does not verify Open Graph output.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Verified result</span><br />
We selected an existing media item, assigned it as the featured image, saved the draft, verified the selection after reloading and confirmed the image in the theme preview. We did not publish the lab page, replace/delete the attachment or verify social-sharing metadata for that WordPress page.<br />
<br />
Screenshots and results are from our own AdminsForum lab.]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">How do you set a featured image in WordPress?</span><br />
Open the page or post editor, select the Page or Post settings tab and click Set featured image. Choose an image from Media Library, confirm the selection, then save the content and preview it. Where it appears depends on the theme and template.<br />
<br />
We tested this on the draft page created in <a href="https://adminsforum.com/Thread-guide-create-and-preview-a-wordpress-page-on-an-aapanel-website" target="_blank" rel="noopener" class="mycode_url">our page-and-preview walkthrough</a>. The aaPanel-hosted lab runs WordPress 7.1.3 with the Twenty Twenty-Five theme. The image selection persisted after reloading the editor and appeared in the draft preview.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Featured image versus an Image block</span><br />
A featured image is associated with the page or post as a whole. Themes may display it in a header, article card or another template location. An Image block places a picture at a specific position inside the content.<br />
<br />
Selecting a featured image does not automatically insert an Image block into your paragraph. It also does not guarantee that your SEO plugin will use it as the social-sharing image. Review the theme and any SEO/sharing settings separately.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Open the content editor</span><br />
In WordPress choose Pages → All Pages or Posts → All Posts, then Edit the correct item. We used our saved About-this-website draft rather than changing a published page.<br />
<br />
If the settings sidebar is closed, use <span style="font-weight: bold;" class="mycode_b">Settings</span> in the editor’s top bar. Select the <span style="font-weight: bold;" class="mycode_b">Page</span> or <span style="font-weight: bold;" class="mycode_b">Post</span> tab instead of Block. In our page editor the sidebar offered <span style="font-weight: bold;" class="mycode_b">Set featured image</span>.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Choose an existing image</span><br />
Click Set featured image. The Featured image dialog offers Upload files and Media Library. We chose <span style="font-weight: bold;" class="mycode_b">Media Library</span> because the demonstration image was already uploaded.<br />
<br />
Select the exact image. Check its title, thumbnail and attachment information before confirming. If your library is large, use Search media and the date/type filters to locate the intended item.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=66" target="_blank" title="">wp-featured-select-20261012.jpg</a> (Size: 134.08 KB / Downloads: 10)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Our selected AdminsForum image in the Featured image dialog.</span><br />
<br />
For uploading a new item, follow <a href="https://adminsforum.com/Thread-guide-upload-images-to-wordpress-on-an-aapanel-website" target="_blank" rel="noopener" class="mycode_url">our WordPress media-upload guide</a>. Review screenshots for private information before uploading, and only publish images you are allowed to use.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Set the featured image</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Set featured image</span> in the dialog. The dialog closes and the editor sidebar should show a thumbnail plus Replace and Remove controls.<br />
<br />
Our image already had useful alternative text saved in Media Library. Review image descriptions for the context in which the picture is used. Avoid using a keyword list as alternative text.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Save and verify persistence</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Save draft</span> when editing a draft. Wait for the save to finish. For existing public content the save control may differ; review what action it will perform before submitting.<br />
<br />
Reload or reopen the editor after saving. We verified that the selected image remained associated with the draft after the editor reloaded.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=67" target="_blank" title="">wp-featured-saved-20261012.jpg</a> (Size: 134.48 KB / Downloads: 9)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">The saved editor shows the featured image and keeps the page status as Draft.</span><br />
<br />
An image visible immediately after selection is not proof that it was saved. Confirm the saved state and reopen the editor when you need to be certain.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Preview the page in its theme</span><br />
Use <span style="font-weight: bold;" class="mycode_b">View → Preview in new tab</span>. Inspect where the theme places the image, how it scales and whether the crop is suitable for the page. Check the layout on relevant screen sizes before publishing.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=68" target="_blank" title="">wp-featured-preview-20261012.jpg</a> (Size: 128.23 KB / Downloads: 8)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Our Twenty Twenty-Five draft preview displayed the selected featured image.</span><br />
<br />
Other themes or templates may not display a featured image in the same location—or may not display it at all. If it is saved but absent from the page, inspect the template before assuming the upload failed.<br />
<br />
The preview is not the same as publishing. Our demonstration page stayed a draft. The uploaded image itself already had a direct file URL; draft content should not be treated as private file storage.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Replace or remove the association</span><br />
The sidebar exposes Replace and Remove controls. Replace lets you choose another featured image. Remove clears its association with this item; it is different from deleting the file from Media Library.<br />
<br />
We did not test those removal actions in this walkthrough. Before deleting a media file, check whether other pages use it. Deleting the shared file can affect more than one content item.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Troubleshooting</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">No Set featured image control:</span> confirm that the document settings tab is selected, and check whether your theme/content type supports featured images.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Selection disappears after reload:</span> inspect whether the save completed, whether the session expired and whether the editor reported an error.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Image saved but not shown in preview:</span> review the theme’s page/post template and cache behavior.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Image crop is unsuitable:</span> choose artwork that fits the template’s display area and inspect the actual preview before publication.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Social preview still uses another image:</span> check your SEO/sharing configuration separately; featured-image selection alone does not verify Open Graph output.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Verified result</span><br />
We selected an existing media item, assigned it as the featured image, saved the draft, verified the selection after reloading and confirmed the image in the theme preview. We did not publish the lab page, replace/delete the attachment or verify social-sharing metadata for that WordPress page.<br />
<br />
Screenshots and results are from our own AdminsForum lab.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Create and Preview a WordPress Page on an aaPanel Website]]></title>
			<link>https://adminsforum.com/Thread-guide-create-and-preview-a-wordpress-page-on-an-aapanel-website</link>
			<pubDate>Mon, 12 Oct 2026 20:48:17 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-create-and-preview-a-wordpress-page-on-an-aapanel-website</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">How do you create a WordPress page without publishing it immediately?</span><br />
Open Pages → Add Page, enter a title, add your content blocks and choose Save draft. Use View → Preview in new tab to see the page in the website’s theme. Previewing a draft does not publish it to visitors.<br />
<br />
We tested this workflow on wp.adminslab.com, our aaPanel-hosted WordPress 7.1.3 lab. We saved a real draft page and confirmed its title and paragraph rendered in the Twenty Twenty-Five theme. The test page remains a draft.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Choose a page rather than a post</span><br />
Sign in to WordPress. Pages are useful for content such as About or Contact pages. Posts are usually used for dated articles and a blog feed. For this demonstration choose <span style="font-weight: bold;" class="mycode_b">Pages → Add Page</span>.<br />
<br />
The editor can offer starter patterns. In our test, a Choose a pattern dialog appeared. We used its <span style="font-weight: bold;" class="mycode_b">Close</span> button to start with a blank page. You can choose a pattern when it suits your design, but it is not required for adding basic content.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=63" target="_blank" title="">wp-page-blank-20261012.jpg</a> (Size: 82.88 KB / Downloads: 6)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">The blank page editor before adding our title and paragraph.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Enter a clear page title</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Add title</span> and type the name of the page. We used <span style="font-weight: bold;" class="mycode_b">AdminsForum Lab — About this website</span>. Use a title that describes what visitors will find rather than an unexplained placeholder.<br />
<br />
The title becomes part of the page content and helps identify it in your administrator page list. Do not confuse it with an independently configured SEO title or meta description supplied by an SEO plugin.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Add the first content block</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Type / to choose a block</span> or Add default block beneath the title. The editor creates a Paragraph block. Write a short introduction.<br />
<br />
Our demonstration paragraph explains that the website is an AdminsForum tutorial lab used to test aaPanel and WordPress workflows. We kept the example simple so the saved result could be verified without extra plugins or design changes.<br />
<br />
You can add more blocks later. Use headings to divide substantial content, and an Image block for pictures. A page made of one giant paragraph is harder to read and maintain than a few purposeful sections.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Save the draft</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Save draft</span> in the top bar. Wait for the operation to finish. Our editor displayed <span style="font-weight: bold;" class="mycode_b">Draft saved</span>.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=64" target="_blank" title="">wp-page-draft-saved-20261012.jpg</a> (Size: 145.38 KB / Downloads: 6)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Our saved draft contains a title and paragraph. The page has not been published.</span><br />
<br />
Do not rely on having text visible in the editor as proof that it was saved. Confirm the saved state before closing the tab. The Publish button is a separate action, and we did not use it in this test.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Open the website preview</span><br />
Click <span style="font-weight: bold;" class="mycode_b">View</span> in the editor’s top bar. The menu in our version offers desktop, tablet and mobile preview options, plus <span style="font-weight: bold;" class="mycode_b">Preview in new tab</span>. Choose Preview in new tab and wait for the page to render.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=65" target="_blank" title="">wp-page-preview-20261012.jpg</a> (Size: 120.1 KB / Downloads: 8)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">The draft preview rendered our title and paragraph in the website’s actual theme.</span><br />
<br />
Check the wording, spacing and page structure. Review the layout on the screen sizes relevant to your visitors. A preview is a useful check, but it does not prove that navigation menus, forms or every device configuration will work.<br />
<br />
The preview may require your logged-in session. Do not treat its address as the permanent public page URL or share URLs containing private preview tokens unnecessarily.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Return to editing</span><br />
Go back to the editor tab, adjust the content and save again when needed. Preview the new version rather than relying on an older open preview tab.<br />
<br />
A draft can remain unfinished while you gather content or review the design. Saving it does not automatically put it in the site’s header menu or make it the homepage. Menu placement and homepage selection are separate tasks.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">7. Prepare for publication when the page is ready</span><br />
Before publishing a real page, check its content, links, image descriptions, visibility and intended URL. Remove placeholder text and verify any promised contact details or functionality.<br />
<br />
WordPress’s Publish controls allow you to review the publication settings. Publishing, scheduling or changing visibility should match your intended audience. This guide stops at a saved, previewed draft because that is the workflow we tested; it does not claim a public page was published.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Troubleshooting</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">The pattern dialog covers the editor:</span> choose a suitable pattern or close the dialog to start blank.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Save draft fails:</span> preserve your text, check the error and session, and confirm whether the REST request or server response failed before continuing.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Preview shows old content:</span> save the current draft, reopen or refresh its preview and check whether you are viewing the correct page.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">The page is not in navigation:</span> a draft is not public navigation content. Even after publication, menu/homepage placement may need separate configuration.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Editor labels differ:</span> WordPress versions and themes can change the interface. Match the action—save, view or publish—rather than blindly clicking the same screen position.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Verified result</span><br />
We created the lab page, saved its title and paragraph as a draft and confirmed its preview rendered in the original Twenty Twenty-Five theme. We did not publish it, change the homepage or edit navigation menus.<br />
<br />
Screenshots and results are from the AdminsForum lab.]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">How do you create a WordPress page without publishing it immediately?</span><br />
Open Pages → Add Page, enter a title, add your content blocks and choose Save draft. Use View → Preview in new tab to see the page in the website’s theme. Previewing a draft does not publish it to visitors.<br />
<br />
We tested this workflow on wp.adminslab.com, our aaPanel-hosted WordPress 7.1.3 lab. We saved a real draft page and confirmed its title and paragraph rendered in the Twenty Twenty-Five theme. The test page remains a draft.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Choose a page rather than a post</span><br />
Sign in to WordPress. Pages are useful for content such as About or Contact pages. Posts are usually used for dated articles and a blog feed. For this demonstration choose <span style="font-weight: bold;" class="mycode_b">Pages → Add Page</span>.<br />
<br />
The editor can offer starter patterns. In our test, a Choose a pattern dialog appeared. We used its <span style="font-weight: bold;" class="mycode_b">Close</span> button to start with a blank page. You can choose a pattern when it suits your design, but it is not required for adding basic content.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=63" target="_blank" title="">wp-page-blank-20261012.jpg</a> (Size: 82.88 KB / Downloads: 6)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">The blank page editor before adding our title and paragraph.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Enter a clear page title</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Add title</span> and type the name of the page. We used <span style="font-weight: bold;" class="mycode_b">AdminsForum Lab — About this website</span>. Use a title that describes what visitors will find rather than an unexplained placeholder.<br />
<br />
The title becomes part of the page content and helps identify it in your administrator page list. Do not confuse it with an independently configured SEO title or meta description supplied by an SEO plugin.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Add the first content block</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Type / to choose a block</span> or Add default block beneath the title. The editor creates a Paragraph block. Write a short introduction.<br />
<br />
Our demonstration paragraph explains that the website is an AdminsForum tutorial lab used to test aaPanel and WordPress workflows. We kept the example simple so the saved result could be verified without extra plugins or design changes.<br />
<br />
You can add more blocks later. Use headings to divide substantial content, and an Image block for pictures. A page made of one giant paragraph is harder to read and maintain than a few purposeful sections.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Save the draft</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Save draft</span> in the top bar. Wait for the operation to finish. Our editor displayed <span style="font-weight: bold;" class="mycode_b">Draft saved</span>.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=64" target="_blank" title="">wp-page-draft-saved-20261012.jpg</a> (Size: 145.38 KB / Downloads: 6)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Our saved draft contains a title and paragraph. The page has not been published.</span><br />
<br />
Do not rely on having text visible in the editor as proof that it was saved. Confirm the saved state before closing the tab. The Publish button is a separate action, and we did not use it in this test.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Open the website preview</span><br />
Click <span style="font-weight: bold;" class="mycode_b">View</span> in the editor’s top bar. The menu in our version offers desktop, tablet and mobile preview options, plus <span style="font-weight: bold;" class="mycode_b">Preview in new tab</span>. Choose Preview in new tab and wait for the page to render.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=65" target="_blank" title="">wp-page-preview-20261012.jpg</a> (Size: 120.1 KB / Downloads: 8)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">The draft preview rendered our title and paragraph in the website’s actual theme.</span><br />
<br />
Check the wording, spacing and page structure. Review the layout on the screen sizes relevant to your visitors. A preview is a useful check, but it does not prove that navigation menus, forms or every device configuration will work.<br />
<br />
The preview may require your logged-in session. Do not treat its address as the permanent public page URL or share URLs containing private preview tokens unnecessarily.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Return to editing</span><br />
Go back to the editor tab, adjust the content and save again when needed. Preview the new version rather than relying on an older open preview tab.<br />
<br />
A draft can remain unfinished while you gather content or review the design. Saving it does not automatically put it in the site’s header menu or make it the homepage. Menu placement and homepage selection are separate tasks.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">7. Prepare for publication when the page is ready</span><br />
Before publishing a real page, check its content, links, image descriptions, visibility and intended URL. Remove placeholder text and verify any promised contact details or functionality.<br />
<br />
WordPress’s Publish controls allow you to review the publication settings. Publishing, scheduling or changing visibility should match your intended audience. This guide stops at a saved, previewed draft because that is the workflow we tested; it does not claim a public page was published.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Troubleshooting</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">The pattern dialog covers the editor:</span> choose a suitable pattern or close the dialog to start blank.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Save draft fails:</span> preserve your text, check the error and session, and confirm whether the REST request or server response failed before continuing.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Preview shows old content:</span> save the current draft, reopen or refresh its preview and check whether you are viewing the correct page.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">The page is not in navigation:</span> a draft is not public navigation content. Even after publication, menu/homepage placement may need separate configuration.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Editor labels differ:</span> WordPress versions and themes can change the interface. Match the action—save, view or publish—rather than blindly clicking the same screen position.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Verified result</span><br />
We created the lab page, saved its title and paragraph as a draft and confirmed its preview rendered in the original Twenty Twenty-Five theme. We did not publish it, change the homepage or edit navigation menus.<br />
<br />
Screenshots and results are from the AdminsForum lab.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Upload Images to WordPress on an aaPanel Website]]></title>
			<link>https://adminsforum.com/Thread-guide-upload-images-to-wordpress-on-an-aapanel-website</link>
			<pubDate>Mon, 12 Oct 2026 20:46:04 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-upload-images-to-wordpress-on-an-aapanel-website</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">How do you upload an image to WordPress on aaPanel?</span><br />
Use WordPress → Media → Add Media File, select your image and wait for the upload to finish. Open Edit to add a meaningful title, alternative text and caption, then save and verify the file URL. You do not need to open aaPanel’s file manager for an ordinary WordPress media upload.<br />
<br />
We tested this on our aaPanel-hosted wp.adminslab.com website running WordPress 7.1.3 and PHP 8.5.11. The JPEG upload, attachment details and direct HTTPS image URL were verified.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Prepare the image</span><br />
Use an image you have permission to publish. Give it a clear filename before uploading and choose dimensions appropriate for its purpose. Avoid uploading camera originals when a smaller image will do. Review screenshots for passwords, tokens, private messages and other information that should not become public.<br />
<br />
For this demonstration we used our own AdminsForum-branded Site Health screenshot. A copyright mark identifies the source; it does not prevent someone from copying the file.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Open the uploader</span><br />
Sign in to your WordPress administrator dashboard and select <span style="font-weight: bold;" class="mycode_b">Media → Add Media File</span>. Our screen offered Select Files and displayed a <span style="font-weight: bold;" class="mycode_b">50 MB</span> maximum upload size.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=60" target="_blank" title="">wp-media-upload-before-20261012.jpg</a> (Size: 102.69 KB / Downloads: 7)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">WordPress’s upload screen on our lab. Your server may have a different limit.</span><br />
<br />
The number is a maximum, not a target image size. Small, appropriately sized images usually transfer more efficiently than large originals. If your file exceeds the limit, optimize it first or review the website’s PHP configuration rather than assuming WordPress is broken.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Select and upload the file</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Select Files</span> and choose your image. Wait for the upload to complete. Do not close the tab while progress is running or retry repeatedly before the original operation finishes.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=61" target="_blank" title="">wp-media-upload-success-20261012.jpg</a> (Size: 120.51 KB / Downloads: 6)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Our uploaded file appears with Edit and Copy URL to clipboard actions.</span><br />
<br />
If the normal uploader fails, the screen also offers a <span style="font-weight: bold;" class="mycode_b">browser uploader</span>. That is an alternative upload interface, not a way to bypass server limits or file-type restrictions.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Add useful attachment details</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Edit</span> next to the uploaded file. On Edit Media, review:<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Title:</span> a useful name for finding the item in the library.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Alternative Text:</span> a concise description of what the image communicates. Avoid repeating a list of keywords.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Image Caption:</span> explanatory text that can be displayed with the image when the content layout uses a caption.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Description:</span> optional additional attachment information.<br />
</li>
</ul>
<br />
We set a readable title, described the visible Site Health result in Alternative Text and added a short lab caption. Then we clicked <span style="font-weight: bold;" class="mycode_b">Update</span>.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=62" target="_blank" title="">wp-media-details-saved-20261012.jpg</a> (Size: 201.13 KB / Downloads: 6)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Saved attachment details, file type, size, dimensions and File URL.</span><br />
<br />
Alternative text should match the image’s purpose in its eventual context. The interface notes that purely decorative images can have empty alternative text. A filename alone is often a poor description.<br />
<br />
Changing the media title does not automatically rename the uploaded file. Our filename remained unchanged after saving the title and caption.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Verify the actual file</span><br />
Review File URL and open it in a browser tab. Our JPG loaded successfully over HTTPS at its WordPress uploads URL. The attachment reported <span style="font-weight: bold;" class="mycode_b">1912 × 893 pixels</span> and <span style="font-weight: bold;" class="mycode_b">72 KB</span>. These are our example’s values, not recommended dimensions for every image.<br />
<br />
The file URL is different from an attachment-page permalink. The file URL points to the image itself; the attachment page may be a website page about that media item.<br />
<br />
Do not upload confidential files on the assumption that a draft post makes them private. In our test, the direct media URL was accessible. Use a suitable private-storage method for material that should not be public.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Use the image in content</span><br />
Uploading adds the image to Media Library; it does not automatically place it inside every page. In a WordPress page or post, add an Image block and choose the item from Media Library. Check its alternative text, displayed size and caption in that context, then preview the page.<br />
<br />
This walkthrough verified the upload and attachment details. Inserting the image into a page and publishing that page are separate content-editing steps.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Troubleshooting</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">File too large:</span> compare the file with the maximum shown, reduce its size where appropriate and confirm the PHP version/configuration serving the site before changing limits.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">File type rejected:</span> use a supported image format. Do not enable unrestricted uploads as a shortcut.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Upload succeeds but image does not load:</span> inspect the exact file URL, permissions and server response. Check cache or mixed-content issues without disabling HTTPS protections.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">A thumbnail looks different:</span> WordPress may create smaller image sizes. Review the size selected in the content block and compare it with the original.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Verified result</span><br />
Our image uploaded successfully, the title/alternative text/caption saved, and the direct HTTPS image loaded. No upload-limit setting, security restriction or server permission was changed. The demonstration file remains in the lab Media Library.<br />
<br />
Screenshots and results are from our own AdminsForum test website.]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">How do you upload an image to WordPress on aaPanel?</span><br />
Use WordPress → Media → Add Media File, select your image and wait for the upload to finish. Open Edit to add a meaningful title, alternative text and caption, then save and verify the file URL. You do not need to open aaPanel’s file manager for an ordinary WordPress media upload.<br />
<br />
We tested this on our aaPanel-hosted wp.adminslab.com website running WordPress 7.1.3 and PHP 8.5.11. The JPEG upload, attachment details and direct HTTPS image URL were verified.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Prepare the image</span><br />
Use an image you have permission to publish. Give it a clear filename before uploading and choose dimensions appropriate for its purpose. Avoid uploading camera originals when a smaller image will do. Review screenshots for passwords, tokens, private messages and other information that should not become public.<br />
<br />
For this demonstration we used our own AdminsForum-branded Site Health screenshot. A copyright mark identifies the source; it does not prevent someone from copying the file.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Open the uploader</span><br />
Sign in to your WordPress administrator dashboard and select <span style="font-weight: bold;" class="mycode_b">Media → Add Media File</span>. Our screen offered Select Files and displayed a <span style="font-weight: bold;" class="mycode_b">50 MB</span> maximum upload size.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=60" target="_blank" title="">wp-media-upload-before-20261012.jpg</a> (Size: 102.69 KB / Downloads: 7)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">WordPress’s upload screen on our lab. Your server may have a different limit.</span><br />
<br />
The number is a maximum, not a target image size. Small, appropriately sized images usually transfer more efficiently than large originals. If your file exceeds the limit, optimize it first or review the website’s PHP configuration rather than assuming WordPress is broken.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Select and upload the file</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Select Files</span> and choose your image. Wait for the upload to complete. Do not close the tab while progress is running or retry repeatedly before the original operation finishes.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=61" target="_blank" title="">wp-media-upload-success-20261012.jpg</a> (Size: 120.51 KB / Downloads: 6)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Our uploaded file appears with Edit and Copy URL to clipboard actions.</span><br />
<br />
If the normal uploader fails, the screen also offers a <span style="font-weight: bold;" class="mycode_b">browser uploader</span>. That is an alternative upload interface, not a way to bypass server limits or file-type restrictions.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Add useful attachment details</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Edit</span> next to the uploaded file. On Edit Media, review:<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Title:</span> a useful name for finding the item in the library.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Alternative Text:</span> a concise description of what the image communicates. Avoid repeating a list of keywords.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Image Caption:</span> explanatory text that can be displayed with the image when the content layout uses a caption.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Description:</span> optional additional attachment information.<br />
</li>
</ul>
<br />
We set a readable title, described the visible Site Health result in Alternative Text and added a short lab caption. Then we clicked <span style="font-weight: bold;" class="mycode_b">Update</span>.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=62" target="_blank" title="">wp-media-details-saved-20261012.jpg</a> (Size: 201.13 KB / Downloads: 6)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Saved attachment details, file type, size, dimensions and File URL.</span><br />
<br />
Alternative text should match the image’s purpose in its eventual context. The interface notes that purely decorative images can have empty alternative text. A filename alone is often a poor description.<br />
<br />
Changing the media title does not automatically rename the uploaded file. Our filename remained unchanged after saving the title and caption.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Verify the actual file</span><br />
Review File URL and open it in a browser tab. Our JPG loaded successfully over HTTPS at its WordPress uploads URL. The attachment reported <span style="font-weight: bold;" class="mycode_b">1912 × 893 pixels</span> and <span style="font-weight: bold;" class="mycode_b">72 KB</span>. These are our example’s values, not recommended dimensions for every image.<br />
<br />
The file URL is different from an attachment-page permalink. The file URL points to the image itself; the attachment page may be a website page about that media item.<br />
<br />
Do not upload confidential files on the assumption that a draft post makes them private. In our test, the direct media URL was accessible. Use a suitable private-storage method for material that should not be public.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Use the image in content</span><br />
Uploading adds the image to Media Library; it does not automatically place it inside every page. In a WordPress page or post, add an Image block and choose the item from Media Library. Check its alternative text, displayed size and caption in that context, then preview the page.<br />
<br />
This walkthrough verified the upload and attachment details. Inserting the image into a page and publishing that page are separate content-editing steps.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Troubleshooting</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">File too large:</span> compare the file with the maximum shown, reduce its size where appropriate and confirm the PHP version/configuration serving the site before changing limits.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">File type rejected:</span> use a supported image format. Do not enable unrestricted uploads as a shortcut.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Upload succeeds but image does not load:</span> inspect the exact file URL, permissions and server response. Check cache or mixed-content issues without disabling HTTPS protections.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">A thumbnail looks different:</span> WordPress may create smaller image sizes. Review the size selected in the content block and compare it with the original.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Verified result</span><br />
Our image uploaded successfully, the title/alternative text/caption saved, and the direct HTTPS image loaded. No upload-limit setting, security restriction or server permission was changed. The demonstration file remains in the lab Media Library.<br />
<br />
Screenshots and results are from our own AdminsForum test website.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Check WordPress Site Health on an aaPanel Website]]></title>
			<link>https://adminsforum.com/Thread-guide-check-wordpress-site-health-on-an-aapanel-website</link>
			<pubDate>Mon, 12 Oct 2026 13:36:11 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-check-wordpress-site-health-on-an-aapanel-website</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">How do you check WordPress Site Health on aaPanel?</span><br />
Sign in to WordPress and choose Tools → Site Health. Wait for the checks to finish, open each finding to read its details, then use Info to inspect the site’s actual configuration. You do not need to install a separate health-check plugin to use this built-in screen.<br />
<br />
We inspected our wp.adminslab.com test website, hosted through aaPanel 8.0.6 Free Edition. This guide shows actual findings from WordPress 7.1.3 on PHP 8.5.11. Your report can differ according to your server, plugins and recent activity.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Open Site Health and wait for the result</span><br />
Use your normal WordPress administrator login. In the left menu choose <span style="font-weight: bold;" class="mycode_b">Tools → Site Health</span>. You can also reach the screen from a dashboard Site Health link if it is displayed.<br />
<br />
The page initially showed <span style="font-weight: bold;" class="mycode_b">Results are still loading</span> in our session. Wait until checks finish before judging the report. Some tests depend on requests that take longer than the initial page load.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=54" target="_blank" title="">wp-site-health-status-20261012.jpg</a> (Size: 148.76 KB / Downloads: 6)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Our finished Status screen: Good, with four recommended improvements.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Read the findings rather than just the summary label</span><br />
Open the <span style="font-weight: bold;" class="mycode_b">Status</span> tab. Review any critical issues first, followed by recommended improvements. A Good label does not mean that every possible problem has been ruled out or that the website has passed a complete security audit.<br />
<br />
Our report showed:<ul class="mycode_list"><li>You should remove inactive plugins.<br />
</li>
<li>You should remove inactive themes.<br />
</li>
<li>One or more recommended modules are missing.<br />
</li>
<li>A scheduled event is late.<br />
</li>
</ul>
<br />
We had just completed plugin and theme demonstrations, so the inactive items were expected on this lab. For a real website, review which items are still needed, preserve any required parent/fallback theme and back up before removal. Do not delete components purely to change a score.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Expand a finding to see the specific cause</span><br />
Click a recommendation’s heading. We opened <span style="font-weight: bold;" class="mycode_b">One or more recommended modules are missing</span>. It identified <span style="font-weight: bold;" class="mycode_b">exif</span> and <span style="font-weight: bold;" class="mycode_b">imagick</span> as optional modules that were absent or disabled.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=55" target="_blank" title="">wp-site-health-modules-20261012.jpg</a> (Size: 181.19 KB / Downloads: 5)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">The expanded finding identifies the exact optional PHP modules.</span><br />
<br />
That message does not say PHP itself is missing. It concerns extensions available to the PHP environment running this website. Installing an extension for another PHP version will not necessarily resolve the warning.<br />
<br />
If you plan to change extensions in aaPanel, first confirm the website’s PHP version, read the extension requirements and prepare for the relevant PHP service reload/restart. Verify the result through WordPress afterward. We did not install EXIF or Imagick during this diagnostic walkthrough.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Inspect the late scheduled-event warning separately</span><br />
A late event deserves its own investigation. Expand the item and record the event name and any explanation shown. Check whether the warning persists and whether the affected application task is completing.<br />
<br />
Do not immediately add a server cron job or disable WordPress’s scheduler simply because a warning appears. Review the existing scheduler configuration first so you avoid duplicate or conflicting jobs. This guide did not diagnose or fix the event on the lab and did not create a new cron task.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Use Info to check real configuration details</span><br />
Choose <span style="font-weight: bold;" class="mycode_b">Info</span> at the top. It contains expandable sections such as WordPress, themes, plugins, Media Handling, Server, Database and Filesystem Permissions.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=56" target="_blank" title="">wp-site-health-info-20261012.jpg</a> (Size: 149.33 KB / Downloads: 7)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">The Info tab groups technical details into sections. Open only the section relevant to your question.</span><br />
<br />
We opened <span style="font-weight: bold;" class="mycode_b">Server</span> and confirmed that the website was using <span style="font-weight: bold;" class="mycode_b">PHP 8.5.11</span> with <span style="font-weight: bold;" class="mycode_b">fpm-fcgi</span> and <span style="font-weight: bold;" class="mycode_b">nginx/1.30.5</span>. These values come from WordPress’s runtime and are useful when aaPanel has several PHP versions installed.<br />
<br />
The same section reported upload and memory limits. Read them before requesting a change: an administrator-screen memory allowance can differ from the general PHP memory limit. The Info page reports configuration; it does not apply new settings itself.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Gather a useful support question</span><br />
For help, include the exact expanded error, WordPress version, the website’s PHP version, the affected component and what changed before the issue started. Add the relevant screenshot rather than an unexplained Good or Needs improvement label.<br />
<br />
The <span style="font-weight: bold;" class="mycode_b">Copy site info to clipboard</span> control can collect a broader report, but review it before sharing. Configuration exports may contain server paths, database identifiers, usernames or details you do not need to publish. Share the smallest relevant excerpt and remove credentials, tokens and private information. We did not post a full configuration export.<br />
<br />
For WordPress-specific questions, use <a href="https://adminsforum.com/Forum-wordpress-support" target="_blank" rel="noopener" class="mycode_url">WordPress Support</a>. For an extension issue, <a href="https://adminsforum.com/Forum-php-extensions-support" target="_blank" rel="noopener" class="mycode_url">PHP &amp; Extensions Support</a> is the more focused section.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">7. Recheck after making a separate fix</span><br />
Change one relevant item at a time, then return to Site Health and let the tests complete. Also test the actual feature that was failing. A warning disappearing does not replace a functional check of uploads, email, forms or scheduled tasks.<br />
<br />
Keep a note of the before/after finding and the exact change. This makes later troubleshooting easier than applying several unrelated settings and losing track of which one helped.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">What we verified</span><br />
We opened Status, waited for completion, expanded the optional-module warning and inspected Info → Server. The lab reported Good with four recommendations. We did not remove plugins/themes, install optional modules or resolve the scheduled-event warning in this guide.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Source:</span> <a href="https://wordpress.org/documentation/article/site-health-screen/" target="_blank" rel="noopener" class="mycode_url">WordPress Site Health documentation</a>. Screenshots and runtime findings are from our AdminsForum lab.]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">How do you check WordPress Site Health on aaPanel?</span><br />
Sign in to WordPress and choose Tools → Site Health. Wait for the checks to finish, open each finding to read its details, then use Info to inspect the site’s actual configuration. You do not need to install a separate health-check plugin to use this built-in screen.<br />
<br />
We inspected our wp.adminslab.com test website, hosted through aaPanel 8.0.6 Free Edition. This guide shows actual findings from WordPress 7.1.3 on PHP 8.5.11. Your report can differ according to your server, plugins and recent activity.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Open Site Health and wait for the result</span><br />
Use your normal WordPress administrator login. In the left menu choose <span style="font-weight: bold;" class="mycode_b">Tools → Site Health</span>. You can also reach the screen from a dashboard Site Health link if it is displayed.<br />
<br />
The page initially showed <span style="font-weight: bold;" class="mycode_b">Results are still loading</span> in our session. Wait until checks finish before judging the report. Some tests depend on requests that take longer than the initial page load.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=54" target="_blank" title="">wp-site-health-status-20261012.jpg</a> (Size: 148.76 KB / Downloads: 6)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Our finished Status screen: Good, with four recommended improvements.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Read the findings rather than just the summary label</span><br />
Open the <span style="font-weight: bold;" class="mycode_b">Status</span> tab. Review any critical issues first, followed by recommended improvements. A Good label does not mean that every possible problem has been ruled out or that the website has passed a complete security audit.<br />
<br />
Our report showed:<ul class="mycode_list"><li>You should remove inactive plugins.<br />
</li>
<li>You should remove inactive themes.<br />
</li>
<li>One or more recommended modules are missing.<br />
</li>
<li>A scheduled event is late.<br />
</li>
</ul>
<br />
We had just completed plugin and theme demonstrations, so the inactive items were expected on this lab. For a real website, review which items are still needed, preserve any required parent/fallback theme and back up before removal. Do not delete components purely to change a score.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Expand a finding to see the specific cause</span><br />
Click a recommendation’s heading. We opened <span style="font-weight: bold;" class="mycode_b">One or more recommended modules are missing</span>. It identified <span style="font-weight: bold;" class="mycode_b">exif</span> and <span style="font-weight: bold;" class="mycode_b">imagick</span> as optional modules that were absent or disabled.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=55" target="_blank" title="">wp-site-health-modules-20261012.jpg</a> (Size: 181.19 KB / Downloads: 5)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">The expanded finding identifies the exact optional PHP modules.</span><br />
<br />
That message does not say PHP itself is missing. It concerns extensions available to the PHP environment running this website. Installing an extension for another PHP version will not necessarily resolve the warning.<br />
<br />
If you plan to change extensions in aaPanel, first confirm the website’s PHP version, read the extension requirements and prepare for the relevant PHP service reload/restart. Verify the result through WordPress afterward. We did not install EXIF or Imagick during this diagnostic walkthrough.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Inspect the late scheduled-event warning separately</span><br />
A late event deserves its own investigation. Expand the item and record the event name and any explanation shown. Check whether the warning persists and whether the affected application task is completing.<br />
<br />
Do not immediately add a server cron job or disable WordPress’s scheduler simply because a warning appears. Review the existing scheduler configuration first so you avoid duplicate or conflicting jobs. This guide did not diagnose or fix the event on the lab and did not create a new cron task.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Use Info to check real configuration details</span><br />
Choose <span style="font-weight: bold;" class="mycode_b">Info</span> at the top. It contains expandable sections such as WordPress, themes, plugins, Media Handling, Server, Database and Filesystem Permissions.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=56" target="_blank" title="">wp-site-health-info-20261012.jpg</a> (Size: 149.33 KB / Downloads: 7)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">The Info tab groups technical details into sections. Open only the section relevant to your question.</span><br />
<br />
We opened <span style="font-weight: bold;" class="mycode_b">Server</span> and confirmed that the website was using <span style="font-weight: bold;" class="mycode_b">PHP 8.5.11</span> with <span style="font-weight: bold;" class="mycode_b">fpm-fcgi</span> and <span style="font-weight: bold;" class="mycode_b">nginx/1.30.5</span>. These values come from WordPress’s runtime and are useful when aaPanel has several PHP versions installed.<br />
<br />
The same section reported upload and memory limits. Read them before requesting a change: an administrator-screen memory allowance can differ from the general PHP memory limit. The Info page reports configuration; it does not apply new settings itself.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Gather a useful support question</span><br />
For help, include the exact expanded error, WordPress version, the website’s PHP version, the affected component and what changed before the issue started. Add the relevant screenshot rather than an unexplained Good or Needs improvement label.<br />
<br />
The <span style="font-weight: bold;" class="mycode_b">Copy site info to clipboard</span> control can collect a broader report, but review it before sharing. Configuration exports may contain server paths, database identifiers, usernames or details you do not need to publish. Share the smallest relevant excerpt and remove credentials, tokens and private information. We did not post a full configuration export.<br />
<br />
For WordPress-specific questions, use <a href="https://adminsforum.com/Forum-wordpress-support" target="_blank" rel="noopener" class="mycode_url">WordPress Support</a>. For an extension issue, <a href="https://adminsforum.com/Forum-php-extensions-support" target="_blank" rel="noopener" class="mycode_url">PHP &amp; Extensions Support</a> is the more focused section.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">7. Recheck after making a separate fix</span><br />
Change one relevant item at a time, then return to Site Health and let the tests complete. Also test the actual feature that was failing. A warning disappearing does not replace a functional check of uploads, email, forms or scheduled tasks.<br />
<br />
Keep a note of the before/after finding and the exact change. This makes later troubleshooting easier than applying several unrelated settings and losing track of which one helped.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">What we verified</span><br />
We opened Status, waited for completion, expanded the optional-module warning and inspected Info → Server. The lab reported Good with four recommendations. We did not remove plugins/themes, install optional modules or resolve the scheduled-event warning in this guide.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Source:</span> <a href="https://wordpress.org/documentation/article/site-health-screen/" target="_blank" rel="noopener" class="mycode_url">WordPress Site Health documentation</a>. Screenshots and runtime findings are from our AdminsForum lab.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Check WordPress Updates on an aaPanel Website]]></title>
			<link>https://adminsforum.com/Thread-guide-check-wordpress-updates-on-an-aapanel-website</link>
			<pubDate>Mon, 12 Oct 2026 13:33:53 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-check-wordpress-updates-on-an-aapanel-website</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">How do you check WordPress updates on an aaPanel website?</span><br />
Sign in to WordPress and open Dashboard → Updates. Use Check again to refresh the status, then review WordPress core, plugins and themes separately. aaPanel’s WP Toolkit also shows the installed WordPress version, but the WordPress dashboard provides a useful check of the application’s own update status.<br />
<br />
Our lab runs WordPress 7.1.3 on aaPanel 8.0.6 Free Edition with PHP 8.5. We checked both interfaces. Core, plugins and themes were already up to date, so this walkthrough verifies the checking process. It does not claim that an upgrade was performed.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Confirm the website in WP Toolkit</span><br />
Open aaPanel → WP Toolkit and find the correct domain. Click the WordPress version in the Quick action area to open Wordpress Setting → Base setup.<br />
<br />
Our Status message displayed <span style="font-weight: bold;" class="mycode_b">WordPress 7.1.3 is already the latest version</span>. Wait for the data to load: the fields can briefly show dashes while aaPanel retrieves the site information.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=52" target="_blank" title="">wp-updates-panel-status-20261012.jpg</a> (Size: 196.96 KB / Downloads: 8)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">The installed version and status reported by WP Toolkit. The new-password field is empty; checking updates does not require changing your password.</span><br />
<br />
Do not click Generate or fill Reset password just to check a version. The Upgrade control relates to WordPress; aaPanel’s separate Upgrade now button relates to the hosting panel. PHP and the web server have their own updates too. These are different components and should not be changed together without a plan.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Open WordPress’s Updates screen</span><br />
Sign in using your normal WordPress administrator login. If you followed our test-site setup, the dashboard is at your domain followed by /wp-admin/. Use the correct login path if you previously customized it.<br />
<br />
In WordPress, choose <span style="font-weight: bold;" class="mycode_b">Dashboard → Updates</span>. Review Current version and the timestamp beside Last checked. Click <span style="font-weight: bold;" class="mycode_b">Check again</span> to request a fresh status check, then wait for the page to return.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=53" target="_blank" title="">wp-updates-dashboard-20261012.jpg</a> (Size: 117.89 KB / Downloads: 7)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Our dashboard after checking: core, plugins and themes are all up to date.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Read each section separately</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">WordPress:</span> shows the installed core version and whether a newer release is offered.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Plugins:</span> shows plugin updates separately from the core.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Themes:</span> shows theme updates separately from plugin updates.<br />
</li>
</ul>
<br />
In our session, all three sections reported current software. That is a valid result: no update action is necessary just to complete a tutorial.<br />
<br />
The <span style="font-weight: bold;" class="mycode_b">Re-install version</span> button is not an upgrade to a newer version. It replaces core files with the same release and is not a routine step after every update check. We did not use it.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Prepare before applying an offered update</span><br />
Before changing a live site, save a complete files-and-database backup and confirm a recovery plan. Follow <a href="https://adminsforum.com/Thread-guide-back-up-wordpress-with-aapanel-wp-toolkit" target="_blank" rel="noopener" class="mycode_url">our WP Toolkit backup guide</a>. Keep a verified copy off the server and test recovery separately.<br />
<br />
Record the current core, plugin, theme and PHP versions. Review the release notes and compatibility requirements for the specific changes. Test them on staging where practical and pick a quiet time for a live-site update.<br />
<br />
On sites with orders, registrations or frequent content changes, coordinate the maintenance window so recovery from an older backup does not unexpectedly discard newer data. A successful archive creation alone is not proof of a successful restoration.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. When an update is available</span><br />
Use the action shown for the specific component on Dashboard → Updates. Follow its prompts and allow it to finish. Avoid starting several overlapping operations or repeatedly pressing an update button because progress is slow.<br />
<br />
Afterward, confirm the reported version and check the public homepage, administrator login and important functionality. Test forms, checkout or member features if your site uses them. Clear relevant caches when needed and examine errors before treating the work as complete.<br />
<br />
Our lab had no pending update, so these are preparation and verification instructions rather than a tested upgrade result. We did not downgrade the lab to manufacture an update scenario.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Review automatic updates without changing them accidentally</span><br />
Read the policy displayed on the Updates page. Our site stated that it is kept current with each new WordPress version. The page offered a link to switch to maintenance/security releases only. We left the existing policy unchanged.<br />
<br />
Core automatic updates and plugin/theme Auto update switches are separate preferences. Know which one you are changing, how backups will be retained and how failures will be noticed. A manual screenshot of today’s status does not prove future scheduled updates will run successfully.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Maintenance mode in Free Edition</span><br />
Our aaPanel Maintenance Mode screen displayed <span style="font-weight: bold;" class="mycode_b">This feature is only available for Pro</span>. Do not assume the built-in panel maintenance page is available in Free Edition. We did not buy Pro or enable that feature. Plan an appropriate maintenance approach for your website before a change that could interrupt visitors.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Troubleshooting</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Check again returns an error:</span> record the message and inspect site/server connectivity and logs. Do not disable SSL verification as a shortcut.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">The dashboard requests connection credentials:</span> investigate the installation’s file ownership and update method before supplying credentials or changing permissions.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Update failed or site is unavailable:</span> stop further changes, preserve the error and consult the official failed-update guidance. Recover using a known backup when appropriate.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Panel and dashboard disagree:</span> refresh both, confirm they refer to the same installation and compare the actual version rather than a cached label.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Verified result</span><br />
We refreshed the WordPress Updates page and confirmed core, plugins and themes were current. No upgrade, reinstallation, automatic-update preference change or maintenance-mode activation was performed.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">References:</span> <a href="https://wordpress.org/documentation/article/updating-wordpress/" target="_blank" rel="noopener" class="mycode_url">WordPress update documentation</a> and <a href="https://www.aapanel.com/docs/Function/WPToolkit-Local.html" target="_blank" rel="noopener" class="mycode_url">aaPanel WP Toolkit documentation</a>. Screenshots are from our own AdminsForum lab.]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">How do you check WordPress updates on an aaPanel website?</span><br />
Sign in to WordPress and open Dashboard → Updates. Use Check again to refresh the status, then review WordPress core, plugins and themes separately. aaPanel’s WP Toolkit also shows the installed WordPress version, but the WordPress dashboard provides a useful check of the application’s own update status.<br />
<br />
Our lab runs WordPress 7.1.3 on aaPanel 8.0.6 Free Edition with PHP 8.5. We checked both interfaces. Core, plugins and themes were already up to date, so this walkthrough verifies the checking process. It does not claim that an upgrade was performed.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Confirm the website in WP Toolkit</span><br />
Open aaPanel → WP Toolkit and find the correct domain. Click the WordPress version in the Quick action area to open Wordpress Setting → Base setup.<br />
<br />
Our Status message displayed <span style="font-weight: bold;" class="mycode_b">WordPress 7.1.3 is already the latest version</span>. Wait for the data to load: the fields can briefly show dashes while aaPanel retrieves the site information.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=52" target="_blank" title="">wp-updates-panel-status-20261012.jpg</a> (Size: 196.96 KB / Downloads: 8)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">The installed version and status reported by WP Toolkit. The new-password field is empty; checking updates does not require changing your password.</span><br />
<br />
Do not click Generate or fill Reset password just to check a version. The Upgrade control relates to WordPress; aaPanel’s separate Upgrade now button relates to the hosting panel. PHP and the web server have their own updates too. These are different components and should not be changed together without a plan.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Open WordPress’s Updates screen</span><br />
Sign in using your normal WordPress administrator login. If you followed our test-site setup, the dashboard is at your domain followed by /wp-admin/. Use the correct login path if you previously customized it.<br />
<br />
In WordPress, choose <span style="font-weight: bold;" class="mycode_b">Dashboard → Updates</span>. Review Current version and the timestamp beside Last checked. Click <span style="font-weight: bold;" class="mycode_b">Check again</span> to request a fresh status check, then wait for the page to return.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=53" target="_blank" title="">wp-updates-dashboard-20261012.jpg</a> (Size: 117.89 KB / Downloads: 7)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Our dashboard after checking: core, plugins and themes are all up to date.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Read each section separately</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">WordPress:</span> shows the installed core version and whether a newer release is offered.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Plugins:</span> shows plugin updates separately from the core.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Themes:</span> shows theme updates separately from plugin updates.<br />
</li>
</ul>
<br />
In our session, all three sections reported current software. That is a valid result: no update action is necessary just to complete a tutorial.<br />
<br />
The <span style="font-weight: bold;" class="mycode_b">Re-install version</span> button is not an upgrade to a newer version. It replaces core files with the same release and is not a routine step after every update check. We did not use it.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Prepare before applying an offered update</span><br />
Before changing a live site, save a complete files-and-database backup and confirm a recovery plan. Follow <a href="https://adminsforum.com/Thread-guide-back-up-wordpress-with-aapanel-wp-toolkit" target="_blank" rel="noopener" class="mycode_url">our WP Toolkit backup guide</a>. Keep a verified copy off the server and test recovery separately.<br />
<br />
Record the current core, plugin, theme and PHP versions. Review the release notes and compatibility requirements for the specific changes. Test them on staging where practical and pick a quiet time for a live-site update.<br />
<br />
On sites with orders, registrations or frequent content changes, coordinate the maintenance window so recovery from an older backup does not unexpectedly discard newer data. A successful archive creation alone is not proof of a successful restoration.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. When an update is available</span><br />
Use the action shown for the specific component on Dashboard → Updates. Follow its prompts and allow it to finish. Avoid starting several overlapping operations or repeatedly pressing an update button because progress is slow.<br />
<br />
Afterward, confirm the reported version and check the public homepage, administrator login and important functionality. Test forms, checkout or member features if your site uses them. Clear relevant caches when needed and examine errors before treating the work as complete.<br />
<br />
Our lab had no pending update, so these are preparation and verification instructions rather than a tested upgrade result. We did not downgrade the lab to manufacture an update scenario.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Review automatic updates without changing them accidentally</span><br />
Read the policy displayed on the Updates page. Our site stated that it is kept current with each new WordPress version. The page offered a link to switch to maintenance/security releases only. We left the existing policy unchanged.<br />
<br />
Core automatic updates and plugin/theme Auto update switches are separate preferences. Know which one you are changing, how backups will be retained and how failures will be noticed. A manual screenshot of today’s status does not prove future scheduled updates will run successfully.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Maintenance mode in Free Edition</span><br />
Our aaPanel Maintenance Mode screen displayed <span style="font-weight: bold;" class="mycode_b">This feature is only available for Pro</span>. Do not assume the built-in panel maintenance page is available in Free Edition. We did not buy Pro or enable that feature. Plan an appropriate maintenance approach for your website before a change that could interrupt visitors.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Troubleshooting</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Check again returns an error:</span> record the message and inspect site/server connectivity and logs. Do not disable SSL verification as a shortcut.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">The dashboard requests connection credentials:</span> investigate the installation’s file ownership and update method before supplying credentials or changing permissions.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Update failed or site is unavailable:</span> stop further changes, preserve the error and consult the official failed-update guidance. Recover using a known backup when appropriate.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Panel and dashboard disagree:</span> refresh both, confirm they refer to the same installation and compare the actual version rather than a cached label.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Verified result</span><br />
We refreshed the WordPress Updates page and confirmed core, plugins and themes were current. No upgrade, reinstallation, automatic-update preference change or maintenance-mode activation was performed.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">References:</span> <a href="https://wordpress.org/documentation/article/updating-wordpress/" target="_blank" rel="noopener" class="mycode_url">WordPress update documentation</a> and <a href="https://www.aapanel.com/docs/Function/WPToolkit-Local.html" target="_blank" rel="noopener" class="mycode_url">aaPanel WP Toolkit documentation</a>. Screenshots are from our own AdminsForum lab.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Install and Change WordPress Themes in aaPanel WP Toolkit]]></title>
			<link>https://adminsforum.com/Thread-guide-install-and-change-wordpress-themes-in-aapanel-wp-toolkit</link>
			<pubDate>Mon, 12 Oct 2026 13:32:03 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-install-and-change-wordpress-themes-in-aapanel-wp-toolkit</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">How do you change a WordPress theme in aaPanel?</span><br />
In WP Toolkit, click the WordPress version beside your domain, open the Theme tab, install the theme you want and turn on its Active switch. Then check the public website. Keep the previous theme installed so you can switch back if the new design is unsuitable.<br />
<br />
We tested this on wp.adminslab.com with aaPanel 8.0.6 Free Edition, WordPress 7.1.3 and PHP 8.5. We installed Twenty Twenty-Two 2.2, activated it, checked its homepage and switched back to the original Twenty Twenty-Five 1.5 theme. Installation and switching worked without purchasing Pro.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Before starting</span><ul class="mycode_list"><li>Make a fresh files-and-database backup. Follow <a href="https://adminsforum.com/Thread-guide-back-up-wordpress-with-aapanel-wp-toolkit" target="_blank" rel="noopener" class="mycode_url">our WP Toolkit backup guide</a> and retain a verified copy outside the server.<br />
</li>
<li>Test on staging before changing a live business website. Theme changes can affect navigation, templates, typography, widgets and plugin integrations.<br />
</li>
<li>Record your current theme name. Keep it installed during the test.<br />
</li>
<li>Check the candidate theme’s official source, author, maintenance and compatibility. Avoid installing a theme merely because its preview looks attractive.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">1. Open the Theme tab</span><br />
Choose <span style="font-weight: bold;" class="mycode_b">WP Toolkit</span> in aaPanel. Find the correct website and click the <span style="font-weight: bold;" class="mycode_b">WordPress version</span> button in its Quick action area. In the Site modification window, choose <span style="font-weight: bold;" class="mycode_b">Theme</span> beside Base setup, Plugin and Utils.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=48" target="_blank" title="">wp-theme-before-20261012.jpg</a> (Size: 172.6 KB / Downloads: 7)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Our original theme list. Twenty Twenty-Five was active; other installed themes were inactive.</span><br />
<br />
The table separates <span style="font-weight: bold;" class="mycode_b">Active</span> from <span style="font-weight: bold;" class="mycode_b">Auto update</span>. Active controls which theme supplies your website’s design. Auto update is a separate update preference. Installing a theme does not mean it becomes active.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Find and install a theme</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Install</span> in the Theme tab. Enter the theme’s name in the search field and press Enter. Our panel’s theme search field was labelled <span style="font-weight: bold;" class="mycode_b">Please enter plugin name</span>, even though the window was for themes. Check that you opened Theme before searching.<br />
<br />
We searched for <span style="font-weight: bold;" class="mycode_b">Twenty Twenty-Two</span> and chose the result from <span style="font-weight: bold;" class="mycode_b">the WordPress team</span>. Review the Name, Author, WP and PHP columns; similar names can refer to different products. Requirements shown in the list do not prove compatibility with every plugin or customization on your website.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=49" target="_blank" title="">wp-theme-search-20261012.jpg</a> (Size: 161.75 KB / Downloads: 9)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">The exact theme and author in our search result.</span><br />
<br />
Click Install in the correct row once and wait for completion. Close the installation window, keeping the underlying theme manager open. Confirm that the theme appears in the installed list. In our test it appeared as Twenty Twenty-Two 2.2.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Activate the new theme</span><br />
In the new theme’s row, turn on the <span style="font-weight: bold;" class="mycode_b">Active</span> switch. Wait for the operation to finish. Confirm that the new theme is active and the previous one is inactive. WordPress uses one active theme for the site.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=50" target="_blank" title="">wp-theme-active-20261012.jpg</a> (Size: 180.77 KB / Downloads: 7)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Twenty Twenty-Two is active after the switch; the other themes are inactive.</span><br />
<br />
Do not switch off your only active theme first. Activate its replacement instead. The panel can display an “At least 1 theme is active” message if you attempt to disable the active theme without a replacement.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Check the actual website</span><br />
Open the public HTTPS address and refresh the page. Check the homepage, a post, important pages, navigation, mobile layout, images and forms. A successful switch in the panel does not mean the new design meets your needs.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=51" target="_blank" title="">wp-theme-homepage-20261012.jpg</a> (Size: 88.06 KB / Downloads: 7)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Our lab homepage after activation. The design changed and the sample content still loaded over HTTPS.</span><br />
<br />
For a block theme, further design work happens in WordPress’s Site Editor. Switching themes alone does not build menus, layouts or a complete business website. Theme-specific customizations may need adjustment.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Switch back to the previous theme</span><br />
Return to the Theme tab and activate your previous theme using its Active switch. Wait, check the states and refresh the public website again.<br />
<br />
During our test, we refreshed the panel and reopened the theme list before the return switch persisted. If a switch or warning looks inconsistent, reopen the list and verify the actual state instead of repeatedly clicking it. We confirmed Twenty Twenty-Five active again and the original Blog homepage restored. Twenty Twenty-Two remains installed but inactive.<br />
<br />
Switching back is useful for a design test, but it is not a complete recovery method for every theme. A theme or associated plugin may change settings or data; a reliable backup is still necessary.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Understand update and removal controls</span><br />
We left Auto update off during this demonstration and did not test an automatic update. Review your maintenance and monitoring plan before enabling it. The panel warns against enabling automatic theme/plugin updates while its maintenance mode is enabled.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Uninstall</span> is different from switching themes. Review the consequences and take a backup before removing anything. Preserve an appropriate fallback theme, and avoid deleting a parent theme required by a child theme. We did not uninstall themes in this walkthrough.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Troubleshooting</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Design looks unchanged:</span> verify the Active state, refresh the public page and check whether browser/server caching is showing an older response.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Installation fails:</span> read the error and check available disk space, source connectivity and permissions. Do not broadly weaken file permissions as a shortcut.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Layout or feature breaks:</span> switch back to the previous theme, inspect logs and test the conflict on staging.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Search field says plugin:</span> our tested theme dialog uses that placeholder. Confirm the Theme tab is selected; do not assume you are in the plugin manager.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Final check</span><br />
You should know which theme is active, have tested the public website and have a clear way to return to the previous configuration. Our installation, activation, homepage check and switch-back were tested. Automatic updates, uninstalling and full backup restoration were not tested here.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Source:</span> <a href="https://www.aapanel.com/docs/Function/WPToolkit-Local.html" target="_blank" rel="noopener" class="mycode_url">aaPanel WP Toolkit documentation</a>. Screenshots and theme-switch results are from our own AdminsForum lab.]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">How do you change a WordPress theme in aaPanel?</span><br />
In WP Toolkit, click the WordPress version beside your domain, open the Theme tab, install the theme you want and turn on its Active switch. Then check the public website. Keep the previous theme installed so you can switch back if the new design is unsuitable.<br />
<br />
We tested this on wp.adminslab.com with aaPanel 8.0.6 Free Edition, WordPress 7.1.3 and PHP 8.5. We installed Twenty Twenty-Two 2.2, activated it, checked its homepage and switched back to the original Twenty Twenty-Five 1.5 theme. Installation and switching worked without purchasing Pro.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Before starting</span><ul class="mycode_list"><li>Make a fresh files-and-database backup. Follow <a href="https://adminsforum.com/Thread-guide-back-up-wordpress-with-aapanel-wp-toolkit" target="_blank" rel="noopener" class="mycode_url">our WP Toolkit backup guide</a> and retain a verified copy outside the server.<br />
</li>
<li>Test on staging before changing a live business website. Theme changes can affect navigation, templates, typography, widgets and plugin integrations.<br />
</li>
<li>Record your current theme name. Keep it installed during the test.<br />
</li>
<li>Check the candidate theme’s official source, author, maintenance and compatibility. Avoid installing a theme merely because its preview looks attractive.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">1. Open the Theme tab</span><br />
Choose <span style="font-weight: bold;" class="mycode_b">WP Toolkit</span> in aaPanel. Find the correct website and click the <span style="font-weight: bold;" class="mycode_b">WordPress version</span> button in its Quick action area. In the Site modification window, choose <span style="font-weight: bold;" class="mycode_b">Theme</span> beside Base setup, Plugin and Utils.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=48" target="_blank" title="">wp-theme-before-20261012.jpg</a> (Size: 172.6 KB / Downloads: 7)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Our original theme list. Twenty Twenty-Five was active; other installed themes were inactive.</span><br />
<br />
The table separates <span style="font-weight: bold;" class="mycode_b">Active</span> from <span style="font-weight: bold;" class="mycode_b">Auto update</span>. Active controls which theme supplies your website’s design. Auto update is a separate update preference. Installing a theme does not mean it becomes active.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Find and install a theme</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Install</span> in the Theme tab. Enter the theme’s name in the search field and press Enter. Our panel’s theme search field was labelled <span style="font-weight: bold;" class="mycode_b">Please enter plugin name</span>, even though the window was for themes. Check that you opened Theme before searching.<br />
<br />
We searched for <span style="font-weight: bold;" class="mycode_b">Twenty Twenty-Two</span> and chose the result from <span style="font-weight: bold;" class="mycode_b">the WordPress team</span>. Review the Name, Author, WP and PHP columns; similar names can refer to different products. Requirements shown in the list do not prove compatibility with every plugin or customization on your website.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=49" target="_blank" title="">wp-theme-search-20261012.jpg</a> (Size: 161.75 KB / Downloads: 9)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">The exact theme and author in our search result.</span><br />
<br />
Click Install in the correct row once and wait for completion. Close the installation window, keeping the underlying theme manager open. Confirm that the theme appears in the installed list. In our test it appeared as Twenty Twenty-Two 2.2.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Activate the new theme</span><br />
In the new theme’s row, turn on the <span style="font-weight: bold;" class="mycode_b">Active</span> switch. Wait for the operation to finish. Confirm that the new theme is active and the previous one is inactive. WordPress uses one active theme for the site.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=50" target="_blank" title="">wp-theme-active-20261012.jpg</a> (Size: 180.77 KB / Downloads: 7)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Twenty Twenty-Two is active after the switch; the other themes are inactive.</span><br />
<br />
Do not switch off your only active theme first. Activate its replacement instead. The panel can display an “At least 1 theme is active” message if you attempt to disable the active theme without a replacement.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Check the actual website</span><br />
Open the public HTTPS address and refresh the page. Check the homepage, a post, important pages, navigation, mobile layout, images and forms. A successful switch in the panel does not mean the new design meets your needs.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=51" target="_blank" title="">wp-theme-homepage-20261012.jpg</a> (Size: 88.06 KB / Downloads: 7)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Our lab homepage after activation. The design changed and the sample content still loaded over HTTPS.</span><br />
<br />
For a block theme, further design work happens in WordPress’s Site Editor. Switching themes alone does not build menus, layouts or a complete business website. Theme-specific customizations may need adjustment.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Switch back to the previous theme</span><br />
Return to the Theme tab and activate your previous theme using its Active switch. Wait, check the states and refresh the public website again.<br />
<br />
During our test, we refreshed the panel and reopened the theme list before the return switch persisted. If a switch or warning looks inconsistent, reopen the list and verify the actual state instead of repeatedly clicking it. We confirmed Twenty Twenty-Five active again and the original Blog homepage restored. Twenty Twenty-Two remains installed but inactive.<br />
<br />
Switching back is useful for a design test, but it is not a complete recovery method for every theme. A theme or associated plugin may change settings or data; a reliable backup is still necessary.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Understand update and removal controls</span><br />
We left Auto update off during this demonstration and did not test an automatic update. Review your maintenance and monitoring plan before enabling it. The panel warns against enabling automatic theme/plugin updates while its maintenance mode is enabled.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Uninstall</span> is different from switching themes. Review the consequences and take a backup before removing anything. Preserve an appropriate fallback theme, and avoid deleting a parent theme required by a child theme. We did not uninstall themes in this walkthrough.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Troubleshooting</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Design looks unchanged:</span> verify the Active state, refresh the public page and check whether browser/server caching is showing an older response.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Installation fails:</span> read the error and check available disk space, source connectivity and permissions. Do not broadly weaken file permissions as a shortcut.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Layout or feature breaks:</span> switch back to the previous theme, inspect logs and test the conflict on staging.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Search field says plugin:</span> our tested theme dialog uses that placeholder. Confirm the Theme tab is selected; do not assume you are in the plugin manager.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Final check</span><br />
You should know which theme is active, have tested the public website and have a clear way to return to the previous configuration. Our installation, activation, homepage check and switch-back were tested. Automatic updates, uninstalling and full backup restoration were not tested here.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Source:</span> <a href="https://www.aapanel.com/docs/Function/WPToolkit-Local.html" target="_blank" rel="noopener" class="mycode_url">aaPanel WP Toolkit documentation</a>. Screenshots and theme-switch results are from our own AdminsForum lab.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Install and Manage WordPress Plugins in aaPanel WP Toolkit]]></title>
			<link>https://adminsforum.com/Thread-guide-install-and-manage-wordpress-plugins-in-aapanel-wp-toolkit</link>
			<pubDate>Mon, 12 Oct 2026 13:06:00 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-install-and-manage-wordpress-plugins-in-aapanel-wp-toolkit</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">How do you install a WordPress plugin through aaPanel?</span><br />
Open WP Toolkit, click the WordPress version beside your site, select Plugin, then click Install. Search for the exact plugin, check its author and requirements, and install it. Return to the list and enable its Active switch when you are ready to use it.<br />
<br />
We tested installation, activation and deactivation on wp.adminslab.com using aaPanel 8.0.6 Free Edition, WordPress 7.1.3 and PHP 8.5. The example is Hello Dolly by Matt Mullenweg. It is a simple demonstration plugin, not a required component for hosting a website.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Before changing plugins</span><ul class="mycode_list"><li>Confirm that you selected the correct website in WP Toolkit.<br />
</li>
<li>Take a fresh backup of files and the database. See <a href="https://adminsforum.com/Thread-guide-back-up-wordpress-with-aapanel-wp-toolkit" target="_blank" rel="noopener" class="mycode_url">Back Up WordPress with aaPanel WP Toolkit</a>. Keep a verified off-server copy for recovery.<br />
</li>
<li>For a live website, test changes on staging first and choose a quiet maintenance period.<br />
</li>
<li>Check the plugin’s official listing, recent maintenance, WordPress/PHP compatibility and author. A similar name does not mean it is the same plugin.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">1. Find the plugin manager</span><br />
In aaPanel’s left menu choose <span style="font-weight: bold;" class="mycode_b">WP Toolkit</span>. Locate your domain. In the Quick action area, click its <span style="font-weight: bold;" class="mycode_b">WordPress version</span> button. Our button displayed 7.1.3; yours may show a different version.<br />
<br />
The Site modification window opens with Wordpress Setting selected. Choose the <span style="font-weight: bold;" class="mycode_b">Plugin</span> tab alongside Base setup, Theme and Utils.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=44" target="_blank" title="">wp-plugin-list-20261012.jpg</a> (Size: 165.95 KB / Downloads: 6)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">The Plugin tab before our installation. Existing plugins have separate Active and Auto update switches.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Understand the two switches</span><br />
<span style="font-weight: bold;" class="mycode_b">Active</span> controls whether WordPress runs the plugin. An installed plugin can remain inactive.<br />
<span style="font-weight: bold;" class="mycode_b">Auto update</span> controls automatic plugin updates. It is a separate setting: enabling it does not activate a plugin, and activating a plugin does not automatically enable it.<br />
<br />
Do not turn on every switch together. Know which setting you are changing and verify it afterward. The panel also warns against enabling automatic plugin/theme updates while its maintenance mode is enabled.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Search for a plugin</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Install</span>. In Install Plugins, enter the plugin name in <span style="font-weight: bold;" class="mycode_b">Please enter plugin name</span> and press Enter. Wait for results to load; the table can briefly show placeholders.<br />
<br />
For our demonstration, we searched for Hello Dolly and selected the row with <span style="font-weight: bold;" class="mycode_b">Matt Mullenweg</span> as author. Other similarly named plugins appeared, so we checked the author rather than choosing a random search result.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=45" target="_blank" title="">wp-plugin-search-20261012.jpg</a> (Size: 215.76 KB / Downloads: 6)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Search results include Name, Desc, Author, WP, PHP, Rating and an Install action. Verify the exact row before proceeding.</span><br />
<br />
The WP and PHP columns are useful requirements information, but do not assume they mean the plugin was tested on your exact installed versions. Review the official WordPress.org listing too. A blank value or dash is not a compatibility guarantee.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Install and confirm the result</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Install</span> in the chosen plugin’s row once. Wait while the panel displays Installing, please wait. Our operation then reported <span style="font-weight: bold;" class="mycode_b">Installation Success</span>.<br />
<br />
Close the Install Plugins window using its top-right close control. Keep the underlying Site modification window open. The new plugin should now appear in the Plugin list.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=46" target="_blank" title="">wp-plugin-installed-20261012.jpg</a> (Size: 168.96 KB / Downloads: 7)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Hello Dolly 1.7.2 appears in the installed list. Both switches were initially off in our test.</span><br />
<br />
Installation and activation are different steps. In our lab, the plugin was installed but inactive. Do not assume that a success message means its functionality is already running.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Activate the plugin</span><br />
Find the newly installed plugin’s row. Turn on the switch in the <span style="font-weight: bold;" class="mycode_b">Active</span> column. Wait for the operation to finish and confirm the switch stays on.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=47" target="_blank" title="">wp-plugin-active-20261012.jpg</a> (Size: 168.48 KB / Downloads: 6)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Our activation test: Active is on while Auto update remains off.</span><br />
<br />
Now open your website and its WordPress dashboard. Test the feature you installed and the pages it might affect. For example, a form plugin needs a form submission test; a caching plugin needs a check of pages and logged-in behavior. Our homepage remained accessible after Hello Dolly activation. That basic check does not establish compatibility for every plugin or feature.<br />
<br />
Some plugins need additional configuration, an API key or an account inside WordPress. Activation alone does not complete those separate setup steps.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Deactivate without uninstalling</span><br />
To stop a plugin, turn off its <span style="font-weight: bold;" class="mycode_b">Active</span> switch and confirm it stays off. We tested this and left Hello Dolly installed but inactive on the lab site. Its Auto update switch was left off throughout.<br />
<br />
Deactivation is different from <span style="font-weight: bold;" class="mycode_b">Uninstall</span>. Uninstall can remove files and, depending on the plugin, stored settings or data. Back up and review the plugin’s removal behavior before using it. We did not test uninstalling or automatic updates in this walkthrough.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">If something goes wrong</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Search results stay blank:</span> wait for loading to finish, check the panel session and retry a precise name. Investigate server access to the plugin source if searches consistently fail.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Installation fails:</span> read the error, check disk space and file permissions, and verify that PHP can access the required resources. Avoid changing ownership broadly without understanding the error.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Activation breaks a feature:</span> switch that plugin off, check the website again and inspect the relevant WordPress/PHP logs. Do not update several unrelated plugins while isolating the problem.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">An edition upgrade prompt appears:</span> use normal WordPress dashboard access where appropriate. Our Plugin install and Active switches worked in Free Edition; password-free Login was separately Pro-gated in the earlier installation test.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Finished checklist</span><ul class="mycode_list"><li>Correct website and exact plugin author checked.<br />
</li>
<li>Backup prepared before changes.<br />
</li>
<li>Installation success confirmed by the plugin appearing in the list.<br />
</li>
<li>Active state checked separately from Auto update.<br />
</li>
<li>Website and affected functionality tested.<br />
</li>
<li>Unneeded demonstration plugin left inactive.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">References:</span> <a href="https://www.aapanel.com/docs/Function/WPToolkit-Local.html" target="_blank" rel="noopener" class="mycode_url">aaPanel WP Toolkit documentation</a> and <a href="https://wordpress.org/plugins/hello-dolly/" target="_blank" rel="noopener" class="mycode_url">Hello Dolly on WordPress.org</a>. Screenshots and installation/activation results are from our AdminsForum lab.]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">How do you install a WordPress plugin through aaPanel?</span><br />
Open WP Toolkit, click the WordPress version beside your site, select Plugin, then click Install. Search for the exact plugin, check its author and requirements, and install it. Return to the list and enable its Active switch when you are ready to use it.<br />
<br />
We tested installation, activation and deactivation on wp.adminslab.com using aaPanel 8.0.6 Free Edition, WordPress 7.1.3 and PHP 8.5. The example is Hello Dolly by Matt Mullenweg. It is a simple demonstration plugin, not a required component for hosting a website.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Before changing plugins</span><ul class="mycode_list"><li>Confirm that you selected the correct website in WP Toolkit.<br />
</li>
<li>Take a fresh backup of files and the database. See <a href="https://adminsforum.com/Thread-guide-back-up-wordpress-with-aapanel-wp-toolkit" target="_blank" rel="noopener" class="mycode_url">Back Up WordPress with aaPanel WP Toolkit</a>. Keep a verified off-server copy for recovery.<br />
</li>
<li>For a live website, test changes on staging first and choose a quiet maintenance period.<br />
</li>
<li>Check the plugin’s official listing, recent maintenance, WordPress/PHP compatibility and author. A similar name does not mean it is the same plugin.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">1. Find the plugin manager</span><br />
In aaPanel’s left menu choose <span style="font-weight: bold;" class="mycode_b">WP Toolkit</span>. Locate your domain. In the Quick action area, click its <span style="font-weight: bold;" class="mycode_b">WordPress version</span> button. Our button displayed 7.1.3; yours may show a different version.<br />
<br />
The Site modification window opens with Wordpress Setting selected. Choose the <span style="font-weight: bold;" class="mycode_b">Plugin</span> tab alongside Base setup, Theme and Utils.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=44" target="_blank" title="">wp-plugin-list-20261012.jpg</a> (Size: 165.95 KB / Downloads: 6)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">The Plugin tab before our installation. Existing plugins have separate Active and Auto update switches.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Understand the two switches</span><br />
<span style="font-weight: bold;" class="mycode_b">Active</span> controls whether WordPress runs the plugin. An installed plugin can remain inactive.<br />
<span style="font-weight: bold;" class="mycode_b">Auto update</span> controls automatic plugin updates. It is a separate setting: enabling it does not activate a plugin, and activating a plugin does not automatically enable it.<br />
<br />
Do not turn on every switch together. Know which setting you are changing and verify it afterward. The panel also warns against enabling automatic plugin/theme updates while its maintenance mode is enabled.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Search for a plugin</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Install</span>. In Install Plugins, enter the plugin name in <span style="font-weight: bold;" class="mycode_b">Please enter plugin name</span> and press Enter. Wait for results to load; the table can briefly show placeholders.<br />
<br />
For our demonstration, we searched for Hello Dolly and selected the row with <span style="font-weight: bold;" class="mycode_b">Matt Mullenweg</span> as author. Other similarly named plugins appeared, so we checked the author rather than choosing a random search result.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=45" target="_blank" title="">wp-plugin-search-20261012.jpg</a> (Size: 215.76 KB / Downloads: 6)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Search results include Name, Desc, Author, WP, PHP, Rating and an Install action. Verify the exact row before proceeding.</span><br />
<br />
The WP and PHP columns are useful requirements information, but do not assume they mean the plugin was tested on your exact installed versions. Review the official WordPress.org listing too. A blank value or dash is not a compatibility guarantee.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Install and confirm the result</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Install</span> in the chosen plugin’s row once. Wait while the panel displays Installing, please wait. Our operation then reported <span style="font-weight: bold;" class="mycode_b">Installation Success</span>.<br />
<br />
Close the Install Plugins window using its top-right close control. Keep the underlying Site modification window open. The new plugin should now appear in the Plugin list.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=46" target="_blank" title="">wp-plugin-installed-20261012.jpg</a> (Size: 168.96 KB / Downloads: 7)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Hello Dolly 1.7.2 appears in the installed list. Both switches were initially off in our test.</span><br />
<br />
Installation and activation are different steps. In our lab, the plugin was installed but inactive. Do not assume that a success message means its functionality is already running.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Activate the plugin</span><br />
Find the newly installed plugin’s row. Turn on the switch in the <span style="font-weight: bold;" class="mycode_b">Active</span> column. Wait for the operation to finish and confirm the switch stays on.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=47" target="_blank" title="">wp-plugin-active-20261012.jpg</a> (Size: 168.48 KB / Downloads: 6)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Our activation test: Active is on while Auto update remains off.</span><br />
<br />
Now open your website and its WordPress dashboard. Test the feature you installed and the pages it might affect. For example, a form plugin needs a form submission test; a caching plugin needs a check of pages and logged-in behavior. Our homepage remained accessible after Hello Dolly activation. That basic check does not establish compatibility for every plugin or feature.<br />
<br />
Some plugins need additional configuration, an API key or an account inside WordPress. Activation alone does not complete those separate setup steps.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Deactivate without uninstalling</span><br />
To stop a plugin, turn off its <span style="font-weight: bold;" class="mycode_b">Active</span> switch and confirm it stays off. We tested this and left Hello Dolly installed but inactive on the lab site. Its Auto update switch was left off throughout.<br />
<br />
Deactivation is different from <span style="font-weight: bold;" class="mycode_b">Uninstall</span>. Uninstall can remove files and, depending on the plugin, stored settings or data. Back up and review the plugin’s removal behavior before using it. We did not test uninstalling or automatic updates in this walkthrough.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">If something goes wrong</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Search results stay blank:</span> wait for loading to finish, check the panel session and retry a precise name. Investigate server access to the plugin source if searches consistently fail.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Installation fails:</span> read the error, check disk space and file permissions, and verify that PHP can access the required resources. Avoid changing ownership broadly without understanding the error.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Activation breaks a feature:</span> switch that plugin off, check the website again and inspect the relevant WordPress/PHP logs. Do not update several unrelated plugins while isolating the problem.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">An edition upgrade prompt appears:</span> use normal WordPress dashboard access where appropriate. Our Plugin install and Active switches worked in Free Edition; password-free Login was separately Pro-gated in the earlier installation test.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Finished checklist</span><ul class="mycode_list"><li>Correct website and exact plugin author checked.<br />
</li>
<li>Backup prepared before changes.<br />
</li>
<li>Installation success confirmed by the plugin appearing in the list.<br />
</li>
<li>Active state checked separately from Auto update.<br />
</li>
<li>Website and affected functionality tested.<br />
</li>
<li>Unneeded demonstration plugin left inactive.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">References:</span> <a href="https://www.aapanel.com/docs/Function/WPToolkit-Local.html" target="_blank" rel="noopener" class="mycode_url">aaPanel WP Toolkit documentation</a> and <a href="https://wordpress.org/plugins/hello-dolly/" target="_blank" rel="noopener" class="mycode_url">Hello Dolly on WordPress.org</a>. Screenshots and installation/activation results are from our AdminsForum lab.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Back Up WordPress with aaPanel WP Toolkit]]></title>
			<link>https://adminsforum.com/Thread-guide-back-up-wordpress-with-aapanel-wp-toolkit</link>
			<pubDate>Mon, 12 Oct 2026 12:36:45 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-back-up-wordpress-with-aapanel-wp-toolkit</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">How do you back up WordPress in aaPanel WP Toolkit?</span><br />
Open WP Toolkit, select the website’s Backup link, confirm Full Backup and the storage destination, then click Backup. Wait for a successful result and verify that an archive appears before making website changes.<br />
<br />
This walkthrough uses our HTTPS test site, wp.adminslab.com, on aaPanel 8.0.6 Free Edition. We created a real backup and checked its archive on the server. A successful backup job is not the same as a tested restoration.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Before you begin</span><ul class="mycode_list"><li>Your WordPress site must already appear in WP Toolkit. If it does not, follow <a href="https://adminsforum.com/Thread-guide-install-wordpress-with-aapanel-wp-toolkit-free-edition" target="_blank" rel="noopener" class="mycode_url">Install WordPress with aaPanel WP Toolkit</a> first.<br />
</li>
<li>Have enough free disk space for the backup. Large uploads folders can make archives much larger than our example.<br />
</li>
<li>Avoid updating plugins, importing content or accepting important changes while the backup is running. A quiet period makes the files and database easier to keep consistent.<br />
</li>
<li>Check which site you selected. Our lab has other websites, so we verified the domain before starting.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">1. Open the website’s backup window</span><br />
Sign in to aaPanel and choose <span style="font-weight: bold;" class="mycode_b">WP Toolkit</span> in the left menu. Find the correct WordPress domain. Click the <span style="font-weight: bold;" class="mycode_b">Backup</span> link or backup count in its row. A site without a previous backup may show <span style="font-weight: bold;" class="mycode_b">0 Backup</span>.<br />
<br />
The window contains <span style="font-weight: bold;" class="mycode_b">Backup / Restore</span> and <span style="font-weight: bold;" class="mycode_b">Schedule &amp; Remote Storage</span>. For this guide, stay on Backup / Restore. This is a manual backup; it does not require creating a recurring task.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=42" target="_blank" title="">wp-toolkit-backup-before-20261012.jpg</a> (Size: 173.43 KB / Downloads: 8)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">The backup window before our first backup. Check the selected backup type and destination before clicking Backup.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Check the backup type and destination</span><br />
Our window displayed <span style="font-weight: bold;" class="mycode_b">Full Backup</span> to <span style="font-weight: bold;" class="mycode_b">Local Server</span>. If yours is different, use <span style="font-weight: bold;" class="mycode_b">click here to configure</span> and inspect the available choices before starting. Do not assume that a files-only or database-only backup can recover the whole website.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Local Server</span> means the copy remains on the same VPS. It is useful before a plugin update, but it will not protect you if the VPS and its disk are lost. Keep an additional copy outside that server.<br />
<br />
The panel also states <span style="font-weight: bold;" class="mycode_b">Subsites not included</span>. If you run WordPress Multisite, do not treat this walkthrough as a complete multisite recovery procedure. Verify the coverage and use a backup method appropriate to your network.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Run the backup and wait for completion</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Backup</span> once. Leave the operation running until aaPanel reports the result. A large site can take longer than this small installation. Do not repeatedly click Backup because the first job is still working.<br />
<br />
Our result was <span style="font-weight: bold;" class="mycode_b">1 success, 0 failed</span>. The table then showed a <span style="font-weight: bold;" class="mycode_b">35.28 MB</span> archive, marked Full Backup with Local Server storage. Your filename, timestamp and size will differ.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=43" target="_blank" title="">wp-toolkit-backup-success-20261012.jpg</a> (Size: 162.58 KB / Downloads: 7)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Our completed backup. The successful task result and archive row are both visible.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Verify the backup before relying on it</span><br />
Check that the table contains a new archive with the expected time, a non-zero size and the intended storage location. A missing or unexpectedly small archive needs investigation.<br />
<br />
We also inspected the server archive in <span style="font-weight: bold;" class="mycode_b">/www/backup/wordpress/</span>. Its ZIP integrity check passed. It contained <span style="font-weight: bold;" class="mycode_b">meta.json</span>, <span style="font-weight: bold;" class="mycode_b">database.sql.gz</span> and <span style="font-weight: bold;" class="mycode_b">files.zip</span>. The nested website archive contained <span style="font-weight: bold;" class="mycode_b">wp-config.php</span>. These checks confirm that our job produced an archive with database and website-file components; they do not prove that a restoration will succeed.<br />
<br />
For administrators comfortable with the terminal, a read-only ZIP check is:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>unzip -t /www/backup/wordpress/YOUR-BACKUP-FILENAME.zip</code></div></div>Replace the filename with your actual archive. Do not paste a guessed filename or publish the contents of wp-config.php: it contains database credentials.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Keep a copy outside the VPS</span><br />
The archive row includes <span style="font-weight: bold;" class="mycode_b">Download</span>. Download it to a trusted device, confirm the file arrived and keep it in private backup storage. Check the downloaded copy’s integrity too. A backup can include credentials, private uploads and user data, so do not place it in a public website folder or attach it to a support thread.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Test limitation:</span> our browser download did not complete during this session. The server archive and its integrity were verified, but a downloaded copy was not. Do not count an attempted download as an off-server backup.<br />
<br />
The Schedule &amp; Remote Storage tab is a separate workflow. Before depending on a remote destination, confirm its availability in your edition, credentials, retained copies and recovery access. This guide did not configure remote storage or a schedule.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Understand Restore before clicking it</span><br />
The archive row also has <span style="font-weight: bold;" class="mycode_b">Restore</span>. Restoration can replace current website files and database content with an older state. That can remove changes made since the backup, including posts, orders or user registrations.<br />
<br />
Before restoring:<ul class="mycode_list"><li>Make a fresh backup of the current state and keep it outside the server.<br />
</li>
<li>Confirm the domain and exact archive date.<br />
</li>
<li>Use a staging site or maintenance window where possible.<br />
</li>
<li>Read the restore confirmation carefully and verify which data it will replace.<br />
</li>
</ul>
After a restore, check the homepage, WordPress login, important pages, media, forms, plugins and HTTPS. This walkthrough did <span style="font-weight: bold;" class="mycode_b">not</span> perform a restore; a dedicated recovery test is still needed before claiming the backup is recovery-tested.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Troubleshooting</span><br />
<span style="font-weight: bold;" class="mycode_b">Backup fails:</span> read the task result, check disk space and inspect the relevant panel logs. Fix the reported cause before retrying.<br />
<span style="font-weight: bold;" class="mycode_b">Archive is missing:</span> confirm the storage destination and refresh the backup list after the job finishes. Do not assume an older file is the new backup.<br />
<span style="font-weight: bold;" class="mycode_b">Download fails:</span> check your panel session and browser downloads. Keep the server archive intact while resolving access; do not delete it just because downloading failed.<br />
<span style="font-weight: bold;" class="mycode_b">The website changed after the backup:</span> take another copy before maintenance. An older archive cannot contain newer changes.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Final checklist</span><ul class="mycode_list"><li>Correct WordPress domain selected.<br />
</li>
<li>Backup type and destination reviewed.<br />
</li>
<li>Task completed successfully and archive exists.<br />
</li>
<li>Archive integrity checked.<br />
</li>
<li>Private off-server copy obtained and verified before relying on it for server-loss recovery.<br />
</li>
<li>Restoration tested separately before calling the backup recovery-tested.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Source:</span> <a href="https://www.aapanel.com/docs/Function/WPToolkit-Local.html" target="_blank" rel="noopener" class="mycode_url">aaPanel WP Toolkit documentation</a>. Screenshots and the backup result are from our own AdminsForum lab.]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">How do you back up WordPress in aaPanel WP Toolkit?</span><br />
Open WP Toolkit, select the website’s Backup link, confirm Full Backup and the storage destination, then click Backup. Wait for a successful result and verify that an archive appears before making website changes.<br />
<br />
This walkthrough uses our HTTPS test site, wp.adminslab.com, on aaPanel 8.0.6 Free Edition. We created a real backup and checked its archive on the server. A successful backup job is not the same as a tested restoration.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Before you begin</span><ul class="mycode_list"><li>Your WordPress site must already appear in WP Toolkit. If it does not, follow <a href="https://adminsforum.com/Thread-guide-install-wordpress-with-aapanel-wp-toolkit-free-edition" target="_blank" rel="noopener" class="mycode_url">Install WordPress with aaPanel WP Toolkit</a> first.<br />
</li>
<li>Have enough free disk space for the backup. Large uploads folders can make archives much larger than our example.<br />
</li>
<li>Avoid updating plugins, importing content or accepting important changes while the backup is running. A quiet period makes the files and database easier to keep consistent.<br />
</li>
<li>Check which site you selected. Our lab has other websites, so we verified the domain before starting.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">1. Open the website’s backup window</span><br />
Sign in to aaPanel and choose <span style="font-weight: bold;" class="mycode_b">WP Toolkit</span> in the left menu. Find the correct WordPress domain. Click the <span style="font-weight: bold;" class="mycode_b">Backup</span> link or backup count in its row. A site without a previous backup may show <span style="font-weight: bold;" class="mycode_b">0 Backup</span>.<br />
<br />
The window contains <span style="font-weight: bold;" class="mycode_b">Backup / Restore</span> and <span style="font-weight: bold;" class="mycode_b">Schedule &amp; Remote Storage</span>. For this guide, stay on Backup / Restore. This is a manual backup; it does not require creating a recurring task.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=42" target="_blank" title="">wp-toolkit-backup-before-20261012.jpg</a> (Size: 173.43 KB / Downloads: 8)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">The backup window before our first backup. Check the selected backup type and destination before clicking Backup.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Check the backup type and destination</span><br />
Our window displayed <span style="font-weight: bold;" class="mycode_b">Full Backup</span> to <span style="font-weight: bold;" class="mycode_b">Local Server</span>. If yours is different, use <span style="font-weight: bold;" class="mycode_b">click here to configure</span> and inspect the available choices before starting. Do not assume that a files-only or database-only backup can recover the whole website.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Local Server</span> means the copy remains on the same VPS. It is useful before a plugin update, but it will not protect you if the VPS and its disk are lost. Keep an additional copy outside that server.<br />
<br />
The panel also states <span style="font-weight: bold;" class="mycode_b">Subsites not included</span>. If you run WordPress Multisite, do not treat this walkthrough as a complete multisite recovery procedure. Verify the coverage and use a backup method appropriate to your network.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Run the backup and wait for completion</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Backup</span> once. Leave the operation running until aaPanel reports the result. A large site can take longer than this small installation. Do not repeatedly click Backup because the first job is still working.<br />
<br />
Our result was <span style="font-weight: bold;" class="mycode_b">1 success, 0 failed</span>. The table then showed a <span style="font-weight: bold;" class="mycode_b">35.28 MB</span> archive, marked Full Backup with Local Server storage. Your filename, timestamp and size will differ.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=43" target="_blank" title="">wp-toolkit-backup-success-20261012.jpg</a> (Size: 162.58 KB / Downloads: 7)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">Our completed backup. The successful task result and archive row are both visible.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Verify the backup before relying on it</span><br />
Check that the table contains a new archive with the expected time, a non-zero size and the intended storage location. A missing or unexpectedly small archive needs investigation.<br />
<br />
We also inspected the server archive in <span style="font-weight: bold;" class="mycode_b">/www/backup/wordpress/</span>. Its ZIP integrity check passed. It contained <span style="font-weight: bold;" class="mycode_b">meta.json</span>, <span style="font-weight: bold;" class="mycode_b">database.sql.gz</span> and <span style="font-weight: bold;" class="mycode_b">files.zip</span>. The nested website archive contained <span style="font-weight: bold;" class="mycode_b">wp-config.php</span>. These checks confirm that our job produced an archive with database and website-file components; they do not prove that a restoration will succeed.<br />
<br />
For administrators comfortable with the terminal, a read-only ZIP check is:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>unzip -t /www/backup/wordpress/YOUR-BACKUP-FILENAME.zip</code></div></div>Replace the filename with your actual archive. Do not paste a guessed filename or publish the contents of wp-config.php: it contains database credentials.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Keep a copy outside the VPS</span><br />
The archive row includes <span style="font-weight: bold;" class="mycode_b">Download</span>. Download it to a trusted device, confirm the file arrived and keep it in private backup storage. Check the downloaded copy’s integrity too. A backup can include credentials, private uploads and user data, so do not place it in a public website folder or attach it to a support thread.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Test limitation:</span> our browser download did not complete during this session. The server archive and its integrity were verified, but a downloaded copy was not. Do not count an attempted download as an off-server backup.<br />
<br />
The Schedule &amp; Remote Storage tab is a separate workflow. Before depending on a remote destination, confirm its availability in your edition, credentials, retained copies and recovery access. This guide did not configure remote storage or a schedule.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Understand Restore before clicking it</span><br />
The archive row also has <span style="font-weight: bold;" class="mycode_b">Restore</span>. Restoration can replace current website files and database content with an older state. That can remove changes made since the backup, including posts, orders or user registrations.<br />
<br />
Before restoring:<ul class="mycode_list"><li>Make a fresh backup of the current state and keep it outside the server.<br />
</li>
<li>Confirm the domain and exact archive date.<br />
</li>
<li>Use a staging site or maintenance window where possible.<br />
</li>
<li>Read the restore confirmation carefully and verify which data it will replace.<br />
</li>
</ul>
After a restore, check the homepage, WordPress login, important pages, media, forms, plugins and HTTPS. This walkthrough did <span style="font-weight: bold;" class="mycode_b">not</span> perform a restore; a dedicated recovery test is still needed before claiming the backup is recovery-tested.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Troubleshooting</span><br />
<span style="font-weight: bold;" class="mycode_b">Backup fails:</span> read the task result, check disk space and inspect the relevant panel logs. Fix the reported cause before retrying.<br />
<span style="font-weight: bold;" class="mycode_b">Archive is missing:</span> confirm the storage destination and refresh the backup list after the job finishes. Do not assume an older file is the new backup.<br />
<span style="font-weight: bold;" class="mycode_b">Download fails:</span> check your panel session and browser downloads. Keep the server archive intact while resolving access; do not delete it just because downloading failed.<br />
<span style="font-weight: bold;" class="mycode_b">The website changed after the backup:</span> take another copy before maintenance. An older archive cannot contain newer changes.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Final checklist</span><ul class="mycode_list"><li>Correct WordPress domain selected.<br />
</li>
<li>Backup type and destination reviewed.<br />
</li>
<li>Task completed successfully and archive exists.<br />
</li>
<li>Archive integrity checked.<br />
</li>
<li>Private off-server copy obtained and verified before relying on it for server-loss recovery.<br />
</li>
<li>Restoration tested separately before calling the backup recovery-tested.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Source:</span> <a href="https://www.aapanel.com/docs/Function/WPToolkit-Local.html" target="_blank" rel="noopener" class="mycode_url">aaPanel WP Toolkit documentation</a>. Screenshots and the backup result are from our own AdminsForum lab.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Install WordPress with aaPanel WP Toolkit (Free Edition)]]></title>
			<link>https://adminsforum.com/Thread-guide-install-wordpress-with-aapanel-wp-toolkit-free-edition</link>
			<pubDate>Mon, 12 Oct 2026 11:40:47 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-install-wordpress-with-aapanel-wp-toolkit-free-edition</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">Quick answer</span><br />
Point your domain's A record to the VPS, open WP Toolkit → Add Wordpress, enter the domain, website title and administrator email, choose PHP and WordPress versions, and confirm installation. Check HTTPS and log in at /wp-admin. On our Free Edition lab, password-free login opened a Pro upgrade prompt; normal WordPress login worked.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tested result</span><br />
We created a separate website at wp.adminslab.com using aaPanel 8.0.6 Free Edition, Nginx, PHP 8.5 and WordPress 7.1.3. The homepage loaded over HTTPS, HTTP redirected to HTTPS, and normal login reached the authenticated WordPress dashboard. The existing manually installed WordPress site was kept separate.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Before starting</span><ul class="mycode_list"><li>A working aaPanel installation with a web server, compatible PHP and MySQL/MariaDB.<br />
</li>
<li>A domain or subdomain you control, pointing to the VPS.<br />
</li>
<li>Access to DNS settings and aaPanel. Sign in to your aaPanel vendor account if the Toolkit requires it.<br />
</li>
<li>An administrator email address you can use for the website.<br />
</li>
<li>A fresh site location. Do not reuse an existing website directory without a verified backup and migration plan.<br />
</li>
</ul>
This guide creates a new WordPress website. For an existing site, use an appropriate import or migration workflow instead of creating over it.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Add the domain's DNS record</span><br />
We used a separate subdomain so the demonstration did not replace our existing site. In Cloudflare → DNS → Records, we added an A record with name wp and the lab VPS address, using DNS only for the initial setup. Use your own server address, not the lab address.<br />
<br />
Wait for the domain to resolve to the intended server before applying for SSL. Avoid adding an unrelated AAAA record pointing elsewhere. If you use Cloudflare proxying, review certificate validation and your SSL mode deliberately rather than assuming a certificate is already installed at the origin.<br />
<br />
For the DNS setup workflow, see the Cloudflare guides in the <a href="https://adminsforum.com/Forum-cloudflare" target="_blank" rel="noopener" class="mycode_url">Cloudflare section</a>.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Open WP Toolkit</span><br />
In aaPanel's left menu, click WP Toolkit. Use Local Manage for a site hosted on this server, then click Add Wordpress. Select Create site in the dialog.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Fill the new-site form</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Domain:</span> enter the website hostname, such as wp.yourdomain.com.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Apply for SSL:</span> keep this checked when DNS and validation access are ready.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Website Title:</span> the public WordPress site title; ours was AdminsForum WordPress Lab.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Email:</span> the website administrator email.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">PHP version:</span> choose an installed version compatible with WordPress and the plugins you intend to use.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">WP version:</span> review the version offered rather than assuming every server shows the same number.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Language:</span> choose the installation language.<br />
</li>
</ul>
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=38" target="_blank" title="">wp-toolkit-create-form-20261012.jpg</a> (Size: 179.49 KB / Downloads: 9)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">AdminsForum lab: the new-site form. The private credential fields are not shown.</span><br />
<br />
Our lab selected PHP 8.5 and WordPress 7.1.3. These are the versions actually used for this test, not a promise that future Toolkit releases show the same choices.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Review More settings and keep credentials private</span><br />
Expand More settings when you need to inspect the administrator account, database options, table prefix, cache or subdirectory. WP Toolkit generated strong initial credentials in our test; we retained them instead of enabling weak passwords.<br />
<br />
Record the generated username and password privately. The completed installation can show them in its result dialog. Do not include that dialog, database passwords or login tokens in tutorial screenshots. Use a password manager or another secure record for your real site.<br />
<br />
We left the subdirectory field empty because this was a separate hostname. Installing into a subdirectory changes the expected website and login URLs. Review the cache option too, especially before later adding an application-level cache plugin.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Confirm and wait for completion</span><br />
Click Confirm once. Wait for website creation and initialization; avoid repeating the action while it is working. The site appeared in Local Manage, and its SSL column progressed from initialization to a certificate lifetime indicator.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=39" target="_blank" title="">wp-toolkit-installed-20261012.jpg</a> (Size: 157.77 KB / Downloads: 11)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">AdminsForum lab: the installed website in WP Toolkit, with WordPress/PHP versions and SSL status.</span><br />
<br />
If creation fails, investigate the site's Log and panel run logs before retrying. Check for an existing domain/directory, missing runtime, database connection error or certificate-validation failure. Do not delete an existing website merely to dismiss an installation error.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Verify the public website and HTTPS</span><br />
Open the site in a browser. Confirm the title and expected WordPress homepage. Check the HTTPS address loads without a certificate warning. In our test, opening HTTP redirected to HTTPS and displayed the new site.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=40" target="_blank" title="">wp-toolkit-homepage-20261012.jpg</a> (Size: 82.16 KB / Downloads: 10)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">AdminsForum lab: the new WordPress homepage served over HTTPS.</span><br />
<br />
If WordPress loads but SSL did not finish, inspect the SSL status separately. Check DNS, validation accessibility and the certificate's domain. Do not work around a browser certificate warning and call that a successful SSL test.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">7. Log in normally on Free Edition</span><br />
Open your site's /wp-admin address. Enter the generated WordPress username and password and click Log In. Our normal login reached the WordPress dashboard.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=41" target="_blank" title="">wp-toolkit-dashboard-20261012.jpg</a> (Size: 214.37 KB / Downloads: 11)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">AdminsForum lab: authenticated WordPress dashboard after a successful normal login.</span><br />
<br />
WP Toolkit's Login menu offered both Password-free login and Login. On this Free Edition lab, Password-free login opened a Pro upgrade prompt. We did not purchase an upgrade or claim that feature worked. Normal WordPress login was sufficient to complete the test.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">8. Check the first settings and make a backup</span><br />
Review Settings → General for the title and administrator email. Review Permalinks, update availability and Site Health. Treat any update or plugin installation as a separate operation to check and back up beforehand.<br />
<br />
Before building the site further, make a backup and verify what it contains. A WordPress recovery plan needs both website files and the database. See the <a href="https://adminsforum.com/Thread-guide-schedule-automatic-website-backups-in-aapanel" target="_blank" rel="noopener" class="mycode_url">website backup schedule guide</a> and <a href="https://adminsforum.com/Thread-guide-schedule-automatic-mysql-database-backups-in-aapanel" target="_blank" rel="noopener" class="mycode_url">database backup schedule guide</a>. WP Toolkit's own backup workflow will be covered separately.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Common problems</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Domain cannot be validated:</span> confirm the DNS record and the actual origin serving the hostname.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">PHP choice missing:</span> install a supported runtime first and re-open the form.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Initialization remains incomplete:</span> read the site and panel logs; do not repeatedly create duplicate sites.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Password-free login asks for Pro:</span> use normal WordPress login on Free Edition.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">A 502 error:</span> check the assigned PHP runtime, its service status and the web-server/PHP connection.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Login fails:</span> verify the hostname and saved WordPress credentials. The aaPanel panel password is not the WordPress account password.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Completion checklist</span><ul class="mycode_list"><li>Domain resolves to the correct VPS.<br />
</li>
<li>New site appears in WP Toolkit.<br />
</li>
<li>Expected WordPress and PHP versions selected.<br />
</li>
<li>Homepage loads and HTTPS is valid.<br />
</li>
<li>Normal WordPress login reaches the dashboard.<br />
</li>
<li>Private credentials kept out of public screenshots.<br />
</li>
<li>Files/database backup and update plan prepared.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Reference:</span> <a href="https://www.aapanel.com/docs/Function/WPToolkit-Local.html" target="_blank" rel="noopener" class="mycode_url">aaPanel official WP Toolkit Local Manage documentation</a>.]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">Quick answer</span><br />
Point your domain's A record to the VPS, open WP Toolkit → Add Wordpress, enter the domain, website title and administrator email, choose PHP and WordPress versions, and confirm installation. Check HTTPS and log in at /wp-admin. On our Free Edition lab, password-free login opened a Pro upgrade prompt; normal WordPress login worked.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tested result</span><br />
We created a separate website at wp.adminslab.com using aaPanel 8.0.6 Free Edition, Nginx, PHP 8.5 and WordPress 7.1.3. The homepage loaded over HTTPS, HTTP redirected to HTTPS, and normal login reached the authenticated WordPress dashboard. The existing manually installed WordPress site was kept separate.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Before starting</span><ul class="mycode_list"><li>A working aaPanel installation with a web server, compatible PHP and MySQL/MariaDB.<br />
</li>
<li>A domain or subdomain you control, pointing to the VPS.<br />
</li>
<li>Access to DNS settings and aaPanel. Sign in to your aaPanel vendor account if the Toolkit requires it.<br />
</li>
<li>An administrator email address you can use for the website.<br />
</li>
<li>A fresh site location. Do not reuse an existing website directory without a verified backup and migration plan.<br />
</li>
</ul>
This guide creates a new WordPress website. For an existing site, use an appropriate import or migration workflow instead of creating over it.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Add the domain's DNS record</span><br />
We used a separate subdomain so the demonstration did not replace our existing site. In Cloudflare → DNS → Records, we added an A record with name wp and the lab VPS address, using DNS only for the initial setup. Use your own server address, not the lab address.<br />
<br />
Wait for the domain to resolve to the intended server before applying for SSL. Avoid adding an unrelated AAAA record pointing elsewhere. If you use Cloudflare proxying, review certificate validation and your SSL mode deliberately rather than assuming a certificate is already installed at the origin.<br />
<br />
For the DNS setup workflow, see the Cloudflare guides in the <a href="https://adminsforum.com/Forum-cloudflare" target="_blank" rel="noopener" class="mycode_url">Cloudflare section</a>.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Open WP Toolkit</span><br />
In aaPanel's left menu, click WP Toolkit. Use Local Manage for a site hosted on this server, then click Add Wordpress. Select Create site in the dialog.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Fill the new-site form</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Domain:</span> enter the website hostname, such as wp.yourdomain.com.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Apply for SSL:</span> keep this checked when DNS and validation access are ready.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Website Title:</span> the public WordPress site title; ours was AdminsForum WordPress Lab.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Email:</span> the website administrator email.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">PHP version:</span> choose an installed version compatible with WordPress and the plugins you intend to use.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">WP version:</span> review the version offered rather than assuming every server shows the same number.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Language:</span> choose the installation language.<br />
</li>
</ul>
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=38" target="_blank" title="">wp-toolkit-create-form-20261012.jpg</a> (Size: 179.49 KB / Downloads: 9)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">AdminsForum lab: the new-site form. The private credential fields are not shown.</span><br />
<br />
Our lab selected PHP 8.5 and WordPress 7.1.3. These are the versions actually used for this test, not a promise that future Toolkit releases show the same choices.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Review More settings and keep credentials private</span><br />
Expand More settings when you need to inspect the administrator account, database options, table prefix, cache or subdirectory. WP Toolkit generated strong initial credentials in our test; we retained them instead of enabling weak passwords.<br />
<br />
Record the generated username and password privately. The completed installation can show them in its result dialog. Do not include that dialog, database passwords or login tokens in tutorial screenshots. Use a password manager or another secure record for your real site.<br />
<br />
We left the subdirectory field empty because this was a separate hostname. Installing into a subdirectory changes the expected website and login URLs. Review the cache option too, especially before later adding an application-level cache plugin.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Confirm and wait for completion</span><br />
Click Confirm once. Wait for website creation and initialization; avoid repeating the action while it is working. The site appeared in Local Manage, and its SSL column progressed from initialization to a certificate lifetime indicator.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=39" target="_blank" title="">wp-toolkit-installed-20261012.jpg</a> (Size: 157.77 KB / Downloads: 11)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">AdminsForum lab: the installed website in WP Toolkit, with WordPress/PHP versions and SSL status.</span><br />
<br />
If creation fails, investigate the site's Log and panel run logs before retrying. Check for an existing domain/directory, missing runtime, database connection error or certificate-validation failure. Do not delete an existing website merely to dismiss an installation error.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Verify the public website and HTTPS</span><br />
Open the site in a browser. Confirm the title and expected WordPress homepage. Check the HTTPS address loads without a certificate warning. In our test, opening HTTP redirected to HTTPS and displayed the new site.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=40" target="_blank" title="">wp-toolkit-homepage-20261012.jpg</a> (Size: 82.16 KB / Downloads: 10)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">AdminsForum lab: the new WordPress homepage served over HTTPS.</span><br />
<br />
If WordPress loads but SSL did not finish, inspect the SSL status separately. Check DNS, validation accessibility and the certificate's domain. Do not work around a browser certificate warning and call that a successful SSL test.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">7. Log in normally on Free Edition</span><br />
Open your site's /wp-admin address. Enter the generated WordPress username and password and click Log In. Our normal login reached the WordPress dashboard.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=41" target="_blank" title="">wp-toolkit-dashboard-20261012.jpg</a> (Size: 214.37 KB / Downloads: 11)
<!-- end: postbit_attachments_attachment --><br />
<span style="font-style: italic;" class="mycode_i">AdminsForum lab: authenticated WordPress dashboard after a successful normal login.</span><br />
<br />
WP Toolkit's Login menu offered both Password-free login and Login. On this Free Edition lab, Password-free login opened a Pro upgrade prompt. We did not purchase an upgrade or claim that feature worked. Normal WordPress login was sufficient to complete the test.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">8. Check the first settings and make a backup</span><br />
Review Settings → General for the title and administrator email. Review Permalinks, update availability and Site Health. Treat any update or plugin installation as a separate operation to check and back up beforehand.<br />
<br />
Before building the site further, make a backup and verify what it contains. A WordPress recovery plan needs both website files and the database. See the <a href="https://adminsforum.com/Thread-guide-schedule-automatic-website-backups-in-aapanel" target="_blank" rel="noopener" class="mycode_url">website backup schedule guide</a> and <a href="https://adminsforum.com/Thread-guide-schedule-automatic-mysql-database-backups-in-aapanel" target="_blank" rel="noopener" class="mycode_url">database backup schedule guide</a>. WP Toolkit's own backup workflow will be covered separately.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Common problems</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Domain cannot be validated:</span> confirm the DNS record and the actual origin serving the hostname.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">PHP choice missing:</span> install a supported runtime first and re-open the form.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Initialization remains incomplete:</span> read the site and panel logs; do not repeatedly create duplicate sites.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Password-free login asks for Pro:</span> use normal WordPress login on Free Edition.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">A 502 error:</span> check the assigned PHP runtime, its service status and the web-server/PHP connection.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Login fails:</span> verify the hostname and saved WordPress credentials. The aaPanel panel password is not the WordPress account password.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Completion checklist</span><ul class="mycode_list"><li>Domain resolves to the correct VPS.<br />
</li>
<li>New site appears in WP Toolkit.<br />
</li>
<li>Expected WordPress and PHP versions selected.<br />
</li>
<li>Homepage loads and HTTPS is valid.<br />
</li>
<li>Normal WordPress login reaches the dashboard.<br />
</li>
<li>Private credentials kept out of public screenshots.<br />
</li>
<li>Files/database backup and update plan prepared.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Reference:</span> <a href="https://www.aapanel.com/docs/Function/WPToolkit-Local.html" target="_blank" rel="noopener" class="mycode_url">aaPanel official WP Toolkit Local Manage documentation</a>.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Fix WordPress Permalink 404s in aaPanel Free Edition (Nginx)]]></title>
			<link>https://adminsforum.com/Thread-guide-fix-wordpress-permalink-404s-in-aapanel-free-edition-nginx</link>
			<pubDate>Sun, 11 Oct 2026 13:28:42 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-fix-wordpress-permalink-404s-in-aapanel-free-edition-nginx</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">Quick answer</span><br />
If WordPress pages work with ?p=123 but pretty post URLs return 404 on aaPanel with Nginx, check both WordPress Settings → Permalinks and the site's Nginx rewrite configuration. Saving WordPress permalinks does not make Nginx read .htaccess.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Before changing rules</span><br />
Back up the current rewrite configuration and record the current WordPress permalink setting. Confirm the site's web server is Nginx and whether WordPress is installed at the domain root or inside a folder. This guide is for a single WordPress installation, not Multisite.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Choose the WordPress URL format</span><br />
Log in to WordPress, open <span style="font-weight: bold;" class="mycode_b">Settings → Permalinks</span>, choose <span style="font-weight: bold;" class="mycode_b">Post name</span> if that is the structure you want, and click <span style="font-weight: bold;" class="mycode_b">Save Changes</span>. On our fresh lab site the structure changed from plain query URLs to /%postname%/.<br />
<br />
<img src="https://adminsforum.com/attachment.php?aid=26" loading="lazy"  alt="[Image: attachment.php?aid=26]" class="mycode_img" /><br />
<span style="font-style: italic;" class="mycode_i">AdminsForum WordPress lab: Post name selected in Permalink Settings.</span><br />
<br />
For an established site, changing public URL structure needs a redirect plan for existing links. This example uses a new disposable lab site.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Open the aaPanel rewrite configuration</span><br />
Open <span style="font-weight: bold;" class="mycode_b">Website → the intended site's settings → URL rewrite</span>. Read and back up the existing rules before editing. Preserve unrelated HTTPS redirects and other application rules. Do not create duplicate location blocks.<br />
<br />
Nginx needs a fallback to WordPress index.php for URLs that are not physical files. The <a href="https://developer.wordpress.org/advanced-administration/server/web-server/nginx/" target="_blank" rel="noopener" class="mycode_url">official WordPress Nginx documentation</a> describes this approach.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Use the rule matching the installation folder</span><br />
Our lab has WordPress in <span style="font-weight: bold;" class="mycode_b">/wordpress/</span>, while the domain root contains other tutorial examples. We added this site-specific block to its rewrite configuration:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code># AdminsForum WordPress subfolder tutorial
location /wordpress/ {
    try_files &#36;uri &#36;uri/ /wordpress/index.php?&#36;args;
}</code></div></div><br />
This checks for an existing file or directory first, then sends other requests in that folder to WordPress. Query parameters are retained. The site's existing aaPanel PHP handler remains responsible for executing PHP.<br />
<br />
If WordPress is installed at the domain root instead, the usual fallback is:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>location / {
    try_files &#36;uri &#36;uri/ /index.php?&#36;args;
}</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Choose the correct block, not both indiscriminately.</span> The root example assumes the root is actually your WordPress installation. If a matching location already exists, update that block rather than adding a duplicate. Custom proxies, caching, Multisite or other applications need configuration suited to their setup.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Save and validate</span><br />
Save the aaPanel rewrite configuration and confirm there is no configuration error. An operator with SSH can also run the aaPanel Nginx binary's configuration test:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>/www/server/nginx/sbin/nginx -t</code></div></div>Only reload a valid configuration. If validation fails, restore your saved rules and investigate the exact error. Our lab configuration passed before reload.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Test an actual post URL</span><br />
Open a published post using its new URL, not only the homepage. Our lab test was <span style="font-weight: bold;" class="mycode_b">/wordpress/hello-world/</span>. It returned HTTP 200 and the expected post title after the change.<br />
<br />
Also check a page, the WordPress homepage, existing static files and any other applications sharing the domain. Our domain homepage and File Manager demo continued returning HTTP 200.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Rollback</span><br />
Restore the previous rewrite configuration if the new rules cause problems. If you changed WordPress's permalink structure, restore the recorded previous setting as appropriate. Preserve the existing PHP and HTTPS configuration rather than replacing the whole virtual host.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Common problems</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Duplicate location error:</span> edit the existing matching location instead of adding another.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Homepage works but posts 404:</span> verify the fallback path and installation folder.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Other applications stop working:</span> a root-level catch-all may be routing their requests to WordPress. Use a correctly scoped block.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">PHP source is exposed:</span> stop and repair the site's PHP handler before proceeding; a rewrite rule alone is not PHP configuration.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Redirect loops:</span> review HTTPS/proxy and WordPress home/siteurl settings separately.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Verified on 11 October 2026</span><br />
We backed up our lab's existing rewrite configuration, added a /wordpress/ fallback, passed the Nginx configuration test, selected Post name through the WordPress dashboard and tested the published post URL. WordPress 7.1.3 ran on PHP 8.5.11 with aaPanel Free Edition 8.0.6. The domain homepage and original static demo remained available.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Related guide:</span> <a href="https://adminsforum.com/Thread-guide-install-wordpress-manually-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Install WordPress manually in aaPanel Free Edition</a><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=26" target="_blank" title="">wordpress-permalinks-20261011.jpg</a> (Size: 105.59 KB / Downloads: 9)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">Quick answer</span><br />
If WordPress pages work with ?p=123 but pretty post URLs return 404 on aaPanel with Nginx, check both WordPress Settings → Permalinks and the site's Nginx rewrite configuration. Saving WordPress permalinks does not make Nginx read .htaccess.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Before changing rules</span><br />
Back up the current rewrite configuration and record the current WordPress permalink setting. Confirm the site's web server is Nginx and whether WordPress is installed at the domain root or inside a folder. This guide is for a single WordPress installation, not Multisite.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Choose the WordPress URL format</span><br />
Log in to WordPress, open <span style="font-weight: bold;" class="mycode_b">Settings → Permalinks</span>, choose <span style="font-weight: bold;" class="mycode_b">Post name</span> if that is the structure you want, and click <span style="font-weight: bold;" class="mycode_b">Save Changes</span>. On our fresh lab site the structure changed from plain query URLs to /%postname%/.<br />
<br />
<img src="https://adminsforum.com/attachment.php?aid=26" loading="lazy"  alt="[Image: attachment.php?aid=26]" class="mycode_img" /><br />
<span style="font-style: italic;" class="mycode_i">AdminsForum WordPress lab: Post name selected in Permalink Settings.</span><br />
<br />
For an established site, changing public URL structure needs a redirect plan for existing links. This example uses a new disposable lab site.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Open the aaPanel rewrite configuration</span><br />
Open <span style="font-weight: bold;" class="mycode_b">Website → the intended site's settings → URL rewrite</span>. Read and back up the existing rules before editing. Preserve unrelated HTTPS redirects and other application rules. Do not create duplicate location blocks.<br />
<br />
Nginx needs a fallback to WordPress index.php for URLs that are not physical files. The <a href="https://developer.wordpress.org/advanced-administration/server/web-server/nginx/" target="_blank" rel="noopener" class="mycode_url">official WordPress Nginx documentation</a> describes this approach.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Use the rule matching the installation folder</span><br />
Our lab has WordPress in <span style="font-weight: bold;" class="mycode_b">/wordpress/</span>, while the domain root contains other tutorial examples. We added this site-specific block to its rewrite configuration:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code># AdminsForum WordPress subfolder tutorial
location /wordpress/ {
    try_files &#36;uri &#36;uri/ /wordpress/index.php?&#36;args;
}</code></div></div><br />
This checks for an existing file or directory first, then sends other requests in that folder to WordPress. Query parameters are retained. The site's existing aaPanel PHP handler remains responsible for executing PHP.<br />
<br />
If WordPress is installed at the domain root instead, the usual fallback is:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>location / {
    try_files &#36;uri &#36;uri/ /index.php?&#36;args;
}</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Choose the correct block, not both indiscriminately.</span> The root example assumes the root is actually your WordPress installation. If a matching location already exists, update that block rather than adding a duplicate. Custom proxies, caching, Multisite or other applications need configuration suited to their setup.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Save and validate</span><br />
Save the aaPanel rewrite configuration and confirm there is no configuration error. An operator with SSH can also run the aaPanel Nginx binary's configuration test:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>/www/server/nginx/sbin/nginx -t</code></div></div>Only reload a valid configuration. If validation fails, restore your saved rules and investigate the exact error. Our lab configuration passed before reload.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Test an actual post URL</span><br />
Open a published post using its new URL, not only the homepage. Our lab test was <span style="font-weight: bold;" class="mycode_b">/wordpress/hello-world/</span>. It returned HTTP 200 and the expected post title after the change.<br />
<br />
Also check a page, the WordPress homepage, existing static files and any other applications sharing the domain. Our domain homepage and File Manager demo continued returning HTTP 200.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Rollback</span><br />
Restore the previous rewrite configuration if the new rules cause problems. If you changed WordPress's permalink structure, restore the recorded previous setting as appropriate. Preserve the existing PHP and HTTPS configuration rather than replacing the whole virtual host.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Common problems</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Duplicate location error:</span> edit the existing matching location instead of adding another.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Homepage works but posts 404:</span> verify the fallback path and installation folder.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Other applications stop working:</span> a root-level catch-all may be routing their requests to WordPress. Use a correctly scoped block.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">PHP source is exposed:</span> stop and repair the site's PHP handler before proceeding; a rewrite rule alone is not PHP configuration.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Redirect loops:</span> review HTTPS/proxy and WordPress home/siteurl settings separately.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Verified on 11 October 2026</span><br />
We backed up our lab's existing rewrite configuration, added a /wordpress/ fallback, passed the Nginx configuration test, selected Post name through the WordPress dashboard and tested the published post URL. WordPress 7.1.3 ran on PHP 8.5.11 with aaPanel Free Edition 8.0.6. The domain homepage and original static demo remained available.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Related guide:</span> <a href="https://adminsforum.com/Thread-guide-install-wordpress-manually-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Install WordPress manually in aaPanel Free Edition</a><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=26" target="_blank" title="">wordpress-permalinks-20261011.jpg</a> (Size: 105.59 KB / Downloads: 9)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Install WordPress Manually in aaPanel Free Edition]]></title>
			<link>https://adminsforum.com/Thread-guide-install-wordpress-manually-in-aapanel-free-edition</link>
			<pubDate>Sun, 11 Oct 2026 13:26:30 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-install-wordpress-manually-in-aapanel-free-edition</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">Quick answer</span><br />
To install WordPress manually on aaPanel Free Edition, prepare a working PHP website with HTTPS, create a dedicated database/user, place the official WordPress files in the intended website folder, supply the database configuration, and complete installation. Verify both the site and login page.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Requirements</span><ul class="mycode_list"><li>A domain already pointing to the VPS and a working HTTPS website in aaPanel.<br />
</li>
<li>A compatible PHP version with the extensions your application requires.<br />
</li>
<li>MySQL or MariaDB and a dedicated database user. Our lab uses MariaDB 10.11.<br />
</li>
<li>A backup if you are using a folder or database that already contains anything important.<br />
</li>
</ul>
Check the current <a href="https://wordpress.org/download/" target="_blank" rel="noopener" class="mycode_url">WordPress requirements</a> and <a href="https://make.wordpress.org/core/handbook/references/php-compatibility-and-wordpress-versions/" target="_blank" rel="noopener" class="mycode_url">PHP compatibility table</a>. Theme and plugin compatibility must be checked separately from WordPress core.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Decide where WordPress should live</span><br />
For a fresh website homepage, place the WordPress package contents in that site's document root. For a separate installation under /wordpress/, keep the package in that subfolder. Do not accidentally create an extra nested wordpress/wordpress folder.<br />
<br />
Our dedicated lab uses <span style="font-weight: bold;" class="mycode_b"><a href="https://adminslab.com/wordpress/" target="_blank" rel="noopener" class="mycode_url">https://adminslab.com/wordpress/</a></span> so the original homepage and other tutorial examples remain available. This is an example URL, not the location you should enter for your own site.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Create a dedicated database</span><br />
Use <span style="font-weight: bold;" class="mycode_b">Databases → MySQL → Add DB</span> in aaPanel, or the equivalent panel-managed database operation. Record the database name, username, password and host privately. Use a user scoped to the application database; do not put the MariaDB root password into WordPress.<br />
<br />
See <a href="https://adminsforum.com/Thread-guide-create-a-database-and-user-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Create a database and user in aaPanel Free Edition</a>. A database on the same VPS does not require exposing port 3306 publicly.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Download the official package</span><br />
Get the package from <a href="https://wordpress.org/download/" target="_blank" rel="noopener" class="mycode_url">WordPress.org</a>. Extract the ZIP on your computer and upload its contents to the chosen folder using File Manager or a secure transfer method. Confirm files such as index.php, wp-admin and wp-includes are in the intended location.<br />
<br />
Our lab used the official ZIP package in private server staging. We checked the extracted WordPress core files against official checksums before making the completed installation available.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Configure the database and install</span><br />
For the browser method described in the <a href="https://developer.wordpress.org/advanced-administration/before-install/howto-install/" target="_blank" rel="noopener" class="mycode_url">official installation guide</a>, open the installation URL for the chosen folder. Supply the database details privately when prompted, then set your site title, administrator account and email. Use a strong unique administrator password and save it securely. Avoid screenshots containing passwords or configuration secrets.<br />
<br />
If WordPress cannot create wp-config.php, configure that file securely using the official instructions. Never make it world-writable as a general workaround.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">How our lab completed this step</span><br />
We completed configuration and database installation with <a href="https://developer.wordpress.org/cli/commands/core/install/" target="_blank" rel="noopener" class="mycode_url">WP-CLI</a> from the server, rather than entering a new administrator credential into the browser installer. This guide does not claim that the browser installation form was tested end to end.<br />
<br />
An operator using WP-CLI should use the intended site's path and explicit URL, provide credentials privately, and check siteurl/home after moving a staged installation. We set both to the final HTTPS /wordpress address. Credentials are kept out of the public guide.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Check the installed site</span><br />
Open the site's HTTPS URL and the wp-login.php page in its installation folder. Check that internal links point to the correct hostname and folder, and that styles and images load.<br />
<br />
<img src="https://adminsforum.com/attachment.php?aid=25" loading="lazy"  alt="[Image: attachment.php?aid=25]" class="mycode_img" /><br />
<span style="font-style: italic;" class="mycode_i">Original AdminsForum WordPress Tutorial Lab after installation on aaPanel Free Edition.</span><br />
<br />
For your own site, log in and check the dashboard, save a draft, upload a small test image and verify the functions you need. A homepage response alone is not a full application acceptance test. Confirm outgoing email separately before relying on password-reset or notification messages.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Choose permalink rules separately</span><br />
The lab initially uses plain query-string permalinks. If you enable pretty permalinks, configure the matching WordPress rewrite rules for your web server and installation folder, then test a post URL. Nginx does not apply Apache .htaccess rules. Do not paste a root-directory rewrite into a subfolder installation without adapting it.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">7. Basic checks after installation</span><ul class="mycode_list"><li>Keep WordPress, themes and plugins updated after compatibility checks and backups.<br />
</li>
<li>Remove unused plugins/themes and use only trusted sources.<br />
</li>
<li>Take both file and database backups and test recovery.<br />
</li>
<li>For a tutorial/staging site, discourage search indexing and use stronger access restrictions if it contains private data. A search-indexing preference is not access control.<br />
</li>
<li>Verify email delivery separately; it was not configured or tested in our lab.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Common problems</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Error establishing a database connection:</span> check database name, user, password, host and the database service.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Blank page or fatal error:</span> inspect PHP logs and extension/application compatibility.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Wrong links after moving files:</span> check WordPress Address/siteurl and Site Address/home.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Pretty permalinks return 404:</span> verify the correct web-server rewrite rules for the actual installation folder.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Uploads fail:</span> check ownership, permissions, PHP upload limits and free space without using 777 as a blanket fix.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Verified on 10 October 2026</span><br />
Our lab installed WordPress 7.1.3 from the official ZIP, verified core checksums, configured a dedicated local database and completed installation with WP-CLI. The website runs on aaPanel Free Edition 8.0.6 with PHP 8.5.11 and MariaDB 10.11. The final HTTPS homepage and login page both returned HTTP 200, and homepage links used the correct /wordpress address. On 11 October 2026 we also verified administrator browser login and uploaded an original test image through the WordPress media uploader. Mail delivery and pretty permalinks remain separate checks.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Related guides</span><br />
<a href="https://adminsforum.com/Thread-guide-upload-website-files-with-aapanel-free-edition-file-manager" target="_blank" rel="noopener" class="mycode_url">Upload website files with aaPanel File Manager</a><br />
<a href="https://adminsforum.com/Thread-guide-back-up-and-restore-website-files-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Back up website files</a><br />
<a href="https://adminsforum.com/Thread-guide-back-up-and-restore-a-database-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Back up the database</a><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=25" target="_blank" title="">wordpress-lab-live-20261010.jpg</a> (Size: 48.24 KB / Downloads: 8)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">Quick answer</span><br />
To install WordPress manually on aaPanel Free Edition, prepare a working PHP website with HTTPS, create a dedicated database/user, place the official WordPress files in the intended website folder, supply the database configuration, and complete installation. Verify both the site and login page.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Requirements</span><ul class="mycode_list"><li>A domain already pointing to the VPS and a working HTTPS website in aaPanel.<br />
</li>
<li>A compatible PHP version with the extensions your application requires.<br />
</li>
<li>MySQL or MariaDB and a dedicated database user. Our lab uses MariaDB 10.11.<br />
</li>
<li>A backup if you are using a folder or database that already contains anything important.<br />
</li>
</ul>
Check the current <a href="https://wordpress.org/download/" target="_blank" rel="noopener" class="mycode_url">WordPress requirements</a> and <a href="https://make.wordpress.org/core/handbook/references/php-compatibility-and-wordpress-versions/" target="_blank" rel="noopener" class="mycode_url">PHP compatibility table</a>. Theme and plugin compatibility must be checked separately from WordPress core.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Decide where WordPress should live</span><br />
For a fresh website homepage, place the WordPress package contents in that site's document root. For a separate installation under /wordpress/, keep the package in that subfolder. Do not accidentally create an extra nested wordpress/wordpress folder.<br />
<br />
Our dedicated lab uses <span style="font-weight: bold;" class="mycode_b"><a href="https://adminslab.com/wordpress/" target="_blank" rel="noopener" class="mycode_url">https://adminslab.com/wordpress/</a></span> so the original homepage and other tutorial examples remain available. This is an example URL, not the location you should enter for your own site.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Create a dedicated database</span><br />
Use <span style="font-weight: bold;" class="mycode_b">Databases → MySQL → Add DB</span> in aaPanel, or the equivalent panel-managed database operation. Record the database name, username, password and host privately. Use a user scoped to the application database; do not put the MariaDB root password into WordPress.<br />
<br />
See <a href="https://adminsforum.com/Thread-guide-create-a-database-and-user-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Create a database and user in aaPanel Free Edition</a>. A database on the same VPS does not require exposing port 3306 publicly.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Download the official package</span><br />
Get the package from <a href="https://wordpress.org/download/" target="_blank" rel="noopener" class="mycode_url">WordPress.org</a>. Extract the ZIP on your computer and upload its contents to the chosen folder using File Manager or a secure transfer method. Confirm files such as index.php, wp-admin and wp-includes are in the intended location.<br />
<br />
Our lab used the official ZIP package in private server staging. We checked the extracted WordPress core files against official checksums before making the completed installation available.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Configure the database and install</span><br />
For the browser method described in the <a href="https://developer.wordpress.org/advanced-administration/before-install/howto-install/" target="_blank" rel="noopener" class="mycode_url">official installation guide</a>, open the installation URL for the chosen folder. Supply the database details privately when prompted, then set your site title, administrator account and email. Use a strong unique administrator password and save it securely. Avoid screenshots containing passwords or configuration secrets.<br />
<br />
If WordPress cannot create wp-config.php, configure that file securely using the official instructions. Never make it world-writable as a general workaround.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">How our lab completed this step</span><br />
We completed configuration and database installation with <a href="https://developer.wordpress.org/cli/commands/core/install/" target="_blank" rel="noopener" class="mycode_url">WP-CLI</a> from the server, rather than entering a new administrator credential into the browser installer. This guide does not claim that the browser installation form was tested end to end.<br />
<br />
An operator using WP-CLI should use the intended site's path and explicit URL, provide credentials privately, and check siteurl/home after moving a staged installation. We set both to the final HTTPS /wordpress address. Credentials are kept out of the public guide.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Check the installed site</span><br />
Open the site's HTTPS URL and the wp-login.php page in its installation folder. Check that internal links point to the correct hostname and folder, and that styles and images load.<br />
<br />
<img src="https://adminsforum.com/attachment.php?aid=25" loading="lazy"  alt="[Image: attachment.php?aid=25]" class="mycode_img" /><br />
<span style="font-style: italic;" class="mycode_i">Original AdminsForum WordPress Tutorial Lab after installation on aaPanel Free Edition.</span><br />
<br />
For your own site, log in and check the dashboard, save a draft, upload a small test image and verify the functions you need. A homepage response alone is not a full application acceptance test. Confirm outgoing email separately before relying on password-reset or notification messages.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Choose permalink rules separately</span><br />
The lab initially uses plain query-string permalinks. If you enable pretty permalinks, configure the matching WordPress rewrite rules for your web server and installation folder, then test a post URL. Nginx does not apply Apache .htaccess rules. Do not paste a root-directory rewrite into a subfolder installation without adapting it.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">7. Basic checks after installation</span><ul class="mycode_list"><li>Keep WordPress, themes and plugins updated after compatibility checks and backups.<br />
</li>
<li>Remove unused plugins/themes and use only trusted sources.<br />
</li>
<li>Take both file and database backups and test recovery.<br />
</li>
<li>For a tutorial/staging site, discourage search indexing and use stronger access restrictions if it contains private data. A search-indexing preference is not access control.<br />
</li>
<li>Verify email delivery separately; it was not configured or tested in our lab.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Common problems</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Error establishing a database connection:</span> check database name, user, password, host and the database service.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Blank page or fatal error:</span> inspect PHP logs and extension/application compatibility.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Wrong links after moving files:</span> check WordPress Address/siteurl and Site Address/home.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Pretty permalinks return 404:</span> verify the correct web-server rewrite rules for the actual installation folder.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Uploads fail:</span> check ownership, permissions, PHP upload limits and free space without using 777 as a blanket fix.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Verified on 10 October 2026</span><br />
Our lab installed WordPress 7.1.3 from the official ZIP, verified core checksums, configured a dedicated local database and completed installation with WP-CLI. The website runs on aaPanel Free Edition 8.0.6 with PHP 8.5.11 and MariaDB 10.11. The final HTTPS homepage and login page both returned HTTP 200, and homepage links used the correct /wordpress address. On 11 October 2026 we also verified administrator browser login and uploaded an original test image through the WordPress media uploader. Mail delivery and pretty permalinks remain separate checks.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Related guides</span><br />
<a href="https://adminsforum.com/Thread-guide-upload-website-files-with-aapanel-free-edition-file-manager" target="_blank" rel="noopener" class="mycode_url">Upload website files with aaPanel File Manager</a><br />
<a href="https://adminsforum.com/Thread-guide-back-up-and-restore-website-files-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Back up website files</a><br />
<a href="https://adminsforum.com/Thread-guide-back-up-and-restore-a-database-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Back up the database</a><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://adminsforum.com/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=25" target="_blank" title="">wordpress-lab-live-20261010.jpg</a> (Size: 48.24 KB / Downloads: 8)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
	</channel>
</rss>