Wordpress Civicrm doesn't seem to generate invoice from other user roles except administrator
I found the problem here. actually there is some issue with CiviCRM Wordpress codebase because its always failing to get wordpress user id.

Below checkDownloadInvoice function using drupal global $user; to get logged in user id for wordpress as well.

CRM_Core_Permission::checkDownloadInvoice

public static function checkDownloadInvoice() {
    global $user;
    $cid = CRM_Core_BAO_UFMatch::getContactId($user-&gt;uid);
    if (CRM_Core_Permission::check('access CiviContribute') ||
      (CRM_Core_Permission::check('view my invoices') &amp;&amp; $_GET['cid'] == $cid)
    ) {
      return TRUE;
    }
    return FALSE;
  }


for WordPress It should be changed to 

public static function checkDownloadInvoice() {
    $uid = get_current_user_id();//changed for WordPress
    $cid = CRM_Core_BAO_UFMatch::getContactId($uid);//changed for WordPress
    if (CRM_Core_Permission::check('access CiviContribute') ||
      (CRM_Core_Permission::check('view my invoices') &amp;&amp; $_GET['cid'] == $cid)
    ) {
      return TRUE;
    }
    return FALSE;
  }


Hope it helps someone in future. :)