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 #514
    In the 514th issue of ProcessWire Weekly we'll check out the latest blog post from Ryan, introduce two new third party modules — Page List Versions Counter and Fieldtype Fieldset Panel — and more. Read on!
    Weekly.pw / 16 March 2024
  • Invoices Site Profile
    The new invoices site profile is a free invoicing application developed in ProcessWire. It enables you to create invoices, record payments to them, email invoices to clients, print invoices, and more. This post covers all the details.
    Blog / 15 March 2024
  • Subscribe to weekly ProcessWire news

“ProcessWire is like a breath of fresh air. So powerful yet simple to build with and customise, and web editors love it too.” —Margaret Chatwin, Web developer