• 0

Why WordPress codebase is so horrible?


Question

From the user's perspective, Wordpress is hands down the best CMS out there. The UI, the menu organization, ability to toggle friendly permalinks on the fly and plethora of plugins makes it quite good.

But it's codebase is horrible. More I look at its code, all I see is sphagetti mess. I'm not sure how anyone would be ok with such a mess. Here's an example of the type of nightmare I'm talking about:

Source: https://github.com/WordPress/WordPress/blob/master/wp-activate.php

/**
 * Loads styles specific to this page.
 *
 * @since MU
 */
function wpmu_activate_stylesheet() {
    ?>
    <style type="text/css">
        form { margin-top: 2em; }
        #submit, #key { width: 90%; font-size: 24px; }
        #language { margin-top: .5em; }
        .error { background: #f66; }
        span.h3 { padding: 0 8px; font-size: 1.3em; font-weight: bold; }
    </style>
    <?php
}
add_action( 'wp_head', 'wpmu_activate_stylesheet' );
get_header( 'wp-activate' );
?>

<div id="signup-content" class="widecolumn">
    <div class="wp-activate-container">
    <?php if ( empty($_GET['key']) && empty($_POST['key']) ) { ?>

        <h2><?php _e('Activation Key Required') ?></h2>
        <form name="activateform" id="activateform" method="post" action="<?php echo network_site_url('wp-activate.php'); ?>">
            <p>
                <label for="key"><?php _e('Activation Key:') ?></label>
                <br /><input type="text" name="key" id="key" value="" size="50" />
            </p>
            <p class="submit">
                <input id="submit" type="submit" name="Submit" class="submit" value="<?php esc_attr_e('Activate') ?>" />
            </p>
        </form>

    <?php } else {
        $key = !empty($_GET['key']) ? $_GET['key'] : $_POST['key'];
        $result = wpmu_activate_signup( $key );
        if ( is_wp_error($result) ) {
            if ( 'already_active' == $result->get_error_code() || 'blog_taken' == $result->get_error_code() ) {
                $signup = $result->get_error_data();
                ?>
                <h2><?php _e('Your account is now active!'); ?></h2>
                <?php
                echo '<p class="lead-in">';
                if ( $signup->domain . $signup->path == '' ) {
                    printf( __('Your account has been activated. You may now <a href="%1$s">log in</a> to the site using your chosen username of &#8220;%2$s&#8221;. Please check your email inbox at %3$s for your password and login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can <a href="%4$s">reset your password</a>.'), network_site_url( 'wp-login.php', 'login' ), $signup->user_login, $signup->user_email, wp_lostpassword_url() );
                } else {
                    printf( __('Your site at <a href="%1$s">%2$s</a> is active. You may now log in to your site using your chosen username of &#8220;%3$s&#8221;. Please check your email inbox at %4$s for your password and login instructions. If you do not receive an email, please check your junk or spam folder. If you still do not receive an email within an hour, you can <a href="%5$s">reset your password</a>.'), 'http://' . $signup->domain, $signup->domain, $signup->user_login, $signup->user_email, wp_lostpassword_url() );
                }
                echo '</p>';
            } else {
                ?>
                <h2><?php _e('An error occurred during the activation'); ?></h2>
                <?php
                echo '<p>'.$result->get_error_message().'</p>';
            }
        } else {
            $url = isset( $result['blog_id'] ) ? get_blogaddress_by_id( (int) $result['blog_id'] ) : '';
            $user = get_userdata( (int) $result['user_id'] );
            ?>
            <h2><?php _e('Your account is now active!'); ?></h2>

            <div id="signup-welcome">
                <p><span class="h3"><?php _e('Username:'); ?></span> <?php echo $user->user_login ?></p>
                <p><span class="h3"><?php _e('Password:'); ?></span> <?php echo $result['password']; ?></p>
            </div>

            <?php if ( $url && $url != network_home_url( '', 'http' ) ) :
                switch_to_blog( (int) $result['blog_id'] ); 
                $login_url = wp_login_url(); 
                restore_current_blog(); 
                ?>
                <p class="view"><?php printf( __( 'Your account is now activated. <a href="%1$s">View your site</a> or <a href="%2$s">Log in</a>' ), $url, esc_url( $login_url ) ); ?></p>
            <?php else: ?>
                <p class="view"><?php printf( __('Your account is now activated. <a href="%1$s">Log in</a> or go back to the <a href="%2$s">homepage</a>.' ), network_site_url('wp-login.php', 'login'), network_home_url() ); ?></p>
            <?php endif;
        }
    }
    ?>
    </div>
</div>
<script type="text/javascript">
    var key_input = document.getElementById('key');
    key_input && key_input.focus();
</script>
<?php get_footer( 'wp-activate' );

 

Whether you are making your own software or contributing to another one, wouldn't you want other's codes to be more readable and well organized?

Can you tell me why it's an acceptable practice in the Wordpress community?

11 answers to this question

Recommended Posts

  • 0

Wordpress wants to be everything for everyone every time. You can imagine how that tends to work out.

The code structure itself that you posted above isn't that bad. At least it's indented properly. Could use a LOT more comments though.

  • Like 1
  • 0

Because 80% of all Wordpress "developers" share these "qualities":

  • They have between 3 to 6 months of experience and use titles like "Senior Web Developer Developers with vast experience" (freelancing websites are full of them)
  • Concepts like MVC, OOP, separation between logic and presentation, etc. are beyond their understanding and can't understand anything more complicated than "echo 'Hello World'; "
  • Laziness...why build a proper web app or website when you can just throw in some free plugins and themes and call it a website?

 

  • 0
  On 06/11/2015 at 15:02, john_alex said:

Because 80% of all Wordpress "developers" share these "qualities":

  • They have between 3 to 6 months of experience and use titles like "Senior Web Developer Developers with vast experience" (freelancing websites are full of them)
  • Concepts like MVC, OOP, separation between logic and presentation, etc. are beyond their understanding and can't understand anything more complicated than "echo 'Hello World'; "
  • Laziness...why build a proper web app or website when you can just throw in some free plugins and themes and call it a website?

 

He is talking about the CMS code base, not a garbage site built with it.

  • 0
  On 06/11/2015 at 15:03, adrynalyne said:

He is talking about the CMS code base, not a garbage site built with it.

And that poor excuse of a codebase is not garbage?

I understand that fixing this would  require a full rewrite but they're not even trying.

  • 0
  On 06/11/2015 at 15:05, john_alex said:

And that poor excuse of a codebase is not garbage?

I understand that fixing this would  require a full rewrite but they're not even trying.

I didn't say it wasn't. However, going on about web developers with building proper web apps and just tossing in plugins for features is not what he was talking about. You two were discussing different things.

  • 0
  On 06/11/2015 at 15:07, adrynalyne said:

I didn't say it wasn't. However, going on about web developers with building proper web apps and just tossing in plugins for features is not what he was talking about. You two were discussing different things.

At the risk of sounding snarky, there is a simple economy available here - both questions actually have the same answer

Answer: It's PHP.

 

  • 0
  On 09/11/2015 at 05:08, _Alexander said:

Well ... it is definitely hard to read that considering it is a mix of frontend and backend code...

Using a function that contains frontend and backend code is not the end of the world. Visually, it's a good practice to separate the backend code from the front-end. If they at least used the heredoc syntax to separate the front-end from the backend logic or concatenate strings, etc, It would be much easier to dissect what the heck is going on.

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Supply and demand. Competition is a good thing.
    • For the cost of popping Linux on a minipc and attaching it to the back of a monitor, it essentially is a Mac, but 1/10th of the cost. My aunt and uncle were just in town seeing her and they couldn't believe they weren't using Windows. I've ordered them the same setup my mom has and they couldn't be happier. My aunt runs a really old Windows 7 laptop that was upgraded to Windows 10 that is giving out, so a replacement cost of $389 total vs $600 or more and she was sold.
    • BurnAware 18.7 by Razvan Serea Free burning software to create CDs, DVDs, and Blu-ray discs of all types. BurnAware is a full-fledged, easy-to-use burning software which allows users to write all types of files such as digital photos, archives, documents, music and videos to CDs, DVDs and Blu-ray Discs, including BDXL and M-Disc. With BurnAware, you also be able to create boot or multisession discs, high-quality Audio CDs and Video DVDs, make and burn ISO images, copy and backup discs, extract audio tracks, verify and recover data from multisession or unreadable discs. BurnAware is available in three editions - Free, Premium and Professional. Compare and pick edition which is suitable for you. Features Burn files and folders to CD, DVD or Blu-ray Discs. Append or update multisession discs. Burn standard or boot disc images. Burn ISO files to multiple recorders simultaneously. Create boot CDs or DVDs. Create Audio CDs. Create DVD-Video discs. Create MP3 CD / DVD / Blu-ray Discs. Make standard or boot disc images. Copy CD, DVD or Blu-ray Discs to ISO images. Copy from discs to discs. Verify discs byte by byte. Recover files from damaged discs or different sessions. Extract audio tracks from Audio CDs. Erase and format re-writable discs. View detailed disc and drive information. Supports All media types (CD/DVD/Blu-ray Disc) including Double Layer All current hardware interfaces (IDE/SCSI/USB/1394/SATA) including AHCI UDF/ISO9660/Joliet file systems (any combination) On-the-fly writing (no staging to hard drive first) Verification of written files Multisession DVD-RW/DVD+RW Unicode CD-Text (tracks and disc) Compatible with Windows Vista 7, 8, 10, 11 (32-bit or 64-bit) BurnAware 18.7 changelog: Updated translations. Updated disc burning SDK. Improved indirect disc copying (CD <-> DVD). Optimized overall performance on 64-bit systems. Download: BurnAware Free 18.7 | 11.8 MB (Freeware) View: BurnAware Free Website | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • Yeah, as a general rule I prefer standard XBox-like controllers that work like usual out-of-the-box. additional software tends to be overkill. p.s. even my 8BitDo Ultimate 2C wired, while I had to tweak something (setup a udev rule) on Linux for it to work 'out-of-the-box' (which is required for Xinput mode to work in kernels prior to 6.12), I can slightly tweak a small amount of additional buttons/features on the controller itself, no software needed.
  • Recent Achievements

    • Apprentice
      Adrian Williams went up a rank
      Apprentice
    • Reacting Well
      BashOrgRu earned a badge
      Reacting Well
    • Collaborator
      CHUNWEI earned a badge
      Collaborator
    • Apprentice
      Cole Multipass went up a rank
      Apprentice
    • Posting Machine
      David Uzondu earned a badge
      Posting Machine
  • Popular Contributors

    1. 1
      +primortal
      535
    2. 2
      ATLien_0
      265
    3. 3
      +Edouard
      193
    4. 4
      +FloatingFatMan
      182
    5. 5
      snowy owl
      135
  • Tell a friend

    Love Neowin? Tell a friend!