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

<channel>
	<title>Programming &#8211; Gravyware&#039;s Blog</title>
	<atom:link href="https://blog.gravyware.com/category/technology/programming/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.gravyware.com</link>
	<description>The best tech and startup info updated daily</description>
	<lastBuildDate>Sun, 19 Apr 2026 18:44:27 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://blog.gravyware.com/wp-content/uploads/2023/01/apple-touch-icon-150x150.png</url>
	<title>Programming &#8211; Gravyware&#039;s Blog</title>
	<link>https://blog.gravyware.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>How to Create a Page With a Custom URL in WordPress</title>
		<link>https://blog.gravyware.com/hobart/custom-page-url-in-wordpress</link>
		
		<dc:creator><![CDATA[David Garthe]]></dc:creator>
		<pubDate>Thu, 29 Aug 2024 20:47:12 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<guid isPermaLink="false">https://blog.gravyware.com/?p=3467</guid>

					<description><![CDATA[As a WordPress developer, you may often encounter situations where you need to create a page with a custom URL in WordPress for your theme.]]></description>
										<content:encoded><![CDATA[
<p>As a WordPress developer, some things are not straightforward. You may often encounter situations where you need to create a page with a custom URL in WordPress for your theme.</p>



<p>An example would be for a user profile page where the URL includes the <strong>user_nicename</strong> value instead of a user_id?</p>



<p>Let&#8217;s walk through the process of creating a custom page URL like <strong>https://xyz.com/user/johndoe</strong>, where &#8220;johndoe&#8221; is the user&#8217;s user_nicename value. This can be particularly useful for user profile pages or custom post types.</p>



<h2 class="wp-block-heading">Step 1: Add a Custom Rewrite Rule</h2>



<p>First, we need to add a custom rewrite rule to WordPress. This rule will tell WordPress how to handle our custom URL structure. Add the following code to your theme&#8217;s <strong>functions.php</strong> file:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d2b46;color:#cecbee">PHP</span><span role="button" tabindex="0" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>function add_custom_rewrite_rule() {
    add_rewrite_rule('^user/(&#91;^/&#93;*)/?','index.php?pagename=user&amp;user=$matches&#91;1&#93;', 'top');
    add_rewrite_tag('%user%', '(&#91;^&amp;&#93;+)');
}
add_action('init', 'add_custom_rewrite_rule', 10, 0);</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #3E8FB0">function</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">add_custom_rewrite_rule</span><span style="color: #908CAA">()</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #EA9A97">add_rewrite_rule</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;^user/(&#91;^/&#93;*)/?&#39;</span><span style="color: #908CAA">,</span><span style="color: #F6C177">&#39;index.php?pagename=user&amp;user=$matches&#91;1&#93;&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;top&#39;</span><span style="color: #908CAA">);</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #EA9A97">add_rewrite_tag</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;%user%&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;(&#91;^&amp;&#93;+)&#39;</span><span style="color: #908CAA">);</span></span>
<span class="line"><span style="color: #908CAA">}</span></span>
<span class="line"><span style="color: #EA9A97">add_action</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;init&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;add_custom_rewrite_rule&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">10</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">0</span><span style="color: #908CAA">);</span></span></code></pre></div>



<p>This rule tells WordPress to match URLs like <strong>/user/johndoe</strong> and internally rewrite them to <strong>index.php?pagename=user-profile&amp;user_slug=johndoe</strong>.</p>



<h2 class="wp-block-heading">Step 2: Add Custom Query Vars</h2>



<p>Next, we need to tell WordPress about our custom query variable user_slug. Add this code to your <strong>functions.php</strong>:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d2b46;color:#cecbee">PHP</span><span role="button" tabindex="0" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>function add_custom_query_vars($query_vars) {
    $query_vars[] = 'user';
    return $query_vars;
}
add_filter('query_vars', 'add_custom_query_vars');</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #3E8FB0">function</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">add_custom_query_vars</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">query_vars</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">query_vars</span><span style="color: #908CAA">[]</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;user&#39;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #3E8FB0">return</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">query_vars</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #908CAA">}</span></span>
<span class="line"><span style="color: #EA9A97">add_filter</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;query_vars&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;add_custom_query_vars&#39;</span><span style="color: #908CAA">);</span></span></code></pre></div>



<h2 class="wp-block-heading">Step 3: Create a Custom Page Template</h2>



<p>Now, create a new file in your theme directory called <strong>page-user-profile.php</strong>. This will be the template for your user profile pages. Here&#8217;s a basic example:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d2b46;color:#cecbee">PHP</span><span role="button" tabindex="0" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&lt;?php
/*
Template Name: User Profile
*/

get_header();

$user_slug = get_query_var('user');
$user = get_user_by('slug', $user_slug);

if ($user) {
    // Display user profile information
    echo '&lt;h1>' . esc_html($user->display_name) . '&lt;/h1>';
    echo '&lt;p>Email: ' . esc_html($user->user_email) . '&lt;/p>';
    // Add more user information as needed
} else {
    echo '&lt;p>User not found.&lt;/p>';
}

get_footer();</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #3E8FB0">&lt;?php</span></span>
<span class="line"><span style="color: #908CAA; font-style: italic">/*</span></span>
<span class="line"><span style="color: #6E6A86; font-style: italic">Template Name: User Profile</span></span>
<span class="line"><span style="color: #908CAA; font-style: italic">*/</span></span>
<span class="line"></span>
<span class="line"><span style="color: #EA9A97">get_header</span><span style="color: #908CAA">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">user_slug</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">get_query_var</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;user&#39;</span><span style="color: #908CAA">);</span></span>
<span class="line"><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">user</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">get_user_by</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;slug&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">user_slug</span><span style="color: #908CAA">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #3E8FB0">if</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">user</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #908CAA">    </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Display user profile information</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #EB6F92; font-style: italic">echo</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;&lt;h1&gt;&#39;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">.</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">esc_html</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">user</span><span style="color: #3E8FB0">-&gt;</span><span style="color: #E0DEF4; font-style: italic">display_name</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">.</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;&lt;/h1&gt;&#39;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #EB6F92; font-style: italic">echo</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;&lt;p&gt;Email: &#39;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">.</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">esc_html</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">user</span><span style="color: #3E8FB0">-&gt;</span><span style="color: #E0DEF4; font-style: italic">user_email</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">.</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;&lt;/p&gt;&#39;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #908CAA">    </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Add more user information as needed</span></span>
<span class="line"><span style="color: #908CAA">}</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">else</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #EB6F92; font-style: italic">echo</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;&lt;p&gt;User not found.&lt;/p&gt;&#39;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #908CAA">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #EA9A97">get_footer</span><span style="color: #908CAA">();</span></span></code></pre></div>



<h2 class="wp-block-heading">Step 4: Create a WordPress Page</h2>



<p>In the WordPress admin panel, create a new page and title it &#8220;User Profile&#8221;. Set the template to the new page you just uploaded, and set the permalink value to &#8220;<strong>user</strong>&#8220;. This page won&#8217;t be directly accessible, but it&#8217;s necessary for our rewrite rule to work.</p>



<h2 class="wp-block-heading">Step 5: Flush Rewrite Rules</h2>



<p>After making these changes, you need to flush the rewrite rules. You can do this by going to <strong>Settings &gt; Permalinks</strong> in the WordPress admin panel and clicking &#8220;Save Changes&#8221; without making any changes.</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="800" height="533" src="https://blog.gravyware.com/wp-content/uploads/2024/08/wordpress-typed-on-typewriter.jpg" alt="custom url in wordpress - wordpress typed on a typewriter" class="wp-image-3476" srcset="https://blog.gravyware.com/wp-content/uploads/2024/08/wordpress-typed-on-typewriter.jpg 800w, https://blog.gravyware.com/wp-content/uploads/2024/08/wordpress-typed-on-typewriter-300x200.jpg 300w, https://blog.gravyware.com/wp-content/uploads/2024/08/wordpress-typed-on-typewriter-768x512.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<h2 class="wp-block-heading">Step 6: Link to User Profiles</h2>



<p>Now you can link to user profiles using the custom URL structure. For example:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d2b46;color:#cecbee">PHP</span><span role="button" tabindex="0" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>$user = get_user_by('id', 1);

$profile_url = home_url("/user/{$user->user_nicename}/");

echo '&lt;a href="' . esc_url($profile_url) . '">View Profile&lt;/a>';</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">user</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">get_user_by</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;id&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">1</span><span style="color: #908CAA">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">profile_url</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">home_url</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&quot;/user/</span><span style="color: #908CAA">{</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">user</span><span style="color: #3E8FB0">-&gt;</span><span style="color: #E0DEF4; font-style: italic">user_nicename</span><span style="color: #908CAA">}</span><span style="color: #F6C177">/&quot;</span><span style="color: #908CAA">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #EB6F92; font-style: italic">echo</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;&lt;a href=&quot;&#39;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">.</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">esc_url</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">profile_url</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">.</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;&quot;&gt;View Profile&lt;/a&gt;&#39;</span><span style="color: #908CAA">;</span></span></code></pre></div>



<p>This should create a link to whichever user has a user ID value of &#8220;1&#8221;.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Congrats! You&#8217;ve successfully created a custom page URL structure for user profiles in WordPress. This technique can be adapted for other custom URL structures as well, such as for custom post types or other specialized pages.</p>



<p>Remember to always sanitize and escape data when working with user input and URLs to ensure the security of your WordPress site.</p>



<p>Good luck!</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Validate and Sanitize WordPress Secure Form Inputs</title>
		<link>https://blog.gravyware.com/validate-and-sanitize-wordpress-secure-form</link>
		
		<dc:creator><![CDATA[David Garthe]]></dc:creator>
		<pubDate>Mon, 19 Aug 2024 00:43:59 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<guid isPermaLink="false">https://blog.gravyware.com/?p=3450</guid>

					<description><![CDATA[Are you ready to dive into the world of WordPress secure form handling? Let's journey through the land of validation and sanitization!]]></description>
										<content:encoded><![CDATA[
<p>Are you ready to dive into the world of WordPress secure form handling? Buckle up, because we&#8217;re about to embark on an exciting journey through the land of validation and sanitization! </p>



<div class="wp-block-rank-math-toc-block has-theme-palette-7-background-color has-background" style="padding-top:var(--wp--preset--spacing--20);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--20);padding-left:var(--wp--preset--spacing--40)" id="rank-math-toc"><h2>Table of Contents</h2><nav><ul><li><a href="#the-shocking-truth-about-word-press-secure-form-security">The Shocking Truth About WordPress Secure Form Security</a></li><li><a href="#why-should-you-care-about-input-validation-and-sanitization">Why Should You Care About Input Validation and Sanitization?</a><ul><li><a href="#the-dynamic-duo-of-form-security">The Dynamic Duo of Form Security</a></li><li><a href="#the-risks-of-skipping-security">The Risks of Skipping Security</a></li></ul></li><li><a href="#setting-up-your-word-press-form-handling-fortress">Setting Up Your WordPress Form-Handling Fortress</a><ul><li><a href="#the-tools-of-the-trade">The Tools of the Trade</a></li><li><a href="#creating-your-custom-form-handling-plugin">Creating Your Custom Form-Handling Plugin</a></li></ul></li><li><a href="#basic-php-validation-techniques-your-first-line-of-defense">Basic PHP Validation Techniques: Your First Line of Defense</a><ul><li><a href="#the-power-of-ph-ps-built-in-functions">The Power of PHP&#8217;s Built-in Functions</a></li><li><a href="#crafting-custom-validation-rules">Crafting Custom Validation Rules</a></li></ul></li><li><a href="#advanced-validation-strategies-leveling-up-your-form-game">Advanced Validation Strategies: Leveling Up Your Form Game</a><ul><li><a href="#real-time-validation-with-ajax">Real-time Validation with AJAX</a></li><li><a href="#handling-file-uploads-like-a-pro">Handling File Uploads Like a Pro</a></li></ul></li><li><a href="#sanitization-cleaning-up-the-riffraff">Sanitization: Cleaning Up the Riffraff</a><ul><li><a href="#word-press-sanitization-functions-your-new-best-friends">WordPress Sanitization Functions: Your New Best Friends</a></li><li><a href="#creating-custom-sanitization-methods">Creating Custom Sanitization Methods</a></li></ul></li><li><a href="#putting-it-all-together-a-complete-form-processing-example">Putting It All Together: A Complete Form Processing Example</a></li><li><a href="#wrapping-up-youre-now-a-form-security-ninja">Wrapping Up: You&#8217;re Now a Form Security Ninja!</a></li></ul></nav></div>



<h2 class="wp-block-heading" id="the-shocking-truth-about-word-press-secure-form-security">The Shocking Truth About WordPress Secure Form Security</h2>



<p>Let&#8217;s kick things off with a jaw-dropping statistic: Did you know that a whopping <a href="https://www.accenture.com/us-en/insights/cyber-security-index" target="_blank" rel="noreferrer noopener">43% of cyberattacks target small businesses</a>, with many of these attacks exploiting vulnerabilities in web forms?</p>



<p>As a WordPress developer, you&#8217;re not just building websites – you have to create a digital fortress as well. And one of the <strong>most crucial battlegrounds</strong> in this cybersecurity war is the <strong>humble web form</strong>. Those innocent-looking input fields can be a hacker&#8217;s playground if left unchecked.</p>



<p>By the end of this guide, you&#8217;ll be armed with the knowledge and skills to turn your WordPress forms into impenetrable barriers against malicious inputs.</p>



<h2 class="wp-block-heading" id="why-should-you-care-about-input-validation-and-sanitization">Why Should You Care About Input Validation and Sanitization?</h2>



<p>Before we dive into the nitty-gritty, let&#8217;s take a moment to understand why we&#8217;re even bothering with all this validation and sanitization stuff.</p>



<h3 class="wp-block-heading" id="the-dynamic-duo-of-form-security">The Dynamic Duo of Form Security</h3>



<ul class="wp-block-list">
<li><strong>Input Validation</strong>: Think of this as your bouncer at the club door. It checks if the data entering your form meets your criteria. Is that email address actually an email address? Is that phone number made up of digits only? Validation says, &#8220;Hey you! Yeah, you with the weird input. You&#8217;re not getting in here!&#8221; This is primarily handled with JavaScript.<br></li>



<li><strong>Input Sanitization</strong>: This is like your form&#8217;s personal hygienist. Once data passes validation, sanitization cleans it up. It removes or encodes potentially harmful characters, ensuring that even if something sneaky slips through validation, it can&#8217;t wreak havoc on your system. This is primarily handled with PHP.</li>
</ul>



<h3 class="wp-block-heading" id="the-risks-of-skipping-security">The Risks of Skipping Security</h3>



<figure class="wp-block-image size-full"><img decoding="async" width="800" height="550" src="https://blog.gravyware.com/wp-content/uploads/2024/08/bad-character.jpg" alt="wordpress secure form hacker covering his face" class="wp-image-3461" srcset="https://blog.gravyware.com/wp-content/uploads/2024/08/bad-character.jpg 800w, https://blog.gravyware.com/wp-content/uploads/2024/08/bad-character-300x206.jpg 300w, https://blog.gravyware.com/wp-content/uploads/2024/08/bad-character-768x528.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<p>Ignoring form security is like leaving your front door wide open in a neighborhood full of mischievous cats. While most visitors might be harmless, eventually one curious feline to knock over your prized vase. In the digital world, these &#8220;cats&#8221; come in the form of:</p>



<ul class="wp-block-list">
<li>SQL Injection attacks</li>



<li>Cross-Site Scripting (XSS)</li>



<li>Remote Code Execution</li>



<li>Data corruption</li>
</ul>



<p>Trust me, dealing with any of these is way less fun than cleaning up after a cat party. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f431.png" alt="🐱" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<h2 class="wp-block-heading" id="setting-up-your-word-press-form-handling-fortress">Setting Up Your WordPress Form-Handling Fortress</h2>



<p>First, we need to set up our WordPress development environment.</p>



<h3 class="wp-block-heading" id="the-tools-of-the-trade">The Tools of the Trade</h3>



<ol class="wp-block-list">
<li><strong>WordPress</strong>: Make sure you&#8217;re running the latest version.</li>



<li><strong>A code editor</strong>: I&#8217;m partial to <a href="https://www.jetbrains.com/phpstorm/" target="_blank" rel="noreferrer noopener nofollow">PHPStorm</a> or <a href="https://code.visualstudio.com" target="_blank" rel="noreferrer noopener nofollow">VSCode</a>, but use whatever makes your coding heart sing.</li>



<li><strong>A local development environment</strong>: Tools like Local by Flywheel or XAMPP are great for this.</li>



<li><strong>WordPress Debug Mode</strong>: Turn this on in your <strong>wp-config.php</strong> file. It&#8217;s like having a super-smart sidekick pointing out your mistakes. <a href="https://rankmath.com/blog/enable-debugging-in-wordpress/" target="_blank" rel="noreferrer noopener nofollow">Here&#8217;s one way</a>.</li>
</ol>



<h3 class="wp-block-heading" id="creating-your-custom-form-handling-plugin">Creating Your Custom Form-Handling Plugin</h3>



<p>Why a plugin? Because it keeps your functionality separate from your theme, making it portable and easier to maintain. Plus, it makes you feel like a real WordPress wizard. </p>



<p>Here&#8217;s a basic structure to get you started:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d2b46;color:#cecbee">PHP</span><span role="button" tabindex="0" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&lt;?php
/**
 * Plugin Name: SuperSecure Form Handler
 * Description: Handles form inputs like a boss!
 * Version: 1.0
 * Author: Your Awesome Name
 */

if (!defined('ABSPATH')) exit; // Exit if accessed directly

class SuperSecureFormHandler {
    public function __construct() {
        add_action('init', array($this, 'init'));
    }

    public function init() {
        // We'll add our form handling magic here
    }
}

new SuperSecureFormHandler();</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #3E8FB0">&lt;?php</span></span>
<span class="line"><span style="color: #908CAA; font-style: italic">/**</span></span>
<span class="line"><span style="color: #6E6A86; font-style: italic"> * Plugin Name: SuperSecure Form Handler</span></span>
<span class="line"><span style="color: #6E6A86; font-style: italic"> * Description: Handles form inputs like a boss!</span></span>
<span class="line"><span style="color: #6E6A86; font-style: italic"> * Version: 1.0</span></span>
<span class="line"><span style="color: #6E6A86; font-style: italic"> * Author: Your Awesome Name</span></span>
<span class="line"><span style="color: #6E6A86; font-style: italic"> </span><span style="color: #908CAA; font-style: italic">*/</span></span>
<span class="line"></span>
<span class="line"><span style="color: #3E8FB0">if</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">(</span><span style="color: #3E8FB0">!</span><span style="color: #EB6F92; font-style: italic">defined</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;ABSPATH&#39;</span><span style="color: #908CAA">))</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">exit</span><span style="color: #908CAA">;</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Exit if accessed directly</span></span>
<span class="line"></span>
<span class="line"><span style="color: #3E8FB0">class</span><span style="color: #E0DEF4"> </span><span style="color: #9CCFD8">SuperSecureFormHandler</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #3E8FB0">public</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">function</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">__construct</span><span style="color: #908CAA">()</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #EA9A97">add_action</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;init&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">array</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">this</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;init&#39;</span><span style="color: #908CAA">));</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #3E8FB0">public</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">function</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">init</span><span style="color: #908CAA">()</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #908CAA">        </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> We&#39;ll add our form handling magic here</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA">}</span></span>
<span class="line"><span style="color: #908CAA">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #3E8FB0">new</span><span style="color: #E0DEF4"> </span><span style="color: #9CCFD8">SuperSecureFormHandler</span><span style="color: #908CAA">();</span></span></code></pre></div>



<h2 class="wp-block-heading" id="basic-php-validation-techniques-your-first-line-of-defense">Basic PHP Validation Techniques: Your First Line of Defense</h2>



<p>Now that we&#8217;ve got our plugin set up, let&#8217;s start with some basic validation techniques. Think of these as the foundation of your fortress – not flashy, but absolutely essential.</p>



<h3 class="wp-block-heading" id="the-power-of-ph-ps-built-in-functions">The Power of PHP&#8217;s Built-in Functions</h3>



<p>PHP comes with a treasure trove of basic validation functions. Here are some of my favorites:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d2b46;color:#cecbee">PHP</span><span role="button" tabindex="0" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>// Is it an email?
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $errors[] = "Invalid email format";
}

// Is it a number?
if (!is_numeric($age)) {
    $errors[] = "Age must be a number";
}

// Is it within a range?
if ($age &lt; 18 || $age > 99) {
    $errors[] = "Age must be between 18 and 99";
}

// Is it not empty?
if (empty($name)) {
    $errors[] = "Name is required";
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Is it an email?</span></span>
<span class="line"><span style="color: #3E8FB0">if</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">(</span><span style="color: #3E8FB0">!</span><span style="color: #EB6F92; font-style: italic">filter_var</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">email</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">FILTER_VALIDATE_EMAIL</span><span style="color: #908CAA">))</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">errors</span><span style="color: #908CAA">[]</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;Invalid email format&quot;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #908CAA">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Is it a number?</span></span>
<span class="line"><span style="color: #3E8FB0">if</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">(</span><span style="color: #3E8FB0">!</span><span style="color: #EB6F92; font-style: italic">is_numeric</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">age</span><span style="color: #908CAA">))</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">errors</span><span style="color: #908CAA">[]</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;Age must be a number&quot;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #908CAA">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Is it within a range?</span></span>
<span class="line"><span style="color: #3E8FB0">if</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">age</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">&lt;</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">18</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">||</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">age</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">99</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">errors</span><span style="color: #908CAA">[]</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;Age must be between 18 and 99&quot;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #908CAA">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Is it not empty?</span></span>
<span class="line"><span style="color: #3E8FB0">if</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">(</span><span style="color: #EB6F92; font-style: italic">empty</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">name</span><span style="color: #908CAA">))</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">errors</span><span style="color: #908CAA">[]</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;Name is required&quot;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #908CAA">}</span></span></code></pre></div>



<h3 class="wp-block-heading" id="crafting-custom-validation-rules">Crafting Custom Validation Rules</h3>



<p>Sometimes, the built-in functions just won&#8217;t cut it. That&#8217;s when you need to roll up your sleeves and create custom validation rules. Here&#8217;s an example of validating a username:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d2b46;color:#cecbee">PHP</span><span role="button" tabindex="0" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>function validate_username($username) {
    // Only allow alphanumeric characters and underscores
    if (!preg_match('/^&#91;a-zA-Z0-9_&#93;+$/', $username)) {
        return false;
    }
    
    // Username should be between 4 and 20 characters
    if (strlen($username) &lt; 4 || strlen($username) > 20) {
        return false;
    }
    
    return true;
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #3E8FB0">function</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">validate_username</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">username</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #908CAA">    </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Only allow alphanumeric characters and underscores</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #3E8FB0">if</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">(</span><span style="color: #3E8FB0">!</span><span style="color: #EB6F92; font-style: italic">preg_match</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;/</span><span style="color: #3E8FB0">^</span><span style="color: #908CAA">&#91;</span><span style="color: #F6C177">a-zA-Z0-9_</span><span style="color: #908CAA">&#93;</span><span style="color: #3E8FB0">+$</span><span style="color: #F6C177">/&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">username</span><span style="color: #908CAA">))</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #3E8FB0">return</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">false</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA">}</span></span>
<span class="line"><span style="color: #E0DEF4">    </span></span>
<span class="line"><span style="color: #908CAA">    </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Username should be between 4 and 20 characters</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #3E8FB0">if</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">(</span><span style="color: #EB6F92; font-style: italic">strlen</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">username</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">&lt;</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">4</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">||</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">strlen</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">username</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">20</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #3E8FB0">return</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">false</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA">}</span></span>
<span class="line"><span style="color: #E0DEF4">    </span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #3E8FB0">return</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">true</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #908CAA">}</span></span></code></pre></div>



<h2 class="wp-block-heading" id="advanced-validation-strategies-leveling-up-your-form-game">Advanced Validation Strategies: Leveling Up Your Form Game</h2>



<p>Let&#8217;s explore some advanced techniques that&#8217;ll make your forms smoother than a fresh jar of Skippy.</p>



<h3 class="wp-block-heading" id="real-time-validation-with-ajax">Real-time Validation with AJAX</h3>



<p>Nobody likes waiting until they hit the submit button to find out they&#8217;ve messed up. With AJAX, you can provide real-time feedback as users fill out your form. Here&#8217;s a quick example using jQuery, which comes included with WordPress:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d2b46;color:#cecbee">JavaScript</span><span role="button" tabindex="0" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>$('#username').on('blur', function() {
    var username = $(this).val();
    $.ajax({
        url: ajaxurl, // This is defined by WordPress
        type: 'POST',
        data: {
            action: 'validate_username',
            username: username
        },
        success: function(response) {
            if (response.valid) {
                $('#username-error').hide();
            } else {
                $('#username-error').show().text(response.message);
            }
        }
    });
});</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #EA9A97">$</span><span style="color: #E0DEF4">(</span><span style="color: #F6C177">&#39;#username&#39;</span><span style="color: #E0DEF4">)</span><span style="color: #3E8FB0">.</span><span style="color: #EA9A97">on</span><span style="color: #E0DEF4">(</span><span style="color: #F6C177">&#39;blur&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">function</span><span style="color: #908CAA">()</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #3E8FB0">var</span><span style="color: #E0DEF4"> </span><span style="color: #E0DEF4; font-style: italic">username</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">$</span><span style="color: #E0DEF4">(</span><span style="color: #E0DEF4; font-style: italic">this</span><span style="color: #E0DEF4">)</span><span style="color: #3E8FB0">.</span><span style="color: #EA9A97">val</span><span style="color: #E0DEF4">()</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #E0DEF4; font-style: italic">$</span><span style="color: #3E8FB0">.</span><span style="color: #EA9A97">ajax</span><span style="color: #E0DEF4">(</span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">        url</span><span style="color: #908CAA">:</span><span style="color: #E0DEF4"> </span><span style="color: #E0DEF4; font-style: italic">ajaxurl</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> This is defined by WordPress</span></span>
<span class="line"><span style="color: #E0DEF4">        type</span><span style="color: #908CAA">:</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;POST&#39;</span><span style="color: #908CAA">,</span></span>
<span class="line"><span style="color: #E0DEF4">        data</span><span style="color: #908CAA">:</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">            action</span><span style="color: #908CAA">:</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;validate_username&#39;</span><span style="color: #908CAA">,</span></span>
<span class="line"><span style="color: #E0DEF4">            username</span><span style="color: #908CAA">:</span><span style="color: #E0DEF4"> </span><span style="color: #E0DEF4; font-style: italic">username</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #908CAA">},</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #EA9A97">success</span><span style="color: #908CAA">:</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">function</span><span style="color: #908CAA">(</span><span style="color: #C4A7E7; font-style: italic">response</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">            </span><span style="color: #3E8FB0">if</span><span style="color: #E0DEF4"> (</span><span style="color: #E0DEF4; font-style: italic">response</span><span style="color: #3E8FB0">.</span><span style="color: #E0DEF4; font-style: italic">valid</span><span style="color: #E0DEF4">) </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">                </span><span style="color: #EA9A97">$</span><span style="color: #E0DEF4">(</span><span style="color: #F6C177">&#39;#username-error&#39;</span><span style="color: #E0DEF4">)</span><span style="color: #3E8FB0">.</span><span style="color: #EA9A97">hide</span><span style="color: #E0DEF4">()</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #E0DEF4">            </span><span style="color: #908CAA">}</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">else</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">                </span><span style="color: #EA9A97">$</span><span style="color: #E0DEF4">(</span><span style="color: #F6C177">&#39;#username-error&#39;</span><span style="color: #E0DEF4">)</span><span style="color: #3E8FB0">.</span><span style="color: #EA9A97">show</span><span style="color: #E0DEF4">()</span><span style="color: #3E8FB0">.</span><span style="color: #EA9A97">text</span><span style="color: #E0DEF4">(</span><span style="color: #E0DEF4; font-style: italic">response</span><span style="color: #3E8FB0">.</span><span style="color: #E0DEF4; font-style: italic">message</span><span style="color: #E0DEF4">)</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #E0DEF4">            </span><span style="color: #908CAA">}</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #908CAA">}</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA">}</span><span style="color: #E0DEF4">)</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #908CAA">}</span><span style="color: #E0DEF4">)</span><span style="color: #908CAA">;</span></span></code></pre></div>



<p>And in your PHP file <strong>functions.php</strong>:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d2b46;color:#cecbee">PHP</span><span role="button" tabindex="0" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>add_action('wp_ajax_validate_username', 'ajax_validate_username');
add_action('wp_ajax_nopriv_validate_username', 'ajax_validate_username');

function ajax_validate_username() {
    $username = $_POST&#91;'username'&#93;;
    $is_valid = validate_username($username);
    
    wp_send_json(array(
        'valid' => $is_valid,
        'message' => $is_valid ? '' : 'Invalid username'
    ));
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #EA9A97">add_action</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;wp_ajax_validate_username&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;ajax_validate_username&#39;</span><span style="color: #908CAA">);</span></span>
<span class="line"><span style="color: #EA9A97">add_action</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;wp_ajax_nopriv_validate_username&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;ajax_validate_username&#39;</span><span style="color: #908CAA">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #3E8FB0">function</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">ajax_validate_username</span><span style="color: #908CAA">()</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">username</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">_POST</span><span style="color: #908CAA">&#91;</span><span style="color: #F6C177">&#39;username&#39;</span><span style="color: #908CAA">&#93;;</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">is_valid</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">validate_username</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">username</span><span style="color: #908CAA">);</span></span>
<span class="line"><span style="color: #E0DEF4">    </span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #EA9A97">wp_send_json</span><span style="color: #908CAA">(</span><span style="color: #EB6F92; font-style: italic">array</span><span style="color: #908CAA">(</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #F6C177">&#39;valid&#39;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">is_valid</span><span style="color: #908CAA">,</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #F6C177">&#39;message&#39;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">is_valid</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">?</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;&#39;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">:</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;Invalid username&#39;</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA">));</span></span>
<span class="line"><span style="color: #908CAA">}</span></span></code></pre></div>



<h3 class="wp-block-heading" id="handling-file-uploads-like-a-pro">Handling File Uploads Like a Pro</h3>



<p>File uploads can be a security nightmare if not handled correctly. Here&#8217;s how to validate file uploads without breaking a sweat (this code would be in your <strong>functions.php</strong> file):</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d2b46;color:#cecbee">PHP</span><span role="button" tabindex="0" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>function validate_file_upload($file) {
    $allowed_types = array('jpg', 'jpeg', 'png', 'gif');
    $max_size = 5 * 1024 * 1024; // 5MB
    
    $file_name = $file&#91;'name'&#93;;
    $file_size = $file&#91;'size'&#93;;
    $file_tmp = $file&#91;'tmp_name'&#93;;
    
    // Check file extension
    $ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));
    if (!in_array($ext, $allowed_types)) {
        return "Sorry, only JPG, JPEG, PNG &amp; GIF files are allowed.";
    }
    
    // Check file size
    if ($file_size > $max_size) {
        return "Sorry, your file is too large. Max size is 5MB.";
    }
    
    // Check MIME type
    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    $mime = finfo_file($finfo, $file_tmp);
    finfo_close($finfo);
    
    if (!in_array($mime, array('image/jpeg', 'image/png', 'image/gif'))) {
        return "File type not allowed.";
    }
    
    return true; // File is valid
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #3E8FB0">function</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">validate_file_upload</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">file</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">allowed_types</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">array</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;jpg&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;jpeg&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;png&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;gif&#39;</span><span style="color: #908CAA">);</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">max_size</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">5</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">*</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">1024</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">*</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">1024</span><span style="color: #908CAA">;</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> 5MB</span></span>
<span class="line"><span style="color: #E0DEF4">    </span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">file_name</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">file</span><span style="color: #908CAA">&#91;</span><span style="color: #F6C177">&#39;name&#39;</span><span style="color: #908CAA">&#93;;</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">file_size</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">file</span><span style="color: #908CAA">&#91;</span><span style="color: #F6C177">&#39;size&#39;</span><span style="color: #908CAA">&#93;;</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">file_tmp</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">file</span><span style="color: #908CAA">&#91;</span><span style="color: #F6C177">&#39;tmp_name&#39;</span><span style="color: #908CAA">&#93;;</span></span>
<span class="line"><span style="color: #E0DEF4">    </span></span>
<span class="line"><span style="color: #908CAA">    </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Check file extension</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">ext</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">strtolower</span><span style="color: #908CAA">(</span><span style="color: #EB6F92; font-style: italic">pathinfo</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">file_name</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">PATHINFO_EXTENSION</span><span style="color: #908CAA">));</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #3E8FB0">if</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">(</span><span style="color: #3E8FB0">!</span><span style="color: #EB6F92; font-style: italic">in_array</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">ext</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">allowed_types</span><span style="color: #908CAA">))</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #3E8FB0">return</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;Sorry, only JPG, JPEG, PNG &amp; GIF files are allowed.&quot;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA">}</span></span>
<span class="line"><span style="color: #E0DEF4">    </span></span>
<span class="line"><span style="color: #908CAA">    </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Check file size</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #3E8FB0">if</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">file_size</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">max_size</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #3E8FB0">return</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;Sorry, your file is too large. Max size is 5MB.&quot;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA">}</span></span>
<span class="line"><span style="color: #E0DEF4">    </span></span>
<span class="line"><span style="color: #908CAA">    </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Check MIME type</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">finfo</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">finfo_open</span><span style="color: #908CAA">(</span><span style="color: #F6C177">FILEINFO_MIME_TYPE</span><span style="color: #908CAA">);</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">mime</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">finfo_file</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">finfo</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">file_tmp</span><span style="color: #908CAA">);</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #EB6F92; font-style: italic">finfo_close</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">finfo</span><span style="color: #908CAA">);</span></span>
<span class="line"><span style="color: #E0DEF4">    </span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #3E8FB0">if</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">(</span><span style="color: #3E8FB0">!</span><span style="color: #EB6F92; font-style: italic">in_array</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">mime</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">array</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;image/jpeg&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;image/png&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;image/gif&#39;</span><span style="color: #908CAA">)))</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #3E8FB0">return</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;File type not allowed.&quot;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA">}</span></span>
<span class="line"><span style="color: #E0DEF4">    </span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #3E8FB0">return</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">true</span><span style="color: #908CAA">;</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> File is valid</span></span>
<span class="line"><span style="color: #908CAA">}</span></span></code></pre></div>



<h2 class="wp-block-heading" id="sanitization-cleaning-up-the-riffraff">Sanitization: Cleaning Up the Riffraff</h2>



<p>Validation is great, but sometimes sneaky data can still slip through. That&#8217;s where sanitization comes in, ensuring that even if bad data gets past validation, it can&#8217;t cause any mischief.</p>



<h3 class="wp-block-heading" id="word-press-sanitization-functions-your-new-best-friends">WordPress Sanitization Functions: Your New Best Friends</h3>



<p>WordPress comes with a bunch of handy sanitization functions. Here are some you&#8217;ll want to keep in your back pocket:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d2b46;color:#cecbee">PHP</span><span role="button" tabindex="0" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>// For plain text
$clean_text = sanitize_text_field($_POST&#91;'user_input'&#93;);

// For HTML content (like from a WYSIWYG editor)
$clean_html = wp_kses_post($_POST&#91;'html_input'&#93;);

// For emails
$clean_email = sanitize_email($_POST&#91;'email_input'&#93;);

// For URLs
$clean_url = esc_url_raw($_POST&#91;'url_input'&#93;);</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> For plain text</span></span>
<span class="line"><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">clean_text</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">sanitize_text_field</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">_POST</span><span style="color: #908CAA">&#91;</span><span style="color: #F6C177">&#39;user_input&#39;</span><span style="color: #908CAA">&#93;);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> For HTML content (like from a WYSIWYG editor)</span></span>
<span class="line"><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">clean_html</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">wp_kses_post</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">_POST</span><span style="color: #908CAA">&#91;</span><span style="color: #F6C177">&#39;html_input&#39;</span><span style="color: #908CAA">&#93;);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> For emails</span></span>
<span class="line"><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">clean_email</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">sanitize_email</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">_POST</span><span style="color: #908CAA">&#91;</span><span style="color: #F6C177">&#39;email_input&#39;</span><span style="color: #908CAA">&#93;);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> For URLs</span></span>
<span class="line"><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">clean_url</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">esc_url_raw</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">_POST</span><span style="color: #908CAA">&#91;</span><span style="color: #F6C177">&#39;url_input&#39;</span><span style="color: #908CAA">&#93;);</span></span></code></pre></div>



<h3 class="wp-block-heading" id="creating-custom-sanitization-methods">Creating Custom Sanitization Methods</h3>



<p>Sometimes, you need a bit more control. Here&#8217;s an example of a custom sanitization method for a username:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d2b46;color:#cecbee">PHP</span><span role="button" tabindex="0" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>function sanitize_username($username) {
    // Remove any HTML tags
    $clean = strip_tags($username);
    
    // Remove any non-alphanumeric characters except underscores
    $clean = preg_replace('/&#91;^a-zA-Z0-9_&#93;/', '', $clean);
    
    // Trim whitespace and limit to 20 characters
    return substr(trim($clean), 0, 20);
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #3E8FB0">function</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">sanitize_username</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">username</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #908CAA">    </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Remove any HTML tags</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">clean</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">strip_tags</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">username</span><span style="color: #908CAA">);</span></span>
<span class="line"><span style="color: #E0DEF4">    </span></span>
<span class="line"><span style="color: #908CAA">    </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Remove any non-alphanumeric characters except underscores</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">clean</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">preg_replace</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;/</span><span style="color: #908CAA">&#91;</span><span style="color: #F6C177">^a-zA-Z0-9_</span><span style="color: #908CAA">&#93;</span><span style="color: #F6C177">/&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">clean</span><span style="color: #908CAA">);</span></span>
<span class="line"><span style="color: #E0DEF4">    </span></span>
<span class="line"><span style="color: #908CAA">    </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Trim whitespace and limit to 20 characters</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #3E8FB0">return</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">substr</span><span style="color: #908CAA">(</span><span style="color: #EB6F92; font-style: italic">trim</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">clean</span><span style="color: #908CAA">),</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">0</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">20</span><span style="color: #908CAA">);</span></span>
<span class="line"><span style="color: #908CAA">}</span></span></code></pre></div>



<h2 class="wp-block-heading" id="putting-it-all-together-a-complete-form-processing-example">Putting It All Together: A Complete Form Processing Example</h2>



<p>Let&#8217;s bring everything we&#8217;ve learned together into a complete form processing example (<strong>in functions.php</strong>):</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d2b46;color:#cecbee">PHP</span><span role="button" tabindex="0" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>add_action('admin_post_nopriv_submit_user_form', 'handle_user_form');
add_action('admin_post_submit_user_form', 'handle_user_form');

function handle_user_form() {
    // Verify nonce for security
    if (!isset($_POST&#91;'user_form_nonce'&#93;) || !wp_verify_nonce($_POST&#91;'user_form_nonce'&#93;, 'submit_user_form')) {
        wp_die('Security check failed');
    }
    
    $username = isset($_POST&#91;'username'&#93;) ? $_POST&#91;'username'&#93; : '';
    $email = isset($_POST&#91;'email'&#93;) ? $_POST&#91;'email'&#93; : '';
    $age = isset($_POST&#91;'age'&#93;) ? $_POST&#91;'age'&#93; : '';
    
    $errors = array();
    
    // Validate inputs
    if (!validate_username($username)) {
        $errors[] = "Invalid username";
    }
    
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $errors[] = "Invalid email format";
    }
    
    if (!is_numeric($age) || $age &lt; 18 || $age > 99) {
        $errors[] = "Age must be a number between 18 and 99";
    }
    
    // If there are errors, redirect back to the form
    if (!empty($errors)) {
        $error_string = implode('&amp;', array_map('urlencode', $errors));
        wp_redirect(add_query_arg('errors', $error_string, wp_get_referer()));
        exit;
    }
    
    // Sanitize inputs
    $clean_username = sanitize_username($username);
    $clean_email = sanitize_email($email);
    $clean_age = absint($age);
    
    // Process the form (e.g., save to database)
    // ...
    
    // Redirect to success page
    wp_redirect(add_query_arg('success', '1', wp_get_referer()));
    exit;
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #EA9A97">add_action</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;admin_post_nopriv_submit_user_form&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;handle_user_form&#39;</span><span style="color: #908CAA">);</span></span>
<span class="line"><span style="color: #EA9A97">add_action</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;admin_post_submit_user_form&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;handle_user_form&#39;</span><span style="color: #908CAA">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #3E8FB0">function</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">handle_user_form</span><span style="color: #908CAA">()</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #908CAA">    </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Verify nonce for security</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #3E8FB0">if</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">(</span><span style="color: #3E8FB0">!</span><span style="color: #EB6F92; font-style: italic">isset</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">_POST</span><span style="color: #908CAA">&#91;</span><span style="color: #F6C177">&#39;user_form_nonce&#39;</span><span style="color: #908CAA">&#93;)</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">||</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">!</span><span style="color: #EA9A97">wp_verify_nonce</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">_POST</span><span style="color: #908CAA">&#91;</span><span style="color: #F6C177">&#39;user_form_nonce&#39;</span><span style="color: #908CAA">&#93;,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;submit_user_form&#39;</span><span style="color: #908CAA">))</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #EA9A97">wp_die</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;Security check failed&#39;</span><span style="color: #908CAA">);</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA">}</span></span>
<span class="line"><span style="color: #E0DEF4">    </span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">username</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">isset</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">_POST</span><span style="color: #908CAA">&#91;</span><span style="color: #F6C177">&#39;username&#39;</span><span style="color: #908CAA">&#93;)</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">?</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">_POST</span><span style="color: #908CAA">&#91;</span><span style="color: #F6C177">&#39;username&#39;</span><span style="color: #908CAA">&#93;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">:</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;&#39;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">email</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">isset</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">_POST</span><span style="color: #908CAA">&#91;</span><span style="color: #F6C177">&#39;email&#39;</span><span style="color: #908CAA">&#93;)</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">?</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">_POST</span><span style="color: #908CAA">&#91;</span><span style="color: #F6C177">&#39;email&#39;</span><span style="color: #908CAA">&#93;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">:</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;&#39;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">age</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">isset</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">_POST</span><span style="color: #908CAA">&#91;</span><span style="color: #F6C177">&#39;age&#39;</span><span style="color: #908CAA">&#93;)</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">?</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">_POST</span><span style="color: #908CAA">&#91;</span><span style="color: #F6C177">&#39;age&#39;</span><span style="color: #908CAA">&#93;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">:</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;&#39;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #E0DEF4">    </span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">errors</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">array</span><span style="color: #908CAA">();</span></span>
<span class="line"><span style="color: #E0DEF4">    </span></span>
<span class="line"><span style="color: #908CAA">    </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Validate inputs</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #3E8FB0">if</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">(</span><span style="color: #3E8FB0">!</span><span style="color: #EA9A97">validate_username</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">username</span><span style="color: #908CAA">))</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">errors</span><span style="color: #908CAA">[]</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;Invalid username&quot;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA">}</span></span>
<span class="line"><span style="color: #E0DEF4">    </span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #3E8FB0">if</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">(</span><span style="color: #3E8FB0">!</span><span style="color: #EB6F92; font-style: italic">filter_var</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">email</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">FILTER_VALIDATE_EMAIL</span><span style="color: #908CAA">))</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">errors</span><span style="color: #908CAA">[]</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;Invalid email format&quot;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA">}</span></span>
<span class="line"><span style="color: #E0DEF4">    </span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #3E8FB0">if</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">(</span><span style="color: #3E8FB0">!</span><span style="color: #EB6F92; font-style: italic">is_numeric</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">age</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">||</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">age</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">&lt;</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">18</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">||</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">age</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">99</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">errors</span><span style="color: #908CAA">[]</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;Age must be a number between 18 and 99&quot;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA">}</span></span>
<span class="line"><span style="color: #E0DEF4">    </span></span>
<span class="line"><span style="color: #908CAA">    </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> If there are errors, redirect back to the form</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #3E8FB0">if</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">(</span><span style="color: #3E8FB0">!</span><span style="color: #EB6F92; font-style: italic">empty</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">errors</span><span style="color: #908CAA">))</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">error_string</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">implode</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;&amp;&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">array_map</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;urlencode&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">errors</span><span style="color: #908CAA">));</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #EA9A97">wp_redirect</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">add_query_arg</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;errors&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">error_string</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">wp_get_referer</span><span style="color: #908CAA">()));</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #3E8FB0">exit</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA">}</span></span>
<span class="line"><span style="color: #E0DEF4">    </span></span>
<span class="line"><span style="color: #908CAA">    </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Sanitize inputs</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">clean_username</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">sanitize_username</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">username</span><span style="color: #908CAA">);</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">clean_email</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">sanitize_email</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">email</span><span style="color: #908CAA">);</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">clean_age</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">absint</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">age</span><span style="color: #908CAA">);</span></span>
<span class="line"><span style="color: #E0DEF4">    </span></span>
<span class="line"><span style="color: #908CAA">    </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Process the form (e.g., save to database)</span></span>
<span class="line"><span style="color: #908CAA">    </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> ...</span></span>
<span class="line"><span style="color: #E0DEF4">    </span></span>
<span class="line"><span style="color: #908CAA">    </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Redirect to success page</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #EA9A97">wp_redirect</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">add_query_arg</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;success&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;1&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">wp_get_referer</span><span style="color: #908CAA">()));</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #3E8FB0">exit</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #908CAA">}</span></span></code></pre></div>



<h2 class="wp-block-heading" id="wrapping-up-youre-now-a-form-security-ninja">Wrapping Up: You&#8217;re Now a Form Security Ninja!</h2>



<p>Congratulations! You&#8217;ve just leveled up your WordPress form-handling skills. By implementing these validation and sanitization techniques, you&#8217;re following best practices and protecting your users and your reputation.</p>



<p>The world of web security is always evolving, so stay curious and keep learning.</p>



<p>Happy coding, and if you have any questions, just ask!</p>



<p></p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Use PHP in_array() Function</title>
		<link>https://blog.gravyware.com/php-in_array</link>
		
		<dc:creator><![CDATA[David Garthe]]></dc:creator>
		<pubDate>Thu, 15 Aug 2024 22:52:52 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Programming]]></category>
		<guid isPermaLink="false">https://blog.gravyware.com/?p=3434</guid>

					<description><![CDATA[The PHP in_array() function allows you to check if a specific value exists in an array. It has a few nuances that can drive you crazy until you figure them out.]]></description>
										<content:encoded><![CDATA[
<p>The PHP <strong>in_array()</strong> function is a powerful tool in PHP that allows you to check if a specific value exists in an array. This function is handy when you need to validate input, filter data, or implement search functionality in your PHP applications.</p>



<p>It&#8217;s a simple function, but it has a few nuances that can drive you crazy until you figure them out. Let&#8217;s go over everything.</p>



<h2 class="wp-block-heading">Syntax and Parameters</h2>



<p>The basic syntax of the <strong>in_array()</strong> function is as follows:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d2b46;color:#cecbee">PHP</span><span role="button" tabindex="0" data-code="bool in_array ( mixed $needle , array $haystack [, bool $strict = false ] )" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #3E8FB0">bool</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">in_array</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">(</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">mixed</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">needle</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">array</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">haystack</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">[,</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">bool</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">strict</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">false</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">]</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">)</span></span></code></pre></div>



<p>Let&#8217;s break down the parameters:</p>



<ol class="wp-block-list">
<li>$needle: The value to search for in the array.</li>



<li>$haystack: The array to search in.</li>



<li>$strict (optional): If set to <strong>true</strong>, the function will also check for type equality.</li>
</ol>



<p>The function returns <strong>true</strong> if the <strong>$needle</strong> is found in the <strong>$haystack</strong>, and <strong>false</strong> otherwise.</p>



<h2 class="wp-block-heading">Basic Usage</h2>



<p>Here&#8217;s a simple example of how to use <strong>in_array()</strong>:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d2b46;color:#cecbee">PHP</span><span role="button" tabindex="0" data-code="$fruits = array(&quot;apple&quot;, &quot;banana&quot;, &quot;orange&quot;);
if (in_array(&quot;banana&quot;, $fruits)) {
    echo &quot;Found banana!&quot;;
} else {
    echo &quot;Banana not found.&quot;;
}" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">fruits</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">array</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&quot;apple&quot;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;banana&quot;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;orange&quot;</span><span style="color: #908CAA">);</span></span>
<span class="line"><span style="color: #3E8FB0">if</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">(</span><span style="color: #EB6F92; font-style: italic">in_array</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&quot;banana&quot;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">fruits</span><span style="color: #908CAA">))</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #EB6F92; font-style: italic">echo</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;Found banana!&quot;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #908CAA">}</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">else</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #EB6F92; font-style: italic">echo</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;Banana not found.&quot;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #908CAA">}</span></span></code></pre></div>



<p>In this example, the output will be &#8220;Found banana!&#8221; because &#8220;banana&#8221; exists in the <strong>$fruits</strong> array.</p>



<h2 class="wp-block-heading">Strict Mode</h2>



<p>The third parameter, <strong>$strict</strong>, is particularly important when dealing with different data types. When set to <strong>true</strong>, it performs a strict comparison (===) instead of a loose comparison (==).</p>



<p>Consider this example:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d2b46;color:#cecbee">PHP</span><span role="button" tabindex="0" data-code="$numbers = array(1, &quot;2&quot;, 3);

var_dump(in_array(2, $numbers));        // Output: bool(true)
var_dump(in_array(2, $numbers, true));  // Output: bool(false)" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">numbers</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">array</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">1</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;2&quot;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">3</span><span style="color: #908CAA">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #EB6F92; font-style: italic">var_dump</span><span style="color: #908CAA">(</span><span style="color: #EB6F92; font-style: italic">in_array</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">2</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">numbers</span><span style="color: #908CAA">));</span><span style="color: #E0DEF4">        </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Output: bool(true)</span></span>
<span class="line"><span style="color: #EB6F92; font-style: italic">var_dump</span><span style="color: #908CAA">(</span><span style="color: #EB6F92; font-style: italic">in_array</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">2</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">numbers</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">true</span><span style="color: #908CAA">));</span><span style="color: #E0DEF4">  </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Output: bool(false)</span></span></code></pre></div>



<p>In the first case, <strong>in_array()</strong> returns <strong>true</strong> because it finds the string &#8220;2&#8221;, which is loosely equal to the integer 2. In the second case, with strict mode enabled, it returns <strong>false</strong> because there is no integer 2 in the array.</p>



<h2 class="wp-block-heading">This Gave Me Trouble</h2>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="800" height="533" src="https://blog.gravyware.com/wp-content/uploads/2024/08/stressed_developer_800x533.jpg" alt="A Software Developer who can't figure out why the PHP In_array function isn't working for him" class="wp-image-3441" style="width:899px;height:auto" srcset="https://blog.gravyware.com/wp-content/uploads/2024/08/stressed_developer_800x533.jpg 800w, https://blog.gravyware.com/wp-content/uploads/2024/08/stressed_developer_800x533-300x200.jpg 300w, https://blog.gravyware.com/wp-content/uploads/2024/08/stressed_developer_800x533-768x512.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<p>I couldn&#8217;t figure out why some searches worked, while others did not.</p>



<p>This works:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d2b46;color:#cecbee">PHP</span><span role="button" tabindex="0" data-code="// single level array
$array = array(5) {
	[&quot;keywords&quot;]=&gt; string(5) &quot;74.51&quot;
	[&quot;wordCount&quot;]=&gt; string(1) &quot;0&quot;
	[&quot;linkCount&quot;]=&gt; string(1) &quot;0&quot;
	[&quot;headingCount&quot;]=&gt; string(1) &quot;0&quot;
	[&quot;mediaCount&quot;]=&gt; string(1) &quot;0&quot; }
 }
$test_result = in_array(74.51, $array) // test_result is true
" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> single level array</span></span>
<span class="line"><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">array</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">array</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">5</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">	</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;keywords&quot;</span><span style="color: #908CAA">]</span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">string</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">5</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;74.51&quot;</span></span>
<span class="line"><span style="color: #E0DEF4">	</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;wordCount&quot;</span><span style="color: #908CAA">]</span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">string</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">1</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;0&quot;</span></span>
<span class="line"><span style="color: #E0DEF4">	</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;linkCount&quot;</span><span style="color: #908CAA">]</span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">string</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">1</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;0&quot;</span></span>
<span class="line"><span style="color: #E0DEF4">	</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;headingCount&quot;</span><span style="color: #908CAA">]</span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">string</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">1</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;0&quot;</span></span>
<span class="line"><span style="color: #E0DEF4">	</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;mediaCount&quot;</span><span style="color: #908CAA">]</span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">string</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">1</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;0&quot;</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">}</span></span>
<span class="line"><span style="color: #E0DEF4"> }</span></span>
<span class="line"><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">test_result</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">in_array</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">74</span><span style="color: #908CAA">.</span><span style="color: #EA9A97">51</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">array</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> test_result is true</span></span>
<span class="line"></span></code></pre></div>



<p>This does not until you reference the sub-array (in <strong>$test_result2</strong>):</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d2b46;color:#cecbee">PHP</span><span role="button" tabindex="0" data-code="// an array exists within another array
$array = array(6) {
	[&quot;width&quot;]=&gt; int(30)
	[&quot;height&quot;]=&gt; int(30)
	[&quot;file&quot;]=&gt; string(31) &quot;2022/08/icon_mountainbiking.png&quot;
	[&quot;filesize&quot;]=&gt; int(1670)
	[&quot;sizes&quot;]=&gt; array(0) { }
	[&quot;image_meta&quot;]=&gt; array(12) {
		[&quot;aperture&quot;]=&gt; string(1) &quot;0&quot;
		[&quot;credit&quot;]=&gt; string(0) &quot;&quot;
		[&quot;camera&quot;]=&gt; string(0) &quot;&quot;
		[&quot;caption&quot;]=&gt; string(0) &quot;&quot;
		[&quot;created_timestamp&quot;]=&gt; string(1) &quot;0&quot;
		[&quot;copyright&quot;]=&gt; string(0) &quot;&quot;
		[&quot;focal_length&quot;]=&gt; string(1) &quot;0&quot;
		[&quot;iso&quot;]=&gt; string(1) &quot;0&quot;
		[&quot;shutter_speed&quot;]=&gt; string(1) &quot;0&quot;
		[&quot;title&quot;]=&gt; string(0) &quot;&quot;
		[&quot;orientation&quot;]=&gt; string(1) &quot;0&quot;
		[&quot;keywords&quot;]=&gt; array(0) { }
	}
}
$test_result = in_array(0, $array) //test_result is &quot;false&quot;
$test_result2 = in_array(0, $array['image_meta']) //test_result is &quot;true&quot;" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> an array exists within another array</span></span>
<span class="line"><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">array</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">array</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">6</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">	</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;width&quot;</span><span style="color: #908CAA">]</span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">int</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">30</span><span style="color: #908CAA">)</span></span>
<span class="line"><span style="color: #E0DEF4">	</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;height&quot;</span><span style="color: #908CAA">]</span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">int</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">30</span><span style="color: #908CAA">)</span></span>
<span class="line"><span style="color: #E0DEF4">	</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;file&quot;</span><span style="color: #908CAA">]</span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">string</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">31</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;2022/08/icon_mountainbiking.png&quot;</span></span>
<span class="line"><span style="color: #E0DEF4">	</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;filesize&quot;</span><span style="color: #908CAA">]</span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">int</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">1670</span><span style="color: #908CAA">)</span></span>
<span class="line"><span style="color: #E0DEF4">	</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;sizes&quot;</span><span style="color: #908CAA">]</span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">array</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">0</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">}</span></span>
<span class="line"><span style="color: #E0DEF4">	</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;image_meta&quot;</span><span style="color: #908CAA">]</span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">array</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">12</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">		</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;aperture&quot;</span><span style="color: #908CAA">]</span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">string</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">1</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;0&quot;</span></span>
<span class="line"><span style="color: #E0DEF4">		</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;credit&quot;</span><span style="color: #908CAA">]</span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">string</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">0</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;&quot;</span></span>
<span class="line"><span style="color: #E0DEF4">		</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;camera&quot;</span><span style="color: #908CAA">]</span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">string</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">0</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;&quot;</span></span>
<span class="line"><span style="color: #E0DEF4">		</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;caption&quot;</span><span style="color: #908CAA">]</span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">string</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">0</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;&quot;</span></span>
<span class="line"><span style="color: #E0DEF4">		</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;created_timestamp&quot;</span><span style="color: #908CAA">]</span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">string</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">1</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;0&quot;</span></span>
<span class="line"><span style="color: #E0DEF4">		</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;copyright&quot;</span><span style="color: #908CAA">]</span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">string</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">0</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;&quot;</span></span>
<span class="line"><span style="color: #E0DEF4">		</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;focal_length&quot;</span><span style="color: #908CAA">]</span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">string</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">1</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;0&quot;</span></span>
<span class="line"><span style="color: #E0DEF4">		</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;iso&quot;</span><span style="color: #908CAA">]</span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">string</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">1</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;0&quot;</span></span>
<span class="line"><span style="color: #E0DEF4">		</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;shutter_speed&quot;</span><span style="color: #908CAA">]</span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">string</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">1</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;0&quot;</span></span>
<span class="line"><span style="color: #E0DEF4">		</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;title&quot;</span><span style="color: #908CAA">]</span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">string</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">0</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;&quot;</span></span>
<span class="line"><span style="color: #E0DEF4">		</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;orientation&quot;</span><span style="color: #908CAA">]</span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">string</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">1</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;0&quot;</span></span>
<span class="line"><span style="color: #E0DEF4">		</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;keywords&quot;</span><span style="color: #908CAA">]</span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">array</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">0</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">}</span></span>
<span class="line"><span style="color: #E0DEF4">	</span><span style="color: #908CAA">}</span></span>
<span class="line"><span style="color: #908CAA">}</span></span>
<span class="line"><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">test_result</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">in_array</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">0</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">array</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic">test_result is &quot;false&quot;</span></span>
<span class="line"><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">test_result2</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">in_array</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">0</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">array</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&#39;image_meta&#39;</span><span style="color: #908CAA">])</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic">test_result is &quot;true&quot;</span></span></code></pre></div>



<p class="has-large-font-size">Findings:</p>



<p>You must reference the element that contains the array you want to search. You cannot reference the top-level array only and expect it to traverse down through sub-arrays.</p>



<figure class="wp-block-pullquote is-style-default has-theme-palette-7-background-color has-background has-medium-font-size"><blockquote><p>The in_array() function alone does not recurse through multidimensional arrays.<br><br>The command searches a single-level only.</p></blockquote></figure>



<h2 class="wp-block-heading">Searching in Multidimensional Arrays</h2>



<p>While <strong>in_array()</strong> works great for one-dimensional arrays, it doesn&#8217;t directly search nested arrays. To search in multidimensional arrays, you&#8217;ll need to use it in combination with other functions or write a custom function.</p>



<p>Here&#8217;s an example of how you might search a multidimensional array:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d2b46;color:#cecbee">PHP</span><span role="button" tabindex="0" data-code="function in_array_r($needle, $haystack, $strict = false) {
    foreach ($haystack as $item) {
        if (($strict ? $item === $needle : $item == $needle) || (is_array($item) &amp;&amp; in_array_r($needle, $item, $strict))) {
            return true;
        }
    }
    return false;
}

$users = array(
    array(&quot;name&quot; =&gt; &quot;John&quot;, &quot;age&quot; =&gt; 25),
    array(&quot;name&quot; =&gt; &quot;Jane&quot;, &quot;age&quot; =&gt; 30)
);

var_dump(in_array_r(&quot;Jane&quot;, $users));  // Output: bool(true)" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #3E8FB0">function</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">in_array_r</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">needle</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">haystack</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">strict</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">false</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #3E8FB0">foreach</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">haystack</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">as</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">item</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #3E8FB0">if</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">((</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">strict</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">?</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">item</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">===</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">needle</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">:</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">item</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">==</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">needle</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">||</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">(</span><span style="color: #EB6F92; font-style: italic">is_array</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">item</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">&amp;&amp;</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">in_array_r</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">needle</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">item</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">strict</span><span style="color: #908CAA">)))</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">            </span><span style="color: #3E8FB0">return</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">true</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #908CAA">}</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA">}</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #3E8FB0">return</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">false</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #908CAA">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">users</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">array</span><span style="color: #908CAA">(</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #EB6F92; font-style: italic">array</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&quot;name&quot;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;John&quot;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;age&quot;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">25</span><span style="color: #908CAA">),</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #EB6F92; font-style: italic">array</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&quot;name&quot;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;Jane&quot;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;age&quot;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">30</span><span style="color: #908CAA">)</span></span>
<span class="line"><span style="color: #908CAA">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #EB6F92; font-style: italic">var_dump</span><span style="color: #908CAA">(</span><span style="color: #EA9A97">in_array_r</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&quot;Jane&quot;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">users</span><span style="color: #908CAA">));</span><span style="color: #E0DEF4">  </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Output: bool(true)</span></span></code></pre></div>



<h2 class="wp-block-heading">Performance Considerations</h2>



<p>While <strong>in_array()</strong> is convenient, it can be slower for large arrays because it performs a linear search. For better performance with large datasets, consider using <strong>array_flip()</strong> in combination with <strong>isset()</strong>:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d2b46;color:#cecbee">PHP</span><span role="button" tabindex="0" data-code="$fruits = array(&quot;apple&quot;, &quot;banana&quot;, &quot;orange&quot;);
$flipped = array_flip($fruits);

if (isset($flipped[&quot;banana&quot;])) {
    echo &quot;Found banana!&quot;;
}" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">fruits</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">array</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&quot;apple&quot;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;banana&quot;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;orange&quot;</span><span style="color: #908CAA">);</span></span>
<span class="line"><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">flipped</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">array_flip</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">fruits</span><span style="color: #908CAA">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #3E8FB0">if</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">(</span><span style="color: #EB6F92; font-style: italic">isset</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">flipped</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&quot;banana&quot;</span><span style="color: #908CAA">]))</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #EB6F92; font-style: italic">echo</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&quot;Found banana!&quot;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #908CAA">}</span></span></code></pre></div>



<p>This method is generally faster for large arrays because <strong>isset()</strong> has constant time complexity.</p>



<h2 class="wp-block-heading">Common Use Cases</h2>



<ol class="wp-block-list">
<li><strong>Input Validation</strong>: Check if a user&#8217;s input is in a list of allowed values.</li>



<li><strong>Filtering Data</strong>: Remove or keep elements based on whether they exist in another array.</li>



<li><strong>Menu Highlighting</strong>: Determine if the current page is in the list of menu items.</li>



<li><strong>Permission Checking</strong>: Verify if a user has a specific permission from a list.</li>
</ol>



<h2 class="wp-block-heading">Conclusion</h2>



<p>The <strong>in_array()</strong> function is a versatile tool in PHP for checking the existence of values in arrays. Unfortunately, I&#8217;ve spent many hours trying to debug an in_array() command and wondering why it wasn&#8217;t finding a value that was in a sub-array. Seems simple, but it&#8217;s easy to forget.</p>



<p>Remember to consider performance implications for large datasets and explore alternative methods when dealing with multidimensional arrays.</p>



<p>As with any PHP function, it&#8217;s always a good idea to refer to the <a href="https://www.php.net/docs.php" target="_blank" rel="noreferrer noopener">official PHP documentation</a> for the most up-to-date information and additional details about <strong>in_array()</strong> and related functions.</p>



<p>Happy coding!</p>



<p>P.S. Read this if you want to <a href="https://blog.gravyware.com/what-is-ec2-setup-a-web-server-tutorial-in-aws">set up your own PHP server in AWS</a>.</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Use Shortcodes in WordPress: A Beginner&#8217;s Guide</title>
		<link>https://blog.gravyware.com/how-to-use-shortcodes-in-wordpress</link>
		
		<dc:creator><![CDATA[David Garthe]]></dc:creator>
		<pubDate>Wed, 07 Aug 2024 20:56:43 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Programming]]></category>
		<guid isPermaLink="false">https://blog.gravyware.com/?p=3390</guid>

					<description><![CDATA[Learn how to effectively use a shortcode in WordPress without writing complex code. This guide covers every method of using shortcodes in the editor and code.]]></description>
										<content:encoded><![CDATA[
<p>Shortcodes are convenient tools that allow you to add features or styled content to your posts or pages without needing to write complex code. They are enclosed in square brackets and may include attributes that customize their behavior.</p>



<p>We&#8217;ll explore how to find shortcodes from various sources such as WordPress core, themes, and plugins. Additionally, we&#8217;ll cover how to use shortcodes in both the block editor (Gutenberg) and the classic editor.</p>



<div class="wp-block-rank-math-toc-block has-theme-palette-7-background-color has-background" style="margin-top:0;margin-bottom:0;padding-top:var(--wp--preset--spacing--30);padding-right:var(--wp--preset--spacing--20);padding-bottom:var(--wp--preset--spacing--30);padding-left:var(--wp--preset--spacing--20)" id="rank-math-toc"><h2>Table of Contents</h2><nav><ul><li><a href="#lets-get-started">Let&#8217;s get started</a></li><li><a href="#understanding-shortcodes">Understanding shortcodes</a></li><li><a href="#finding-shortcodes">Finding Shortcodes</a><ul><li><a href="#shortcodes-finder-plugin">Shortcodes Finder Plugin</a></li></ul></li><li><a href="#how-to-reference-a-shortcode">How to Reference a Shortcode</a><ul><li><a href="#in-the-block-editor-gutenberg">In the Block Editor (Gutenberg)</a></li><li><a href="#in-the-classic-editor">In the Classic Editor</a></li></ul></li><li><a href="#using-shortcodes-in-widgets">Using Shortcodes in Widgets</a></li><li><a href="#using-shortcodes-with-attributes">Using Shortcodes with Attributes</a></li><li><a href="#using-shortcodes-in-php-code">Using Shortcodes in PHP code</a></li><li><a href="#creating-shortcodes-in-php-code">Creating Shortcodes in PHP code</a></li><li><a href="#troubleshooting-shortcodes">Troubleshooting Shortcodes</a></li><li><a href="#best-practices">Best Practices</a></li></ul></nav></div>



<h2 class="wp-block-heading" id="lets-get-started">Let&#8217;s get started</h2>



<p>Shortcodes are convenient tools in WordPress that allow you to add features or styled content to your posts or pages without needing to write complex code. Here&#8217;s how to use shortcodes created by others:</p>



<h2 class="wp-block-heading" id="understanding-shortcodes">Understanding shortcodes</h2>



<p>Shortcodes typically look like this: [shortcode_name] or [shortcode_name attribute=&#8221;value&#8221;].</p>



<p>They&#8217;re enclosed in square brackets and may include attributes that customize their behavior.</p>



<h2 class="wp-block-heading" id="finding-shortcodes">Finding Shortcodes</h2>



<p>Shortcodes can come from various sources:</p>



<ul class="wp-block-list">
<li>WordPress core (e.g., gallery, caption)</li>



<li>Your theme</li>



<li>Plugins you&#8217;ve installed</li>
</ul>



<p>To find available shortcodes:</p>



<ul class="wp-block-list">
<li>Check your theme&#8217;s documentation</li>



<li>Look in the settings or documentation of your installed plugins</li>



<li>Use a plugin like &#8220;Shortcodes Finder&#8221; to discover shortcodes on your site</li>
</ul>



<p>To find the available shortcodes on your website, check your theme&#8217;s documentation, the settings or documentation of your installed plugins, or use a plugin like Shortcode Finder. To install it, go to plugins, click &#8220;Add New,&#8221; type &#8220;Shortcode Finder,&#8221; and search for it.</p>



<h3 class="wp-block-heading" id="shortcodes-finder-plugin">Shortcodes Finder Plugin</h3>



<p>First, install this free plugin.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="569" height="305" src="https://blog.gravyware.com/wp-content/uploads/2024/08/image-3.png" alt="shortcodes finder plugin" class="wp-image-3393" srcset="https://blog.gravyware.com/wp-content/uploads/2024/08/image-3.png 569w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-3-300x161.png 300w" sizes="auto, (max-width: 569px) 100vw, 569px" /></figure>



<p>To use the plugin, go to the &#8220;Tools&#8221; admin section, and find the link called &#8220;Shortcodes Finder&#8221;.</p>



<p>Click &#8220;Tools&#8221;, and then &#8220;Shortcodes Finder&#8221; near the bottom.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1532" height="726" src="https://blog.gravyware.com/wp-content/uploads/2024/08/image-13.png" alt="Step 4: Click on Tools then Shortcodes Finder near the bottom" class="wp-image-3423" srcset="https://blog.gravyware.com/wp-content/uploads/2024/08/image-13.png 1532w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-13-300x142.png 300w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-13-1024x485.png 1024w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-13-768x364.png 768w" sizes="auto, (max-width: 1532px) 100vw, 1532px" /></figure>



<p></p>



<p>In the Shortcodes Finder tool, go to Documentation to find everything or locate unused shortcodes.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1532" height="726" src="https://blog.gravyware.com/wp-content/uploads/2024/08/image-12.png" alt="Step 5: Click on Documentation" class="wp-image-3422" srcset="https://blog.gravyware.com/wp-content/uploads/2024/08/image-12.png 1532w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-12-300x142.png 300w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-12-1024x485.png 1024w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-12-768x364.png 768w" sizes="auto, (max-width: 1532px) 100vw, 1532px" /></figure>



<p></p>



<p>If you click on the WordPress front end and do a search, it will display the various shortcodes you can use.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1532" height="726" src="https://blog.gravyware.com/wp-content/uploads/2024/08/image-14.png" alt="Step 6: Click here" class="wp-image-3424" srcset="https://blog.gravyware.com/wp-content/uploads/2024/08/image-14.png 1532w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-14-300x142.png 300w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-14-1024x485.png 1024w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-14-768x364.png 768w" sizes="auto, (max-width: 1532px) 100vw, 1532px" /></figure>



<p></p>



<p>You&#8217;ll see some built-in WordPress shortcodes listed.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1532" height="726" src="https://blog.gravyware.com/wp-content/uploads/2024/08/image-11.png" alt="Step 8: Youll see some built-in WordPress shortcodes listed" class="wp-image-3421" srcset="https://blog.gravyware.com/wp-content/uploads/2024/08/image-11.png 1532w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-11-300x142.png 300w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-11-1024x485.png 1024w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-11-768x364.png 768w" sizes="auto, (max-width: 1532px) 100vw, 1532px" /></figure>



<p>You have audio, caption, gallery, and others. These are some of the shortcodes built into WordPress that you can use immediately.</p>



<h2 class="wp-block-heading" id="how-to-reference-a-shortcode">How to Reference a Shortcode</h2>



<p>How do we actually use shortcodes in a WordPress site? The methods depend on how your site is setup. Your theme will most likely have either a block editor or the classic editor when editing pages and posts.</p>



<h3 class="wp-block-heading" id="in-the-block-editor-gutenberg">In the Block Editor (Gutenberg)</h3>



<p>While in the area you want to place the shortcode, type &#8220;/&#8221; to bring up options.</p>



<p>Click on &#8220;[ / ] Shortcode&#8221;.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1532" height="726" src="https://blog.gravyware.com/wp-content/uploads/2024/08/image-15.png" alt="Step 13: Click on    Shortcode" class="wp-image-3425" srcset="https://blog.gravyware.com/wp-content/uploads/2024/08/image-15.png 1532w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-15-300x142.png 300w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-15-1024x485.png 1024w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-15-768x364.png 768w" sizes="auto, (max-width: 1532px) 100vw, 1532px" /></figure>



<p>Enter your shortcode in the box and hit save.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1532" height="726" src="https://blog.gravyware.com/wp-content/uploads/2024/08/image-6.png" alt="Step 16: Click on  gallery ids   37383940  " class="wp-image-3416" srcset="https://blog.gravyware.com/wp-content/uploads/2024/08/image-6.png 1532w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-6-300x142.png 300w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-6-1024x485.png 1024w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-6-768x364.png 768w" sizes="auto, (max-width: 1532px) 100vw, 1532px" /></figure>



<h3 class="wp-block-heading" id="in-the-classic-editor">In the Classic Editor</h3>



<p>In the classic editor, you need to go to the Text section of a page (Top right corner of the text area) and manually type out the shortcode.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1532" height="726" src="https://blog.gravyware.com/wp-content/uploads/2024/08/image-7.png" alt="Step 20: Click on Text" class="wp-image-3417" srcset="https://blog.gravyware.com/wp-content/uploads/2024/08/image-7.png 1532w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-7-300x142.png 300w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-7-1024x485.png 1024w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-7-768x364.png 768w" sizes="auto, (max-width: 1532px) 100vw, 1532px" /></figure>



<p></p>



<p>Simply <strong>type or paste the shortcode directly into the content area</strong> where you want it to appear and Save the page or post.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="800" height="382" src="https://blog.gravyware.com/wp-content/uploads/2024/08/image-5.png" alt="" class="wp-image-3401" srcset="https://blog.gravyware.com/wp-content/uploads/2024/08/image-5.png 800w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-5-300x143.png 300w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-5-768x367.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<p>When viewed from the front end, the shortcode will be deciphered by WordPress, and the result will be displayed to the user in their browser window.</p>



<p></p>



<h2 class="wp-block-heading" id="using-shortcodes-in-widgets">Using Shortcodes in Widgets</h2>



<p>You can also use shortcuts in widgets. To use shortcuts in widgets, go to Appearance, then Widgets.</p>



<p><strong>1.</strong> Go to Appearance > Widgets in your WordPress dashboard</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1532" height="822" src="https://blog.gravyware.com/wp-content/uploads/2024/08/image-16.png" alt="Step 1: Go to Appearance  Widgets in your WordPress dashboard" class="wp-image-3426" srcset="https://blog.gravyware.com/wp-content/uploads/2024/08/image-16.png 1532w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-16-300x161.png 300w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-16-1024x549.png 1024w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-16-768x412.png 768w" sizes="auto, (max-width: 1532px) 100vw, 1532px" /></figure>



<p><strong>2.</strong> You can see that this site already uses shortcodes in the &#8220;Sidebar 1&#8221; widget.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1532" height="822" src="https://blog.gravyware.com/wp-content/uploads/2024/08/image-8.png" alt="Step 2: You can see that this site already uses shortcodes in the Sidebar 1 widget" class="wp-image-3418" srcset="https://blog.gravyware.com/wp-content/uploads/2024/08/image-8.png 1532w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-8-300x161.png 300w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-8-1024x549.png 1024w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-8-768x412.png 768w" sizes="auto, (max-width: 1532px) 100vw, 1532px" /></figure>



<p>To add another one, click the Add button. Check the shortcode type, then type it in.</p>



<p><strong>3.</strong> Click on &#8220;+&#8221; to add a new shortcode reference.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1532" height="822" src="https://blog.gravyware.com/wp-content/uploads/2024/08/image-9.png" alt="Step 3: Click on " class="wp-image-3419" srcset="https://blog.gravyware.com/wp-content/uploads/2024/08/image-9.png 1532w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-9-300x161.png 300w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-9-1024x549.png 1024w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-9-768x412.png 768w" sizes="auto, (max-width: 1532px) 100vw, 1532px" /></figure>



<p><strong>4.</strong> Click on &#8220;Custom HTML&#8221;. You might have to search for it if it&#8217;s not one of the first few.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1532" height="822" src="https://blog.gravyware.com/wp-content/uploads/2024/08/image-10.png" alt="Step 4: Click on Custom HTML You might have to search for it if its not one of the first few" class="wp-image-3420" srcset="https://blog.gravyware.com/wp-content/uploads/2024/08/image-10.png 1532w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-10-300x161.png 300w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-10-1024x549.png 1024w, https://blog.gravyware.com/wp-content/uploads/2024/08/image-10-768x412.png 768w" sizes="auto, (max-width: 1532px) 100vw, 1532px" /></figure>



<p>Type or paste in the new shortcode and hit Save.</p>



<h2 class="wp-block-heading" id="using-shortcodes-with-attributes">Using Shortcodes with Attributes</h2>



<p>Many shortcodes accept attributes to customize their output. Check your theme or plugin documentation to see what&#8217;s available.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="[shortcode_name attribute1=&quot;value1&quot; attribute2=&quot;value2&quot;]" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #E0DEF4">[</span><span style="color: #E0DEF4; font-style: italic">shortcode_name</span><span style="color: #E0DEF4"> </span><span style="color: #E0DEF4; font-style: italic">attribute1</span><span style="color: #3E8FB0">=</span><span style="color: #F6C177">&quot;value1&quot;</span><span style="color: #E0DEF4"> </span><span style="color: #E0DEF4; font-style: italic">attribute2</span><span style="color: #3E8FB0">=</span><span style="color: #F6C177">&quot;value2&quot;</span><span style="color: #E0DEF4">]</span></span></code></pre></div>



<p></p>



<p>Here&#8217;s an example using a hypothetical &#8220;slider&#8221; shortcode:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="[slider id=&quot;homepage&quot; speed=&quot;500&quot; arrows=&quot;true&quot;]" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #E0DEF4">[</span><span style="color: #E0DEF4; font-style: italic">slider</span><span style="color: #E0DEF4"> </span><span style="color: #E0DEF4; font-style: italic">id</span><span style="color: #3E8FB0">=</span><span style="color: #F6C177">&quot;homepage&quot;</span><span style="color: #E0DEF4"> </span><span style="color: #E0DEF4; font-style: italic">speed</span><span style="color: #3E8FB0">=</span><span style="color: #F6C177">&quot;500&quot;</span><span style="color: #E0DEF4"> </span><span style="color: #E0DEF4; font-style: italic">arrows</span><span style="color: #3E8FB0">=</span><span style="color: #F6C177">&quot;true&quot;</span><span style="color: #E0DEF4">]</span></span></code></pre></div>



<p></p>



<p>Here&#8217;s a gallery of specific images. The <strong>&#8220;gallery&#8221;</strong> shortcode without the IDs attribute will return all images associated with that particular page or post.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #E0DEF4">[</span><span style="color: #E0DEF4; font-style: italic">gallery</span><span style="color: #E0DEF4"> </span><span style="color: #E0DEF4; font-style: italic">ids</span><span style="color: #3E8FB0">=</span><span style="color: #F6C177">&quot;123,124,125&quot;</span><span style="color: #E0DEF4">]</span></span></code></pre></div>



<p></p>



<h2 class="wp-block-heading" id="using-shortcodes-in-php-code">Using Shortcodes in PHP code</h2>



<p>Let&#8217;s say you&#8217;re creating a custom theme and need to insert a shortcode directly within the PHP code.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d2b46;color:#cecbee">PHP</span><span role="button" tabindex="0" data-code="&lt;?php echo do_shortcode('[your_shortcode]'); ?&gt;
//simply replace &quot;your_shortcode&quot; with your actual shortcode and you're set." style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #3E8FB0">&lt;?php</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">echo</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">do_shortcode</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;[your_shortcode]&#39;</span><span style="color: #908CAA">);</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">?&gt;</span></span>
<span class="line"><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic">simply replace &quot;your_shortcode&quot; with your actual shortcode and you&#39;re set.</span></span></code></pre></div>



<p></p>



<h2 class="wp-block-heading" id="creating-shortcodes-in-php-code">Creating Shortcodes in PHP code</h2>



<p>This bit is a bit more advanced, but here&#8217;s how you can create a completely new shortcode for your theme. The following code would go into your <strong>functions.php</strong> file.</p>



<p>The new shortcode &#8211; <strong>[last_10_posts]</strong> &#8211; will execute the code below and return the most recent 10 post titles.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e0def4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2d2b46;color:#cecbee">PHP</span><span role="button" tabindex="0" data-code="function last_10_posts_shortcode() {
    // Query for the last 10 posts
    $args = array(
        'numberposts' =&gt; 10,
        'post_status' =&gt; 'publish',
    );
    $recent_posts = wp_get_recent_posts($args);

    // Start output buffering
    ob_start();

    // Check if there are any posts
    if (!empty($recent_posts)) {
        echo '&lt;ul&gt;';
        foreach ($recent_posts as $post) {
            echo '&lt;li&gt;&lt;a href=&quot;' . get_permalink($post['ID']) . '&quot;&gt;' . esc_html($post['post_title']) . '&lt;/a&gt;&lt;/li&gt;';
        }
        echo '&lt;/ul&gt;';
    } else {
        echo '&lt;p&gt;No recent posts found.&lt;/p&gt;';
    }

    // Get the output buffer content
    $output = ob_get_clean();

    return $output;
}

// Register the shortcode
add_shortcode('last_10_posts', 'last_10_posts_shortcode');" style="color:#e0def4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki rose-pine-moon" style="background-color: #232136" tabindex="0"><code><span class="line"><span style="color: #3E8FB0">function</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">last_10_posts_shortcode</span><span style="color: #908CAA">()</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #908CAA">    </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Query for the last 10 posts</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">args</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">array</span><span style="color: #908CAA">(</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #F6C177">&#39;numberposts&#39;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">10</span><span style="color: #908CAA">,</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #F6C177">&#39;post_status&#39;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=&gt;</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;publish&#39;</span><span style="color: #908CAA">,</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA">);</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">recent_posts</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">wp_get_recent_posts</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">args</span><span style="color: #908CAA">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #908CAA">    </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Start output buffering</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #EB6F92; font-style: italic">ob_start</span><span style="color: #908CAA">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #908CAA">    </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Check if there are any posts</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #3E8FB0">if</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">(</span><span style="color: #3E8FB0">!</span><span style="color: #EB6F92; font-style: italic">empty</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">recent_posts</span><span style="color: #908CAA">))</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #EB6F92; font-style: italic">echo</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;&lt;ul&gt;&#39;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #3E8FB0">foreach</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">recent_posts</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">as</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">post</span><span style="color: #908CAA">)</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">            </span><span style="color: #EB6F92; font-style: italic">echo</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;&lt;li&gt;&lt;a href=&quot;&#39;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">.</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">get_permalink</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">post</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&#39;ID&#39;</span><span style="color: #908CAA">])</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">.</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;&quot;&gt;&#39;</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">.</span><span style="color: #E0DEF4"> </span><span style="color: #EA9A97">esc_html</span><span style="color: #908CAA">(</span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">post</span><span style="color: #908CAA">[</span><span style="color: #F6C177">&#39;post_title&#39;</span><span style="color: #908CAA">])</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">.</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;&lt;/a&gt;&lt;/li&gt;&#39;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #908CAA">}</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #EB6F92; font-style: italic">echo</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;&lt;/ul&gt;&#39;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA">}</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">else</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA">{</span></span>
<span class="line"><span style="color: #E0DEF4">        </span><span style="color: #EB6F92; font-style: italic">echo</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;&lt;p&gt;No recent posts found.&lt;/p&gt;&#39;</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #908CAA">    </span><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Get the output buffer content</span></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">output</span><span style="color: #E0DEF4"> </span><span style="color: #3E8FB0">=</span><span style="color: #E0DEF4"> </span><span style="color: #EB6F92; font-style: italic">ob_get_clean</span><span style="color: #908CAA">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E0DEF4">    </span><span style="color: #3E8FB0">return</span><span style="color: #E0DEF4"> </span><span style="color: #908CAA; font-style: italic">$</span><span style="color: #E0DEF4; font-style: italic">output</span><span style="color: #908CAA">;</span></span>
<span class="line"><span style="color: #908CAA">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #908CAA; font-style: italic">//</span><span style="color: #6E6A86; font-style: italic"> Register the shortcode</span></span>
<span class="line"><span style="color: #EA9A97">add_shortcode</span><span style="color: #908CAA">(</span><span style="color: #F6C177">&#39;last_10_posts&#39;</span><span style="color: #908CAA">,</span><span style="color: #E0DEF4"> </span><span style="color: #F6C177">&#39;last_10_posts_shortcode&#39;</span><span style="color: #908CAA">);</span></span></code></pre></div>



<p></p>



<h2 class="wp-block-heading" id="troubleshooting-shortcodes">Troubleshooting Shortcodes</h2>



<p>If a shortcode isn&#8217;t working:</p>



<ul class="wp-block-list">
<li>Double-check the syntax, including spelling and attributes</li>



<li>Ensure the plugin or theme providing the shortcode is active</li>



<li>Check if the shortcode requires any specific setup or configuration</li>
</ul>



<h2 class="wp-block-heading" id="best-practices">Best Practices</h2>



<ol start="8" class="wp-block-list"></ol>



<ul class="wp-block-list">
<li>Don&#8217;t overuse shortcodes; they can make your content harder to read and edit</li>



<li>Keep a list of the shortcodes you frequently use for easy reference</li>



<li>Always preview your content to ensure shortcodes are rendering correctly</li>
</ul>



<p>There is <a href="https://codex.wordpress.org/shortcode" target="_blank" rel="noreferrer noopener">additional information</a> on the WordPress site.</p>



<p>By following these steps, you should be able to effectively use shortcodes created by others in your WordPress site, enhancing its functionality and appearance without needing to write complex code yourself.</p>



<p>Good luck!</p>



<p></p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>S3 DeleteObject &#8211; How to Delete Multiple S3 Objects with NodeJS</title>
		<link>https://blog.gravyware.com/s3-deleteobject-for-multiple-s3-objects</link>
		
		<dc:creator><![CDATA[David Garthe]]></dc:creator>
		<pubDate>Fri, 27 Oct 2023 14:39:19 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<guid isPermaLink="false">https://blog.gravyware.com/?p=3332</guid>

					<description><![CDATA[Sometimes, you may need to delete multiple objects from an S3 bucket efficiently.  Here's how we did it using S3 DeleteObjects and NodeJS.]]></description>
										<content:encoded><![CDATA[
<p>Do you have a lot of random files in an S3 bucket that need to be deleted? We had about 12,000 random PDF files that needed to be deleted. They were mixed in with legitimate files and folders, so we needed a way to target specific files and bulk delete them easily.</p>



<p>Sometimes, you may need to delete multiple objects from an S3 bucket efficiently.  Here&#8217;s how we did it using S3 DeleteObjects and NodeJS.</p>


<div class="kb-row-layout-wrap kb-row-layout-id3332_9a4e60-ae alignnone wp-block-kadence-rowlayout"><div class="kt-row-column-wrap kt-has-1-columns kt-row-layout-equal kt-tab-layout-inherit kt-mobile-layout-row kt-row-valign-top">

<div class="wp-block-kadence-column kadence-column3332_449396-e8 kb-section-dir-vertical inner-column-1"><div class="kt-inside-inner-col"><p class="kt-adv-heading3332_f88f21-75 wp-block-kadence-advancedheading kt-adv-heading-has-icon" data-kb-block="kb-adv-heading3332_f88f21-75"><span class="kb-svg-icon-wrap kb-adv-heading-icon kb-svg-icon-fe_info kb-adv-heading-icon-side-left"><svg viewBox="0 0 24 24"  fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"  aria-hidden="true"><circle cx="12" cy="12" r="10"/><line x1="12" y1="16" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="8"/></svg></span><span class="kb-adv-text-inner">This code will be run from your local computer.</span></p></div></div>

</div></div>


<p></p>





<p></p>



<h2 class="wp-block-heading">Assumptions</h2>



<ol class="wp-block-list">
<li>You have some experience with Node.js and can set up your development environment.</li>



<li>You know what &#8220;S3&#8221; and &#8220;IAM&#8221; are without looking them up.</li>



<li>You understand that mass deleting files can be crazy stressful, yet satisfying.</li>



<li>You understand that you are responsible for what you do.</li>
</ol>



<p>Do you fit these criteria?  Good, let&#8217;s keep going.</p>



<h2 class="wp-block-heading">Your AWS Environment Requirements</h2>



<p>Before you can start using the <a href="https://aws.amazon.com/sdk-for-javascript/" target="_blank" rel="noreferrer noopener">AWS SDK for JavaScript</a> to delete S3 objects, you need to make sure you have some information regarding your AWS environment:</p>



<ol class="wp-block-list">
<li><strong>AWS Account</strong>: You&#8217;ll need to have access to the AWS account.</li>



<li><strong>IAM User</strong>: <a href="https://www.msp360.com/resources/blog/how-to-find-your-aws-access-key-id-and-secret-access-key/" target="_blank" rel="noreferrer noopener nofollow">You&#8217;ll need an IAM</a> (Identity and Access Management) user with the necessary permissions for accessing and deleting objects in the S3 bucket.  You need their Access Keys.</li>



<li><strong>S3 Bucket</strong>: You&#8217;ll need to know which S3 bucket you want to delete objects from. Make sure the IAM user has the required permissions for this bucket.</li>
</ol>



<h2 class="wp-block-heading">Installing and Configuring the AWS SDK for JavaScript</h2>



<p>To use the AWS SDK for JavaScript, you need to install it and configure your AWS credentials. If you haven&#8217;t already installed Node.js and npm (Node Package Manager), make sure to do that first.</p>



<h3 class="wp-block-heading">Installation</h3>



<p>You can install the AWS SDK for JavaScript using npm:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(251, 251, 239, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">JavaScript</span><span role="button" tabindex="0" data-code="npm install @aws-sdk/client-s3" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4">npm install @</span><span style="color: #62E884; font-style: italic">aws</span><span style="color: #F286C4">-</span><span style="color: #62E884; font-style: italic">sdk</span><span style="color: #F286C4">/</span><span style="color: #62E884; font-style: italic">client</span><span style="color: #F286C4">-</span><span style="color: #62E884; font-style: italic">s3</span></span></code></pre></div>



<p>Also, because we&#8217;re dealing with credentials, you&#8217;ll want to install <a href="https://www.npmjs.com/package/dotenv-safe" target="_blank" rel="noreferrer noopener nofollow">dotenv-safe</a>.</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">JavaScript</span><span role="button" tabindex="0" data-code="npm install @dotenv-safe" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4">npm install @</span><span style="color: #62E884; font-style: italic">dotenv</span><span style="color: #F286C4">-</span><span style="color: #62E884; font-style: italic">safe</span></span></code></pre></div>



<p></p>



<p>Alrighty.  Let&#8217;s do this.</p>



<h3 class="wp-block-heading">Configuration</h3>



<p>There are three main files in this lesson.  They could have been combined into a single file, but separating them simplifies things a bit.</p>



<figure class="wp-block-kadence-image kb-image3332_82fda5-a1 size-full"><img loading="lazy" decoding="async" width="632" height="160" src="https://blog.gravyware.com/wp-content/uploads/2023/10/s3-deleting-multiple-objects.jpg" alt="the files needed to use the s3 deleteobject command" class="kb-img wp-image-3351" srcset="https://blog.gravyware.com/wp-content/uploads/2023/10/s3-deleting-multiple-objects.jpg 632w, https://blog.gravyware.com/wp-content/uploads/2023/10/s3-deleting-multiple-objects-300x76.jpg 300w" sizes="auto, (max-width: 632px) 100vw, 632px" /></figure>



<p>After installing the SDK, you must configure it with your AWS credentials. The AWS SDK for JavaScript will use these credentials to interact with your AWS services.</p>



<p>You can configure the SDK credentials using the <strong>dotenv-safe</strong> library.  Create a file named &#8220;.env&#8221; and update the lines below with your credentials and bucket information:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(251, 251, 239, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">.env</span><span role="button" tabindex="0" data-code="# credentials
S3_REGION = &quot;us-east-1&quot;
ACCESS_KEY_ID = &quot;AKIX8S45D49DJDH7JUNG&quot;
SECRET_ACCESS_KEY = &quot;f6+wDCaGIadoLdxlsE3d8DsnRv02c7jgo2&quot;

# bucket info.  Leave &quot;S3_FOLDER&quot; value blank if you want to start at the top level
S3_BUCKET = &quot;yourBucketName&quot;
S3_FOLDER = &quot;&quot;" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4"># credentials</span></span>
<span class="line"><span style="color: #F6F6F4">S3_REGION </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">us-east-1</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #F6F6F4">ACCESS_KEY_ID </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">AKIX8S45D49DJDH7JUNG</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #F6F6F4">SECRET_ACCESS_KEY </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">f6+wDCaGIadoLdxlsE3d8DsnRv02c7jgo2</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4"># bucket info.  Leave </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">S3_FOLDER</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4"> value blank </span><span style="color: #F286C4">if</span><span style="color: #F6F6F4"> you want to start at the top level</span></span>
<span class="line"><span style="color: #F6F6F4">S3_BUCKET </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">yourBucketName</span><span style="color: #DEE492">&quot;</span></span>
<span class="line"><span style="color: #F6F6F4">S3_FOLDER </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;&quot;</span></span></code></pre></div>



<p>In this script:</p>



<ul class="wp-block-list">
<li>Line 1-4: Your IAM credentials with proper permissions</li>



<li>Line 7: S3 bucket name</li>



<li>Line 8: Folder (S3 calls it a &#8220;Prefix&#8221;) below the bucket listed on line 7.  Add a value here only if you want to limit the script to search and delete from this folder (and below).</li>
</ul>



<h2 class="wp-block-heading">Listing Out the S3 Objects to be Deleted</h2>



<p>Now that your environment is set up and the AWS SDK is configured, let&#8217;s explore how to first list out the S3 objects you want to list.  Once we limit the list to what we want, we can go on to the next step and delete them.</p>



<p>Here&#8217;s how I went about listing the files I wanted to delete:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(251, 251, 239, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">list-all-s3-files.js</span><span role="button" tabindex="0" data-code="//this file lists the objects in an S3 bucket.  Max rows is 1000.

import 'dotenv/config';
import { S3Client, ListObjectsV2Command } from &quot;@aws-sdk/client-s3&quot;;

let client = new S3Client({
    region: process.env.S3_REGION,
    credentials: {
        accessKeyId: process.env.ACCESS_KEY_ID,
        secretAccessKey: process.env.SECRET_ACCESS_KEY
    }
});

const command = new ListObjectsV2Command({
    Bucket: process.env.S3_BUCKET,
    Prefix: process.env.S3_FOLDER,
    MaxKeys: 1000,
});

(async () =&gt; {

    const response = await client.send(command);

    // if you want to limit this list, add code here to change the &quot;response&quot; variable to only include files that fit

        //EXAMPLE 1 - reduce list to items between two dates
            // Define the date range for filtering
            //const startDate = new Date('2022-1-1');
            //const endDate = new Date('2023-1-1');
            // Filter the &quot;Contents&quot; array
            //const filteredContents = response.Contents.filter(item =&gt; {
            //    const lastModifiedDate = new Date(item.LastModified);
            //    return lastModifiedDate &gt;= startDate &amp;&amp; lastModifiedDate &lt;= endDate;
            //});
            // Update the &quot;Contents&quot; property in the response object
            //response.Contents = filteredContents;
        //EXAMPLE 1 END

        //EXAMPLE 2 - reduce file list to items with &quot;150&quot; in the file name
            const filteredContents = response.Contents.filter(item =&gt; item.Key.includes(&quot;150&quot;));
            // Update the &quot;Contents&quot; property in the response object
            response.Contents = filteredContents;
        //EXAMPLE 2 END

    //at this point we have the results in a single variable(&quot;response&quot;) with LastModified, Size, and StorageClass attributes included
    //console.log(response); //uncomment to see the full list

    // We just want the filename so we limit this list to get just the &quot;Key&quot; values
    const keys = response.Contents.map(item =&gt; item.Key).map(item =&gt; ({ Key: item }));
    console.log(keys);

})();

" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #7B7F8B">//this file lists the objects in an S3 bucket.  Max rows is 1000.</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">import</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">dotenv/config</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">;</span></span>
<span class="line"><span style="color: #F286C4">import</span><span style="color: #F6F6F4"> { S3Client, ListObjectsV2Command } </span><span style="color: #F286C4">from</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">@aws-sdk/client-s3</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">let</span><span style="color: #F6F6F4"> client </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4; font-weight: bold">new</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">S3Client</span><span style="color: #F6F6F4">({</span></span>
<span class="line"><span style="color: #F6F6F4">    region</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> process.env.</span><span style="color: #BF9EEE">S3_REGION</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">    credentials</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> {</span></span>
<span class="line"><span style="color: #F6F6F4">        accessKeyId</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> process.env.</span><span style="color: #BF9EEE">ACCESS_KEY_ID</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">        secretAccessKey</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> process.env.</span><span style="color: #BF9EEE">SECRET_ACCESS_KEY</span></span>
<span class="line"><span style="color: #F6F6F4">    }</span></span>
<span class="line"><span style="color: #F6F6F4">});</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">const</span><span style="color: #F6F6F4"> command </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4; font-weight: bold">new</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">ListObjectsV2Command</span><span style="color: #F6F6F4">({</span></span>
<span class="line"><span style="color: #F6F6F4">    Bucket</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> process.env.</span><span style="color: #BF9EEE">S3_BUCKET</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">    Prefix</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> process.env.</span><span style="color: #BF9EEE">S3_FOLDER</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">    MaxKeys</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">1000</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">});</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">(</span><span style="color: #F286C4">async</span><span style="color: #F6F6F4"> () </span><span style="color: #F286C4">=&gt;</span><span style="color: #F6F6F4"> {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">const</span><span style="color: #F6F6F4"> response </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">await</span><span style="color: #F6F6F4"> client.</span><span style="color: #62E884">send</span><span style="color: #F6F6F4">(command);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #7B7F8B">// if you want to limit this list, add code here to change the &quot;response&quot; variable to only include files that fit</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #7B7F8B">//EXAMPLE 1 - reduce list to items between two dates</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #7B7F8B">// Define the date range for filtering</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #7B7F8B">//const startDate = new Date(&#39;2022-1-1&#39;);</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #7B7F8B">//const endDate = new Date(&#39;2023-1-1&#39;);</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #7B7F8B">// Filter the &quot;Contents&quot; array</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #7B7F8B">//const filteredContents = response.Contents.filter(item =&gt; {</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #7B7F8B">//    const lastModifiedDate = new Date(item.LastModified);</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #7B7F8B">//    return lastModifiedDate &gt;= startDate &amp;&amp; lastModifiedDate &lt;= endDate;</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #7B7F8B">//});</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #7B7F8B">// Update the &quot;Contents&quot; property in the response object</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #7B7F8B">//response.Contents = filteredContents;</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #7B7F8B">//EXAMPLE 1 END</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #7B7F8B">//EXAMPLE 2 - reduce file list to items with &quot;150&quot; in the file name</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #F286C4">const</span><span style="color: #F6F6F4"> filteredContents </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> response.Contents.</span><span style="color: #62E884">filter</span><span style="color: #F6F6F4">(</span><span style="color: #FFB86C; font-style: italic">item</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">=&gt;</span><span style="color: #F6F6F4"> item.Key.</span><span style="color: #62E884">includes</span><span style="color: #F6F6F4">(</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">150</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">));</span></span>
<span class="line"><span style="color: #F6F6F4">            </span><span style="color: #7B7F8B">// Update the &quot;Contents&quot; property in the response object</span></span>
<span class="line"><span style="color: #F6F6F4">            response.Contents </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> filteredContents;</span></span>
<span class="line"><span style="color: #F6F6F4">        </span><span style="color: #7B7F8B">//EXAMPLE 2 END</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #7B7F8B">//at this point we have the results in a single variable(&quot;response&quot;) with LastModified, Size, and StorageClass attributes included</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #7B7F8B">//console.log(response); //uncomment to see the full list</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #7B7F8B">// We just want the filename so we limit this list to get just the &quot;Key&quot; values</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">const</span><span style="color: #F6F6F4"> keys </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> response.Contents.</span><span style="color: #62E884">map</span><span style="color: #F6F6F4">(</span><span style="color: #FFB86C; font-style: italic">item</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">=&gt;</span><span style="color: #F6F6F4"> item.Key).</span><span style="color: #62E884">map</span><span style="color: #F6F6F4">(</span><span style="color: #FFB86C; font-style: italic">item</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">=&gt;</span><span style="color: #F6F6F4"> ({ Key</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> item }));</span></span>
<span class="line"><span style="color: #F6F6F4">    console.</span><span style="color: #62E884">log</span><span style="color: #F6F6F4">(keys);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">})();</span></span>
<span class="line"></span>
<span class="line"></span></code></pre></div>



<p>In this script:</p>



<ul class="wp-block-list">
<li>Line 3-4: Import the libraries</li>



<li>Line 6-12: Create the connection to AWS and authenticate using the credentials in your <strong>.env</strong> file</li>



<li>Line 14-18: Create the command that you&#8217;ll send to AWS to retrieve all S3 objects</li>



<li>Line 22: Send the request to AWS and put the values returned in the &#8220;<strong>response</strong>&#8221; variable</li>



<li>Line 26-37: Example code if you want to reduce the file list based on dates</li>



<li>Line 39-43: Example code if you want to reduce the file list based on a text value in the file name.  Comment out if not needed</li>



<li>Line 49: This line extracts the file name (&#8220;<strong>Key</strong>&#8220;) value from the JavaScript object returned and puts it in a format to copy for deletion.</li>



<li>Line 50: Logs the list of Keys in the console.</li>
</ul>



<p>Run this script alone to get the full list of objects to be deleted.</p>



<h2 class="wp-block-heading">Deleting Multiple Objects With S3 DeleteObject</h2>



<p>Now that you have the file list you want to delete, let&#8217;s explore how to delete multiple S3 objects efficiently. To delete multiple objects, you can use the <strong>deleteObjects</strong> method provided by the AWS SDK for JavaScript.</p>



<p>Here&#8217;s a sample script to delete multiple objects from an S3 bucket:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(251, 251, 239, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">delete-multiple-s3-files.js</span><span role="button" tabindex="0" data-code="import 'dotenv/config';
import { DeleteObjectsCommand, S3Client } from &quot;@aws-sdk/client-s3&quot;;

let client = new S3Client({
    region: process.env.S3_REGION,
    credentials: {
        accessKeyId: process.env.ACCESS_KEY_ID,
        secretAccessKey: process.env.SECRET_ACCESS_KEY
    }
});

const command = new DeleteObjectsCommand({
    Bucket: process.env.S3_BUCKET,
    Delete: {
        Objects: [
            {Key: &quot;my-random-image.jpg&quot;}, // if in a directory: &quot;directory_name/file.ext&quot;
            {Key: &quot;wp-content/uploads/2022/08/19185558/some-other-random-image.jpg&quot;},
            {Key: &quot;wp-content/uploads/2023/05/19182148/another-random-image.jpg&quot;}
        ],
    }
});

(async () =&gt; {

    const response = await client.send(command);
    console.log(response);

})();
" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4">import</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">dotenv/config</span><span style="color: #DEE492">&#39;</span><span style="color: #F6F6F4">;</span></span>
<span class="line"><span style="color: #F286C4">import</span><span style="color: #F6F6F4"> { DeleteObjectsCommand, S3Client } </span><span style="color: #F286C4">from</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">@aws-sdk/client-s3</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">let</span><span style="color: #F6F6F4"> client </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4; font-weight: bold">new</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">S3Client</span><span style="color: #F6F6F4">({</span></span>
<span class="line"><span style="color: #F6F6F4">    region</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> process.env.</span><span style="color: #BF9EEE">S3_REGION</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">    credentials</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> {</span></span>
<span class="line"><span style="color: #F6F6F4">        accessKeyId</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> process.env.</span><span style="color: #BF9EEE">ACCESS_KEY_ID</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">        secretAccessKey</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> process.env.</span><span style="color: #BF9EEE">SECRET_ACCESS_KEY</span></span>
<span class="line"><span style="color: #F6F6F4">    }</span></span>
<span class="line"><span style="color: #F6F6F4">});</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">const</span><span style="color: #F6F6F4"> command </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4; font-weight: bold">new</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">DeleteObjectsCommand</span><span style="color: #F6F6F4">({</span></span>
<span class="line"><span style="color: #F6F6F4">    Bucket</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> process.env.</span><span style="color: #BF9EEE">S3_BUCKET</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">    Delete</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> {</span></span>
<span class="line"><span style="color: #F6F6F4">        Objects</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> [</span></span>
<span class="line"><span style="color: #F6F6F4">            {Key</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">my-random-image.jpg</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">}, </span><span style="color: #7B7F8B">// if in a directory: &quot;directory_name/file.ext&quot;</span></span>
<span class="line"><span style="color: #F6F6F4">            {Key</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">wp-content/uploads/2022/08/19185558/some-other-random-image.jpg</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">},</span></span>
<span class="line"><span style="color: #F6F6F4">            {Key</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">wp-content/uploads/2023/05/19182148/another-random-image.jpg</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">}</span></span>
<span class="line"><span style="color: #F6F6F4">        ],</span></span>
<span class="line"><span style="color: #F6F6F4">    }</span></span>
<span class="line"><span style="color: #F6F6F4">});</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">(</span><span style="color: #F286C4">async</span><span style="color: #F6F6F4"> () </span><span style="color: #F286C4">=&gt;</span><span style="color: #F6F6F4"> {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">const</span><span style="color: #F6F6F4"> response </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">await</span><span style="color: #F6F6F4"> client.</span><span style="color: #62E884">send</span><span style="color: #F6F6F4">(command);</span></span>
<span class="line"><span style="color: #F6F6F4">    console.</span><span style="color: #62E884">log</span><span style="color: #F6F6F4">(response);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F6F6F4">})();</span></span>
<span class="line"></span></code></pre></div>



<p>I&#8217;ve purposely kept this script&#8217;s object list manual since I didn&#8217;t want anyone to inadvertently delete more than they wanted.  It&#8217;s easy enough to automate yourself, or <a href="https://blog.gravyware.com/contact" target="_blank" data-type="link" data-id="https://blog.gravyware.com/contact" rel="noreferrer noopener">you can ask me</a> how to do it.</p>



<p>You&#8217;ll want to replace your list with the list I have on<strong> lines 16-18</strong>.  Just specify the directory and filename.</p>



<p>In this script:</p>



<ul class="wp-block-list">
<li>Line 1-2: Import the libraries</li>



<li>Line 4-10: Create the connection to AWS and authenticate using the credentials in your <strong>.env</strong> file</li>



<li>Line 12-21: Create the command that you&#8217;ll send to AWS to define which S3 objects to delete</li>



<li><mark style="background-color:rgba(0, 0, 0, 0);color:#ff0000" class="has-inline-color">Line 16-18</mark>: Replace these lines with the full list of the files you want deleted.  You would have this list from the response that &#8220;<strong>list-all-s3-files.js</strong>&#8221; returned.  <strong>Make sure it&#8217;s formatted correctly</strong>.</li>



<li>Line 23-28: Send the delete request to AWS and display the response in the console.</li>
</ul>



<p>Run this script alone and all items you listed should get deleted.</p>



<h2 class="wp-block-heading">Summary</h2>



<p>This is a quick and easy way to efficiently delete multiple S3 objects using the AWS SDK for JavaScript in your Node.js application. This can be particularly useful for automating cleanup tasks and managing your S3 resources more effectively.</p>



<p>Also, if you want information on how to set up<a href="https://blog.gravyware.com/what-is-ec2-setup-a-web-server-tutorial-in-aws"> your own web server in AWS</a>, we&#8217;ve done that plenty of times too!</p>



<p>Good luck!</p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Page Caching using Disk: Enhanced 

Served from: blog.gravyware.com @ 2026-04-21 06:10:30 by W3 Total Cache
-->