DEV Community

Ahmad Jamaly Rabib
Ahmad Jamaly Rabib

Posted on • Edited on

Adding dd() in Wordpress development

Hey folks! Hope you are all doing well. Today I just want to share a common topic, which is related to debugging in Wordpress. I do like default Wordpress debugging. It's just fine. But you know what I like most is the Laravel's dd() function. 😍

So let's just check where and how the functions works.

if (!function_exists('dd')) {
    /**
     * @return never
     */
    function dd(...$vars)
    {
        if (!in_array(\PHP_SAPI, ['cli', 'phpdbg'], true) && !headers_sent()) {
            header('HTTP/1.1 500 Internal Server Error');
        }

        foreach ($vars as $v) {
            VarDumper::dump($v);
        }

        exit(1);
    }
}

Enter fullscreen mode Exit fullscreen mode

We found the dd() function inside the Symfony component var-dumper. Oh! I love Symfony. 😍
So let's check the function now.

  • \PHP_SAPI is a predefined constant in PHP. It tells us how the PHP script is being executed. So in the condition we found that !in_array(\PHP_SAPI, ['cli', 'phpdbg'], true) let's breakdown this:

  • \PHP_SAPI is being checked against an array containing 'cli' and 'phpdbg'. Here 'cli' indicates that the script is being run from the command line interface and 'phpdbg' indicates that the script is being run using PHP's interactive debugger. So this condition will be true if the script is not running in CLI or PHP Debugger mode.

  • headers_sent is a function that checks if HTTP headers have already been sent to the client. So if the header is also not sent then the condition will be true.

  • If both conditions are true then the server will send a 500 Internal Server Error response

  • In the next we found this foreach function which is the main part of our dd function.

foreach ($vars as $v) {
  VarDumper::dump($v);
}
Enter fullscreen mode Exit fullscreen mode

So here $vars are actually items of collection. Then inside the foreach it calls the static dump() method inside the [VarDumper](https://github.com/symfony/var-dumper/blob/7.0/VarDumper.php) class.

After this foreach block there is a exit() function call to exit the operation. Pretty straight forward right!

Installation

To use this function in my Wordpress plugin I needed to install this component.

From my plugin directory I ran this command:
composer require --dev symfony/var-dumper.

It was installed. But to use this in my plugin I had to add autoload inside the init action hook.

add_action('init', function () {
            try {
                if (file_exists(__DIR__ . '/vendor/autoload.php')) {
                    require_once __DIR__ . '/vendor/autoload.php';
                }
            } catch (Exception $e) {
                logCatchException($e);
            }
        }, 10, 0);
Enter fullscreen mode Exit fullscreen mode

So now I can call the dd() or dump() method inside any places from my plugin. And it perfectly shows the collection or array data.

public function schedule($postId, $timestamp, $opts)
{
    $timestamp = $this->convertLocalTimeToUtc($timestamp);
    dd($opts);
}
Enter fullscreen mode Exit fullscreen mode

Here is the data:

array:4 [
  "expireType" => "change-status"
  "newStatus" => "draft"
  "category" => "0"
  "categoryTaxonomy" => "category"
]
Enter fullscreen mode Exit fullscreen mode

That's all for today. Thank you all for reading it.

Top comments (2)

Collapse
 
nicolus profile image
Nicolus • Edited

Hi ! Thanks for the tip.

Your code snippet are not showing up with syntax highlighting. You might want to start your code blocks with three backticks and the name of the language to make sure they get hightlighted. See the markdown cheatsheet here : github.com/adam-p/markdown-here/wi...

Collapse
 
rabibsust profile image
Ahmad Jamaly Rabib

Hi Nicolus! Many thanks!