Custom Views Field Handler

Rather than using Views PHP to insert logic in a views field, a highly advised alternative is to write a custom field handler.  The following code provides the skeleton for a basic Views field handler. 

example.module

/**
 * Implements hook_views_api
 */
function example_views_api() {
  return array(
    'api' => 3,
    'path' => drupal_get_path('module', 'example'),
  );
}

example.views.inc

/**
 * @file
 * Views definitions for 'example'
 */

/**
 * Implementation of hook_views_handlers() to register all of the basic handlers
 * views uses.
 */
function example_views_handlers() {
  return array(
    'info' => array(
      'path' => drupal_get_path('module', 'example'),
    ),
    'handlers' => array(
      // The name of my handler
      'example_handler_custom_field' => array(
        // The name of the handler we are extending.
        'parent' => 'views_handler_field',
      ),
    ),
  );
}

/**
 * Implements hook_views_data().
 */
function example_views_data() {
  $data = array();
  // Add Example group
  $data['example']['table']['group'] = t('Example');
  $data['example']['table']['join'] = array(
    // #global is a special flag which let's a table appear all the time.
    '#global' => array(),
  );
  // Add custom field
  $data['example']['custom_field'] = array(
    'title' => t('Custom Field'),
    'help' => t('Provides a custom field.'),
    'field' => array(
      'handler' => 'example_handler_custom_field',
    ),
  );
  return $data;
}

example.info

name = Example Module
description = This module provides the skeleton for a custom Views field handler
core = 7.x
version = 7.x-1.0
dependencies[] = views
files[] = views/example_handler_custom_field.inc

views/example_handler_custom_field.inc

/**
 * @file
 * Definition of example_handler_custom_field
 */
 
/**
 * Provides a custom views field. 
 */
class example_handler_custom_field extends views_handler_field {
  function option_definition() {
    $options = parent::option_definition();
    return $options;
  }
 
  function options_form(&$form, &$form_state) {
    parent::options_form($form, $form_state);
  }
 
  function query() {
    // do nothing -- to override the parent query.
  }
 
  function render($data) {
    // If the devel module is enabled, you may view all of the
    // data provided by fields previously added in your view.
    // dpm($data);
    // Insert PHP code here, or display greeting.
    $output = t("Hello World!");
    return $output;  
  }
}