The $page API variable

The $page variable is provided to every template, and it contains all the content (via fields) specific to the page being viewed.

This includes both built-in fields, which are common to all pages, as well as the custom fields. The custom fields are those that you define in Admin > Setup > Fields and then assign to your template in Admin > Setup > Templates. $page also has several functions/methods that enable you to perform other tasks with it. The built-in fields and functions/methods are documented on this page.

Custom Fields

Custom fields are those that you have defined with the page's template. You can always access these by referencing them from the $page variable directly. For example, lets say that you have defined a field called "subtitle" and you want to output it in a headline:

echo "<h2>" . $page->subtitle . "</h2>";

$page API reference

See details about the $page variable in our API reference.

Usage Examples

Make use of the $page->parent variable:

echo "The title of the parent page is {$page->parent->title}";
if(!$page->parent->id) echo "You are on the homepage";

Generate a breadcrumb trail:

foreach($page->parents as $parent) {
  echo "<li><a href='{$parent->url}'>{$parent->title}</a></li>";
}

Display the name of the template:

echo "This page is using the template: {$page->template->name}";

Display the name of each field on the page, along with its value:

foreach($page->fields as $field) {
  echo "<p>{$field->name}: " . $page->get($field->name) . "</p>";
}

Display the number of children, followed by navigation to all of them:

echo "<p>This page has " . count($page->children) . " children</p>";
foreach($page->children as $child) {
  echo "<li><a href='{$child->url}'>{$child->title}</a></li>";
} 

Find 3 of the most recent children that have a featured checkbox set, and display links to them:

$features = $page->children("featured=1, limit=3, sort=-date");
foreach($features as $feature) {
  echo "<p>Featured story: <a href='{$feature->url}'>{$feature->title}</a></p>";
}

Display a list of paths to all sibling pages, not including the current page:

foreach($page->siblings as $sibling) {
  if($sibling->id != $page->id) echo "<li>Sibling: {$sibling->path}</li>";
}

Display a link back to the first page, if the current pageNum is greater than 1:

if($page->pageNum > 1) {
  echo "<a href='{$page->url}'>Back to first page</a>";
}

Iterating a $page

Iterating a $page produces the name and value of all the page's custom fields. Here is an example to illustrate this:

foreach($page as $field => $value) {
  echo "$field = $value <br />";
}

This is simpler than iterating through $page->fields and retrieving each value manually, as we did in one of the previous examples. The result might look like this:

title = About ACME Inc.
subtitle = The Leader in Something
body = Since 2010, ACME Inc. has been the leader in something, and so on...

Latest news

  • ProcessWire Weekly #544
    In the 150th issue of ProcessWire Weekly we'll check out brand-new third party module called Inputfield Dependency Helper, share some recent highlights from the support forum, and more. Read on!
    Weekly.pw / 12 October 2024
  • Custom Fields Module
    This week we look at a new ProFields module named Custom Fields. This module provides a way to rapidly build out ProcessWire fields that contain any number of subfields/properties within them.
    Blog / 30 August 2024
  • Subscribe to weekly ProcessWire news

“Yesterday I sent the client a short documentation for their ProcessWire-powered website. Today all features already used with no questions. #cmsdoneright—Marc Hinse, Web designer/developer