Making WordPress.org


Ignore:
Timestamp:
07/15/2026 10:29:43 PM (2 months ago)
Author:
obenland
Message:

Plugin Directory: Clarify guidlines on "Add your plugin" page.

Props frantorres, obenland.
Closes https://github.com/WordPress/wordpress.org/pull/696.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/shortcodes/class-upload.php

    r14770 r14974  
    141141                                <?php
    142142                                if ( 1 === (int) $plugins->new ) {
    143                                         esc_html_e( 'Currently there is 1 plugin awaiting review.', 'wporg-plugins' );
     143                                        esc_html_e( 'Currently there is 1 plugin awaiting its first review.', 'wporg-plugins' );
    144144                                } else {
    145145                                        printf(
    146146                                                /* translators: %s: Amount of plugins awaiting review. */
    147147                                                esc_html( _n(
    148                                                         'Currently there is %s plugin awaiting review.',
    149                                                         'Currently there are %s plugins awaiting review.',
     148                                                        'Currently there is %s plugin awaiting their first review.',
     149                                                        'Currently there are %s plugins awaiting their first review.',
    150150                                                        $plugins->new,
    151151                                                        'wporg-plugins'
     
    160160                                                /* translators: %s: Date of the oldest new plugin in the queue, with a 36 hours offset. */
    161161                                                esc_html( __(
    162                                                         'All plugins that have been submitted before %s have received an initial response by email to their submission.',
     162                                                        'All new submissions received before %s have been sent an initial response by email.',
    163163                                                        'wporg-plugins'
    164164                                                ) ),
     
    450450                                <input type="hidden" name="action" value="upload"/>
    451451
    452                                 <h3><?php esc_html_e( 'Please, read and check the following before uploading your plugin', 'wporg-plugins' ); ?></h3>
    453 
    454                                 <p>
    455                                         <label>
    456                                                 <input type="checkbox" name="requirements[faq]" required="required">
    457                                                 <?php
    458                                                         printf(
    459                                                                 __( 'I have read the <a href="%s">Frequently Asked Questions</a>.', 'wporg-plugins' ),
    460                                                                 'https://developer.wordpress.org/plugins/wordpress-org/plugin-developer-faq/'
    461                                                         );
    462                                                 ?>
    463                                         </label>
    464                                         <br>
    465                                         <label>
    466                                                 <input type="checkbox" name="requirements[guidelines]" required="required">
    467                                                 <?php
    468                                                         printf(
    469                                                                 __( 'This plugin complies with all of the <a href="%s">Plugin Developer Guidelines</a>.', 'wporg-plugins' ),
    470                                                                 'https://developer.wordpress.org/plugins/wordpress-org/detailed-plugin-guidelines/'
    471                                                         );
    472                                                 ?>
    473                                         </label>
    474                                         <br>
    475                                         <label>
    476                                                 <input type="checkbox" name="requirements[author]" required="required">
    477                                                 <?php _e( 'I have permission to upload this plugin to WordPress.org for others to use and share.', 'wporg-plugins' ); ?>
    478                                         </label>
    479                                         <br>
    480                                         <label>
    481                                                 <input type="checkbox" name="requirements[license]" required="required">
    482                                                 <?php _e( 'This plugin, all included libraries, and any other included assets are licenced as GPL or are under a GPL compatible license.', 'wporg-plugins' ); ?>
    483                                         </label>
    484                                         <br>
    485                                         <label>
    486                                                 <input type="checkbox" name="requirements[plugin-check]" required="required" />
    487                                                 <?php
    488                                                         printf(
    489                                                                 /* Translators: URL to plugin-check plugin */
    490                                                                 __( 'I confirm that the plugin has been tested with the <a href="%s">Plugin Check</a> plugin, and all indicated issues resolved (apart from what I believe to be false-positives).', 'wporg-plugins' ),
    491                                                                 home_url( '/plugin-check/' )
    492                                                         );
    493                                                 ?>
    494                                         </label>
    495                                 </p>
    496 
    497                                 <h3><?php esc_html_e( 'Plugin Naming', 'wporg-plugins' ); ?></h3>
    498                                 <p><?php echo wp_kses_post( __( '<strong>Generic names</strong> that <strong>resemble existing plugins in the directory</strong> (e.g., “AI Writer”, “Image Optimization”) won’t be accepted, even if the slug is available.', 'wporg-plugins' ) ); ?></p>
    499                                 <p><?php echo wp_kses_post( __( 'Instead, please <strong>start your plugin name with a unique or coined term</strong>, such as your brand, alias, or organization name (e.g., “Acme AI Writer”, “WriteralAI - AI Writter”, “Acme Image Optimization”, “Imageralia - Image Optimization”).', 'wporg-plugins' ) ); ?></p>
    500 
    501                                 <h3><?php esc_html_e( 'Plugin Ownership', 'wporg-plugins' ); ?></h3>
     452                                <h2><?php esc_html_e( 'Step 1: Before you submit', 'wporg-plugins' ); ?></h2>
     453                                <p><?php esc_html_e( 'Please, read and confirm the following.', 'wporg-plugins' ); ?></p>
     454                                <label>
     455                                        <input type="checkbox" name="requirements[faq]" required="required">
     456                                        <?php
     457                                        printf( wp_kses_post( __( 'I have read the <a href="%s">Frequently Asked Questions</a>.', 'wporg-plugins' ) ), 'https://developer.wordpress.org/plugins/wordpress-org/plugin-developer-faq/' );
     458                                        ?>
     459                                </label>
     460                                <br>
     461                                <label>
     462                                        <input type="checkbox" name="requirements[guidelines]" required="required">
     463                                        <?php
     464                                        printf( wp_kses_post( __( 'I have read and make sure that this plugin complies with <strong>all</strong> of the <a href="%s">Plugins Directory Guidelines</a>.', 'wporg-plugins' ) ), 'https://developer.wordpress.org/plugins/wordpress-org/detailed-plugin-guidelines/' );
     465                                        ?>
     466                                </label>
     467                                <br>
     468                                <label>
     469                                        <input type="checkbox" name="requirements[plugin-check]" required="required" />
     470                                        <?php
     471                                        printf(
     472                                                /* Translators: URL to plugin-check plugin */
     473                                                wp_kses_post( __( 'I confirm that the plugin has been tested with the <a href="%s">Plugin Check</a> plugin, and all indicated issues resolved (apart from what I believe to be false-positives).', 'wporg-plugins' )),
     474                                                esc_url( home_url( '/plugin-check/' ) )
     475                                        );
     476                                        ?>
     477                                </label>
     478
     479                                <h2><?php esc_html_e( 'Step 2: Common reasons plugins are rejected', 'wporg-plugins' ); ?></h2>
     480                                <h3>🏷️
     481                                        <?php
     482                                        printf(
     483                                                wp_kses_post(
     484                                                        __( 'Naming and ownership – <em>Guideline <a href="%s" target="_blank">17</a></em>', 'wporg-plugins' )
     485                                                ),
     486                                                'https://developer.wordpress.org/plugins/wordpress-org/detailed-plugin-guidelines/#17-plugins-must-respect-trademarks-copyrights-and-project-names'
     487                                        );
     488                                        ?>
     489                                </h3>
     490                                <p><?php echo wp_kses_post( __( 'Plugin names must be <strong>distinctive</strong> and should not be <strong>confusingly similar</strong> to existing plugins, projects, products, organizations, or trademarks that are not owned by you.', 'wporg-plugins' ) ); ?></p>
     491                                <p><?php echo wp_kses_post( __( '<strong>Choosing a distinctive name</strong>: Generic names such as "AI Writer" or "Image Optimization" and/or names similar to existing plugins are unlikely to be accepted, even if the plugin slug is available. Make your plugin stand out by using a unique identifier such as your name, brand, organization, or project name (e.g., “<em>Acme</em> AI Writer”, “<em>WriteralAI</em> – AI Writter”)', 'wporg-plugins' ) ); ?></p>
    502492                                <p><?php printf(
    503493                                        /* translators: 1: User profile URL. */
    504494                                        wp_kses_post(
    505                                                 __( 'Names that <strong>begin</strong> with a project, organization, or trademark are <strong>only accepted if submitted by the verified owner</strong>. Ownership can be <strong>confirmed through the email domain in your <a href="%1$s" target="_blank">user profile</a></strong> - update it before submitting.', 'wporg-plugins' )
     495                                                __( '<strong>Demonstrating ownership</strong>: Names that begin with a company, project, organization, or trademark name may only be submitted by the verified owner. Ownership is typically verified using the <a href="%1$s" target="_blank">email address associated with your WordPress.org account</a>. If necessary, update your profile before submitting.', 'wporg-plugins' )
    506496                                        ),
    507497                                        esc_url( 'https://profiles.wordpress.org/profile/edit' )
    508498                                ); ?>
     499                                </p>
     500                                <p><?php echo wp_kses_post( __( '<strong>If you are not the owner</strong>: Simply do not imply affiliation with a company, project, or trademark that you do not own. You can do so placing their name at the end and making the distinction clear (e.g., “WriteralAI – AI Writer <em>for Acme</em>”)', 'wporg-plugins' ) ); ?></p>
     501                                <label>
     502                                        <input type="checkbox" name="requirements[naming]" required="required">
     503                                        <?php esc_html_e( 'I have chosen a plugin name that is not confusingly similar to existing plugins, projects, organizations, or trademarks. I searched on the internet for similar names and found nothing similar.', 'wporg-plugins' ); ?>
     504                                </label>
    509505                                <br>
    510                                 <?php echo wp_kses_post( __( '<i>For example, use an official Acme email domain (e.g., “john@acme.example”) for a plugin named “Acme AI Writer”.</i>', 'wporg-plugins' ) ); ?>
    511                                 </p>
    512                                 <p><?php echo wp_kses_post( __( '<strong>If you don’t own the entity, don’t imply affiliation</strong>. Place their name <strong>at the end</strong> and <strong>make the distinction clear</strong>.', 'wporg-plugins' ) ); ?>
     506                                <label>
     507                                        <input type="checkbox" name="requirements[author]" required="required">
     508                                        <?php
     509                                        printf(
     510                                                /* translators: %s: Current user's email address. */
     511                                                wp_kses_post( __( 'I have permission to upload this plugin to WordPress.org for others to use and share and I am using a WordPress.org account that accurately represents the plugin owner: %s.', 'wporg-plugins' )),
     512                                                '<strong>' . esc_html( wp_get_current_user()->user_email ) . '</strong>'
     513                                        );
     514                                        ?>
     515                                </label>
     516
     517                                <h3>🔓
     518                                        <?php
     519                                        printf(
     520                                                wp_kses_post(
     521                                                        __( 'Trialware – <em>Guidelines <a href="%1$s" target="_blank">5</a> and <a href="%2$s" target="_blank">6</a></em>', 'wporg-plugins' )
     522                                                ),
     523                                                'https://developer.wordpress.org/plugins/wordpress-org/detailed-plugin-guidelines/#5-trialware-is-not-permitted',
     524                                                'https://developer.wordpress.org/plugins/wordpress-org/detailed-plugin-guidelines/#6-software-as-a-service-is-permitted'
     525                                        );
     526                                        ?>
     527                                </h3>
     528                                <p><?php echo wp_kses_post( __( 'Plugins hosted in the WordPress.org Plugin Directory <strong>may not artificially restrict functionality that is included in the plugin itself</strong>.', 'wporg-plugins' ) ); ?></p>
     529                                <p><?php echo wp_kses_post( __( 'This includes but is not limited to: paywalls, license/feature gating, time-limited trials, usage cutoffs, or any other mechanism that restricts, disables, or conditions access to <strong>features implemented in the plugin code and/or that the plugin itself can do</strong>.', 'wporg-plugins' ) ); ?></p>
     530                                <p><?php echo wp_kses_post( __( 'Please bear in mind that this is an <strong>open source directory for free to use plugins</strong>. Building a business around your plugin is fine, and there are compliant ways of doing so; artificial limitations in built-in code are not one of them.', 'wporg-plugins' ) ); ?></p>
     531                                <label>
     532                                        <input type="checkbox" name="requirements[trialware]" required="required">
     533                                        <?php esc_html_e( 'I confirm that my plugin code does not include artificial limitations to the included functionality. I acknowledge that I must comply with this in future, and that my plugin and account could be suspended indefinitely if I fail to do so.', 'wporg-plugins' ); ?>
     534                                </label>
     535
     536                                <h3>🚫 <?php esc_html_e( 'Not accepted plugins', 'wporg-plugins' ); ?></h3>
     537                                <p><?php esc_html_e( 'There are some kind of plugins that aren’t accepted in the directory, please do not submit them.', 'wporg-plugins' ); ?></p>
     538                                <ul>
     539                                        <li><?php echo wp_kses_post( __( 'Plugins that allow arbitrary code insertion/execution are no longer accepted. This includes but is not limited to: PHP, JavaScript editors, File Managers, and AI tools creating code that is executed on the site.  HTML is fine as long as it is escaped correctly. <em>Reason: Security</em>.', 'wporg-plugins' ) ); ?></li>
     540                                        <li>
     541                                        <?php printf(
     542                                                wp_kses_post( __( 'Plugins downloading executable code from external sources. <em>Reasons: Security and <a href="%s" target="_blank">Guideline 8</a></em>.', 'wporg-plugins' ) ),
     543                                                'https://developer.wordpress.org/plugins/wordpress-org/detailed-plugin-guidelines/#8-plugins-may-not-send-executable-code-via-third-party-systems'
     544                                        ); ?>
     545                                        </li>
     546                                        <li>
     547                                        <?php printf(
     548                                                wp_kses_post( __( 'Plugins whose functionality is already well represented in the directory, with hundreds of comparable plugins available, and that do not provide meaningful differentiation or introduce substantial innovation. <em>Reason: <a href="%s" target="_blank">Guideline 18</a></em>.', 'wporg-plugins' ) ),
     549                                                'https://developer.wordpress.org/plugins/wordpress-org/detailed-plugin-guidelines/#18-we-reserve-the-right-to-maintain-the-plugin-directory-to-the-best-of-our-ability'
     550                                        ); ?>
     551                                        </li>
     552                                </ul>
     553
     554                                <h2><?php esc_html_e( 'Step 3: Submission acknowledgement', 'wporg-plugins' ); ?></h2>
     555                                <p><?php esc_html_e( 'Please confirm that you understand the following:', 'wporg-plugins' ); ?></p>
     556                                <label>
     557                                        <input type="checkbox" name="requirements[confirmation1]" required="required">
     558                                        <?php
     559                                        printf(
     560                                                wp_kses_post( __( 'I understand that submissions that do not follow the <a href="%s" target="_blank">Plugins Directory Guidelines</a> may be rejected. Repeated or serious violations may result in further restrictions.', 'wporg-plugins' ) ),
     561                                                'https://developer.wordpress.org/plugins/wordpress-org/detailed-plugin-guidelines/'
     562                                        );
     563                                        ?>
     564                                </label>
    513565                                <br>
    514                                 <?php echo wp_kses_post( __( '<i>For example, if you don’t own “Acme” use a structure like: “{your-distinguible-plugin-name} for Acme” (e.g., “WriteralAI – AI Writer for Acme”).</i>', 'wporg-plugins' ) ); ?>
    515                                 </p>
     566                                <label>
     567                                        <input type="checkbox" name="requirements[confirmation3]" required="required">
     568                                        <?php
     569                                        printf(
     570                                                wp_kses_post( __( 'I understand that hosting in the WordPress.org Plugin Directory is provided subject to continued compliance with the <a href="%s" target="_blank">Plugins Directory Guidelines</a>.', 'wporg-plugins' ) ),
     571                                                'https://developer.wordpress.org/plugins/wordpress-org/detailed-plugin-guidelines/'
     572                                        );
     573                                        ?>
     574                                </label>
     575                                <br>
    516576
    517577                                <h3><?php esc_html_e( 'Are you ready? Upload the .zip file for your plugin', 'wporg-plugins' ); ?></h3>
Note: See TracChangeset for help on using the changeset viewer.