PHPUnit Testing

How to find the reason for a risky test in PHPUnit ?

Recently I started phpUnit testing, and I found some of the test are flagging as risky. Most of the time I able figure bout reason but some time it very time consuming and also there isn’t any messages from PHPUnit.

PHPUnit 4.4.5 by Sebastian Bergmann.

Configuration read from phpunit.xml.dist

R.................R.R..R

Time: 14,17 seconds, Memory: 52,50Mb

OK, but incomplete, skipped, or risky tests!
Tests: 24, Assertions: 52, Risky: 4.

Finally I found a soultion and it is very simple( How I can forgot about -v flag !! )

 phpunit -v|--verbose              Output more verbose information.

Stay tuned, more testing related post probably writing 🙂

WordPress 4.3 Changes in Template Hierarchy

In WordPress  4.3 there is a new template file added in theme template hierarchy called singular.php . This will allow theme authors to use a common template for any singular post type.

It follows the rules of is_singular() and comes after single-{post-type}.php, single-post.php, single.php, andpage.php.

Template hierarchy for singular post types
Template hierarchy for singular post types

To learn more about WordPress theme template heirarchy : https://developer.wordpress.org/themes/basics/template-hierarchy/

User Avatar in buddyPress notification loop

To display user avatar in buddypress notification-loop (You can find it in members / single / notifications / notifications-loop.php )

Below snippet will return user id of that activity ( BuddyPress stored it as  secondary_item )

$bp      = buddypress();
$user_id = $bp->notifications->query_loop->notification->secondary_item_id;

To echo avatar from user id :

echo bp_activity_avatar( array( 'user_id' => $user_id ) );

Automatic update of Child Theme to Parent Theme

After automatic update of child theme to parent theme, During update we just update code of theme, but what about WordPress, WordPress still assuming current theme as child theme.

When you activate child theme, there are mainly two site options template and stylesheet who store parent theme and child theme slug. After updating you have to update that site option also (There are others relative options also).

Add following code into your theme function.php

if ( is_child_theme() && 'current-theme-slug' != get_template() ) {
    switch_theme( get_stylesheet() );
}

Enable Category/Tag support for WordPress Media files

To enable category/tag support on WordPress Media, You have to register taxonomy for Media(attachment) by adding following code in theme function.php or in plugin file

register_taxonomy( 'media-category', 'attachment', $args );

Note : This will work with WordPress 3.5 or higher.

Check if session is started or not in php

To avoid Cannot send session cookie - headers already sent warning which is cause by calling session_start() function without checking if the session is already start or not.

You can find following warning in error log file :

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /xxx/xxx/abc.php:8) in /xxx/xxx/test.php on line 11

Recommended way for versions of PHP >= 5.4.0

if ( session_status() == PHP_SESSION_NONE ) {
    session_start();
}

Source: http://www.php.net/manual/en/function.session-status.php

For versions of PHP < 5.4.0

if ( session_id() == '' ) {
    session_start();
}

Get php class file path from class name – ReflectionClass

During development of common library for WordPress plugins and themes ( WordPress development helper library ), I just want to find from which plugin it is called ( I just want to debug the code, but I used in many plugins and i am not able to track from which plugin it is actually loading ).

Then  I found about ReflectionClass,  reports information about a class.

You can read more detail about ReflectionClass from php.net.

Here is how to get file path from class name

$autoloader_reflector = new ReflectionClass("RT_WP_Autoload");
$class_file_nanme = $autoloader_reflector->getFileName();
echo dirname($class_file_nanme);

This is same as reflection api in java, There are some good reflection examples to get you started reflection api in java at http://docs.oracle.com/javase/tutorial/reflect/index.html