8.5.x theme.api.php hook_preprocess(&$variables, $hook)
8.0.x theme.api.php hook_preprocess(&$variables, $hook)
8.1.x theme.api.php hook_preprocess(&$variables, $hook)
8.2.x theme.api.php hook_preprocess(&$variables, $hook)
8.3.x theme.api.php hook_preprocess(&$variables, $hook)
8.4.x theme.api.php hook_preprocess(&$variables, $hook)
8.6.x theme.api.php hook_preprocess(&$variables, $hook)
6.x core.php hook_preprocess(&$variables, $hook)
7.x theme.api.php hook_preprocess(&$variables, $hook)

Preprocess theme variables for templates.

This hook allows modules to preprocess theme variables for theme templates. It is called for all theme hooks implemented as templates, but not for theme hooks implemented as functions. hook_preprocess_HOOK() can be used to preprocess variables for a specific theme hook, whether implemented as a template or function.

For more detailed information, see theme().


$variables: The variables array (modify in place).

$hook: The name of the theme hook.

4 functions implement hook_preprocess()

Note: this list is generated by pattern matching, so it may include some functions that are not actually implementations of this hook.

contextual_preprocess in modules/contextual/contextual.module
Implements hook_preprocess().
field_attach_preprocess in modules/field/field.attach.inc
Populate the template variables with the field values available for rendering.
search_invoke_preprocess in modules/search/search.module
Invokes hook_search_preprocess() in modules.
template_preprocess in includes/theme.inc
Adds a default set of helper variables for variable processors and templates.


modules/system/theme.api.php, line 113


function hook_preprocess(&$variables, $hook) {
  static $hooks;

  // Add contextual links to the variables, if the user has permission.
  if (!user_access('access contextual links')) {
  if (!isset($hooks)) {
    $hooks = theme_get_registry();

  // Determine the primary theme function argument.
  if (isset($hooks[$hook]['variables'])) {
    $keys = array_keys($hooks[$hook]['variables']);
    $key = $keys[0];
  else {
    $key = $hooks[$hook]['render element'];
  if (isset($variables[$key])) {
    $element = $variables[$key];
  if (isset($element) && is_array($element) && !empty($element['#contextual_links'])) {
    $variables['title_suffix']['contextual_links'] = contextual_links_view($element);
    if (!empty($variables['title_suffix']['contextual_links'])) {
      $variables['classes_array'][] = 'contextual-links-region';


nabajit’s picture

Why my theme_preprocess hook getting called many times on each page load?

jncruces’s picture

Do you have a module and a theme with the same machine name? modules/mysite themes/mysite?

fmr’s picture

This hook is called many times, but each time with a different value in the $hook argument.

If you use the "devel" module, try to stick a dpm($hook, "hook"); in your mytheme_preprocess function and see what happens.