<?xml version="1.0"?>
<documentation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://phpcsstandards.github.io/PHPCSDevTools/phpcsdocs.xsd"
title="Prefix All Globals"
>
<standard>
<![CDATA[
All globals terms must be prefixed with a theme/plugin specific term. Global terms include Namespace names, Class/Interface/Trait/Enum names (when not namespaced), Functions (when not namespaced or in an OO structure), Constants/Variable names declared in the global namespace, and Hook names.
A prefix must be distinct and unique to the plugin/theme, in order to prevent potential conflicts with other plugins/themes and with WordPress itself.
The prefix used for a plugin/theme may be chosen by the developers and should be defined in a custom PHPCS ruleset to allow for this sniff to verify that the prefix is consistently used.
Prefixes will be treated in a case-insensitive manner.
https://github.com/WordPress/WordPress-Coding-Standards/wiki/Customizable-sniff-properties#naming-conventions-prefix-everything-in-the-global-namespace
]]>
</standard>
<code_comparison>
<code title="Valid: Using the prefix ECPT_">
<![CDATA[
define( <em>'ECPT_VERSION'</em>, '1.0' );
<em>$ecpt_admin</em> = new ECPT_Admin_Page();
class <em>ECPT_Admin_Page</em> {}
apply_filter(
<em>'ecpt_modify_content'</em>,
$ecpt_content
);
]]>
</code>
<code title="Invalid: non-prefixed code">
<![CDATA[
define( <em>'PLUGIN_VERSION'</em>, '1.0' );
<em>$admin</em> = new Admin_Page();
class <em>Admin_Page</em> {}
apply_filter(
<em>'modify_content'</em>,
$content
);
]]>
</code>
</code_comparison>
<code_comparison>
<code title="Valid: Using the prefix ECPT_ in namespaced code">
<![CDATA[
namespace <em>ECPT_Plugin\Admin</em>;
// Constants declared using `const` will
// be namespaced and therefore prefixed.
const VERSION = 1.0;
// A class declared in a (prefixed) namespace
// is automatically prefixed.
class Admin_Page {}
// Variables in a namespaced file are not
// namespaced, so still need prefixing.
<em>$ecpt_admin</em> = new Admin_Page();
// Hook names are not subject to namespacing.
apply_filter(
<em>'ecpt_modify_content'</em>,
$ecpt_content
);
]]>
</code>
<code title="Invalid: using a non-prefixed namespace">
<![CDATA[
namespace <em>Admin</em>;
// As the namespace is not prefixed, this
// is still bad.
const VERSION = 1.0;
// As the namespace is not prefixed, this
// is still bad.
class Admin_Page {}
]]>
</code>
</code_comparison>
<standard>
<![CDATA[
Using prefixes reserved for WordPress is not permitted, even if WordPress is not currently using the prefix (yet).
]]>
</standard>
<code_comparison>
<code title="Valid: Using the prefix mycoolplugin_">
<![CDATA[
function <em>mycoolplugin_save_post()</em> {}
]]>
</code>
<code title="Invalid: Using a WordPress reserved prefix wp_">
<![CDATA[
function <em>wp_save_post()</em> {}
]]>
</code>
</code_comparison>
<standard>
<![CDATA[
Prefixes must have a minimum length of three character to be considered valid, as many plugins and themes share the same initials.
]]>
</standard>
<code_comparison>
<code title="Valid: Using the distinct prefix MyPlugin">
<![CDATA[
interface <em>MyPluginIsCool</em> {}
]]>
</code>
<code title="Invalid: Using a two-letter prefix My">
<![CDATA[
interface <em>My</em> {}
]]>
</code>
</code_comparison>
</documentation>
|