Website Queries
Access site-wide data, WordPress options, URL parameters, and global functions that work outside specific content contexts.
What This Guide Covers
Global functions provide access to site-wide data and settings that aren't tied to specific posts, users, or terms. These functions work at the root level of your GraphQL queries and give you access to WordPress options, URL parameters, environment data, and custom global fields.
You'll learn how to:
- Get WordPress site settings and options
- Access URL parameters, cookies, and server variables
- Generate URLs for pages, posts, and archives
- Query ACF Options Pages and MetaBox Settings
- Use advanced functions like PHP function calls
- Handle form URLs and security nonces
- Access hook arguments and environment data
URLs & Navigation
- Basic URLs
- Dynamic URLs
- Archive URLs
Get essential site URLs:
{
# Core site URLs
home_url: front_page_url
current_page_url: current_url
blog_url: posts_index_page_url
}
Get URLs for specific content by name/slug:
{
# Page URLs by slug
about_page_url: page_url(name: "about")
contact_page_url: page_url(name: "contact-us")
# Post URLs by slug
latest_news_url: post_url(name: "latest-company-news")
product_launch_url: post_url(name: "new-product-announcement")
}
Generate archive and taxonomy URLs:
{
# Author archive URLs
author_page_url: author_archive_url(username: "john-doe")
writer_archive_url: author_archive_url(username: "jane-writer")
# Taxonomy archive URLs
news_category_url: category_archive_url(slug: "news")
tech_category_url: category_archive_url(slug: "technology")
# Tag archive URLs
wordpress_tag_url: tag_archive_url(slug: "wordpress")
tutorial_tag_url: tag_archive_url(slug: "tutorials")
}
URL helper functions work ONLY at root level, NOT inside loops or nested objects like posts_query.posts or terms_query.terms. Use php_function_output with WordPress functions inside loops.
Site Settings & WordPress Options
- Basic Core Options
- More Core Options
- Custom Made Options
Get core WordPress settings
{
# Standard WordPress options
site_name: option_value(name: "blogname")
site_tagline: option_value(name: "blogdescription")
site_url: option_value(name: "siteurl")
home_url: option_value(name: "home")
admin_email: option_value(name: "admin_email")
# Site configuration
date_format: option_value(name: "date_format")
time_format: option_value(name: "time_format")
start_of_week: option_value(name: "start_of_week")
timezone_string: option_value(name: "timezone_string")
}
Access custom WordPress options (created by themes, plugins, or custom code):
{
# Plugin/theme custom options
site_logo_url: option_value(name: "custom_site_logo")
maintenance_mode: option_value(name: "site_maintenance_mode")
google_analytics_id: option_value(name: "ga_tracking_id")
social_media_links: option_value(name: "social_media_config")
# Theme Customizer options
primary_color: option_value(name: "theme_primary_color")
footer_text: option_value(name: "custom_footer_text")
header_style: option_value(name: "header_layout_style")
# Plugin settings examples
contact_form_recipient: option_value(name: "cf7_default_recipient")
seo_meta_title: option_value(name: "seo_plugin_default_title")
cache_expiration: option_value(name: "cache_plugin_timeout")
}
Note: These are options stored in WordPress's options table by themes/plugins using add_option() or update_option(). They differ from ACF Options Pages which use acf_value() instead.
Get active theme and WordPress configuration settings (any field from wp-admin/options.php)
{
# Active theme information
active_theme: option_value(name: "stylesheet") # Current theme folder name
theme_directory: option_value(name: "template") # Parent theme folder (for child themes)
# WordPress system settings
db_version: option_value(name: "db_version") # Database schema version (not WP version)
users_can_register: option_value(name: "users_can_register")
default_role: option_value(name: "default_role")
# Comment system settings
comments_enabled: option_value(name: "default_comment_status") # "open" or "closed"
require_name_email: option_value(name: "require_name_email") # "1" or ""
comment_moderation: option_value(name: "comment_moderation") # "1" or ""
# Additional WordPress settings
blog_public: option_value(name: "blog_public") # Search engine visibility
permalink_structure: option_value(name: "permalink_structure")
uploads_use_yearmonth_folders: option_value(name: "uploads_use_yearmonth_folders")
}
Note: These are core WordPress settings from the options table. Most return strings ("1"/"" for booleans). Use db_version for database schema version, not WordPress version number.
Request & Environment Data
- URL Parameters
- Cookies
- Server Variables
Access URL query parameters ($_GET):
{
# Get URL parameters with fallbacks
search_query: url_parameter(name: "s", fallback: "")
current_page: url_parameter(name: "page", fallback: 1)
category_filter: url_parameter(name: "category", fallback: "all")
sort_order: url_parameter(name: "order", fallback: "desc")
}
Read browser cookies ($_COOKIE):
{
# User preferences from cookies
preferred_language: cookie_parameter(name: "user_language", fallback: "en")
theme_preference: cookie_parameter(name: "dark_mode", fallback: "light")
shopping_cart_id: cookie_parameter(name: "cart_session", fallback: "")
# Analytics and tracking
user_session: cookie_parameter(name: "user_session_id", fallback: "")
utm_source: cookie_parameter(name: "utm_source", fallback: "direct")
# Personalization
viewed_products: cookie_parameter(name: "recently_viewed", fallback: "[]")
user_location: cookie_parameter(name: "user_region", fallback: "unknown")
# Cookie-based conditional logic
returning_visitor: expression_result(
expression: "cookie_parameter('visited_before', 'no') == 'yes'"
)
}
Access server environment variables ($_SERVER):
{
# Request information
request_method: server_parameter(name: "REQUEST_METHOD", fallback: "GET")
user_agent: server_parameter(name: "HTTP_USER_AGENT", fallback: "")
request_uri: server_parameter(name: "REQUEST_URI", fallback: "/")
query_string: server_parameter(name: "QUERY_STRING", fallback: "")
# Client information
client_ip: server_parameter(name: "REMOTE_ADDR", fallback: "unknown")
referrer: server_parameter(name: "HTTP_REFERER", fallback: "direct")
# Server information
server_name: server_parameter(name: "SERVER_NAME", fallback: "localhost")
server_port: server_parameter(name: "SERVER_PORT", fallback: "80")
https_enabled: server_parameter(name: "HTTPS", fallback: "")
# Security headers
content_type: server_parameter(name: "CONTENT_TYPE", fallback: "")
accept_language: server_parameter(name: "HTTP_ACCEPT_LANGUAGE", fallback: "en")
}
ACF Options Pages
- Basic ACF Options
- ACF Repeaters
Access ACF Options Page fields:
{
# Site branding
site_logo: acf_value(name: "site_logo")
site_favicon: acf_value(name: "site_favicon")
default_hero_image: acf_value(name: "default_hero_image")
# Contact information
company_phone: acf_value(name: "company_phone")
company_email: acf_value(name: "company_email")
company_address: acf_value(name: "company_address")
# Social media
facebook_url: acf_value(name: "facebook_url")
twitter_handle: acf_value(name: "twitter_handle")
linkedin_company: acf_value(name: "linkedin_company")
}
Work with ACF repeater fields at global level:
{
# Social media links repeater
social_links: acf_repeater_value(name: "social_media_links") {
platform: acf_value(name: "social_platform")
url: acf_value(name: "social_url")
icon: acf_value(name: "platform_icon")
show_in_footer: acf_value(name: "show_in_footer")
}
# Company locations repeater
office_locations: acf_repeater_value(name: "company_offices") {
city: acf_value(name: "office_city")
address: acf_value(name: "office_address")
phone: acf_value(name: "office_phone")
contact_person: acf_value(name: "office_manager")
}
# Featured content repeater
homepage_features: acf_repeater_value(name: "homepage_featured_content") {
title: acf_value(name: "feature_title")
description: acf_value(name: "feature_description")
image: acf_value(name: "feature_image")
link_url: acf_value(name: "feature_link")
link_text: acf_value(name: "feature_link_text")
}
}
MetaBox Settings Pages
- Basic MetaBox
- MetaBox Groups
Access MetaBox Settings Page fields (requires option_name):
{
# Basic site settings
contact_email: metabox_value(field_id: "contact_email", option_name: "site_settings")
company_address: metabox_value(field_id: "company_address", option_name: "site_settings")
phone_number: metabox_value(field_id: "main_phone", option_name: "site_settings")
# Business information
business_hours: metabox_value(field_id: "operating_hours", option_name: "site_settings")
company_registration: metabox_value(field_id: "business_registration", option_name: "site_settings")
tax_number: metabox_value(field_id: "company_tax_id", option_name: "site_settings")
# Marketing settings
newsletter_signup_url: metabox_value(field_id: "newsletter_url", option_name: "site_settings")
promotional_banner: metabox_value(field_id: "promo_banner_text", option_name: "site_settings")
special_offers_enabled: metabox_value(field_id: "show_special_offers", option_name: "site_settings")
}
Work with MetaBox grouped fields:
{
# Contact information group
contact_info: metabox_group_value(field_id: "contact_group", option_name: "site_settings") {
main_phone: metabox_value(field_id: "phone")
support_email: metabox_value(field_id: "email")
office_address: metabox_value(field_id: "address")
business_hours: metabox_value(field_id: "hours")
}
# Social media group
social_settings: metabox_group_value(field_id: "social_media", option_name: "site_settings") {
facebook_page: metabox_value(field_id: "facebook_url")
twitter_account: metabox_value(field_id: "twitter_handle")
instagram_profile: metabox_value(field_id: "instagram_url")
linkedin_company: metabox_value(field_id: "linkedin_url")
}
# SEO settings group
seo_config: metabox_group_value(field_id: "seo_settings", option_name: "site_settings") {
default_title_suffix: metabox_value(field_id: "title_suffix")
meta_description: metabox_value(field_id: "default_meta_desc")
og_image: metabox_value(field_id: "default_og_image")
analytics_code: metabox_value(field_id: "google_analytics")
}
}
Additional Global Functions
- PHP Functions
- Expression Results
- Hook Arguments
- Form Functions
Call WordPress PHP functions:
{
# Basic WordPress functions
wp_version: php_function_output(
function: "get_bloginfo"
arguments: ["version"]
)
current_user_id: php_function_output(
function: "get_current_user_id"
arguments: []
)
# Functions with parameters
post_permalink: php_function_output(
function: "get_permalink"
arguments: [123]
fallback: ""
)
# Theme functions
theme_name: php_function_output(
function: "wp_get_theme"
arguments: []
fallback: "Unknown"
)
# Custom functions
custom_data: php_function_output(
function: "my_custom_function"
arguments: ["param1", "param2"]
fallback: "default"
)
}
Process and combine data:
{
# Combine multiple data sources
current_year: expression_result(
expression: "'Current year is: ' ~ date('Y')"
)
# String manipulation
site_title_caps: expression_result(
expression: "upper('Example Text')"
)
# Mathematical calculations
total_width: expression_result(
expression: "(2 + (60 * 60 * 24)) ~ 'px' "
)
# Check WP Config constants
maintenance_mode: php_function_output(
function: "defined"
arguments: ["WP_MAINTENANCE_MODE"]
fallback: false
)
# Conditional logic
maintenance_message: expression_result(
expression: "(maintenance_mode) ? 'Site under maintenance' : 'Site active'"
)
}
Access WordPress hook data:
{
# Get arguments passed to current hook
first_argument: hook_argument(position: 0)
second_argument: hook_argument(position: 1)
third_argument: hook_argument(position: 2)
# Use hook data in queries
post_from_hook: post(identifier: "ID", value: "{{hook_argument(position: 0)}}") {
ID
post_title
post_status
}
# Conditional processing based on hooks
hook_context: expression_result(
expression: "hook_argument(0) ? 'has_data' : 'no_data'"
)
}
Generate form URLs and security:
{
# Form submission URLs
contact_form_url: form_submission_url(form: "contact")
newsletter_url: form_submission_url(form: "newsletter")
registration_url: form_submission_url(form: "registration")
# Security nonces
contact_nonce: form_nonce(form: "contact")
newsletter_nonce: form_nonce(form: "newsletter")
admin_nonce: form_nonce(form: "admin_action")
}
Common Use Cases
- Site Header Data
- User Personalization
- Form Handling
Complete site header configuration:
{
# Ger the url parameter
search_query: url_parameter(name: "s", fallback: "")
# Get a curent page url
current_page: current_url
# Get user language
user_language: cookie_parameter(name: "language", fallback: "en")
# Get the Browser Agent
user_agent: php_function_output(
function: "wp_is_mobile"
) @private
# Respond with a message
is_mobile: expression_result(
expression: "(user_agent) ? 'mobile-style' : 'desktop-style'"
)
}
User personalization and preferences:
{
# User preferences from cookies
theme: cookie_parameter(name: "theme_preference", fallback: "light")
language: cookie_parameter(name: "preferred_language", fallback: "en")
region: cookie_parameter(name: "user_region", fallback: "US")
currency: cookie_parameter(name: "currency", fallback: "USD")
# Browser and location data
user_agent: server_parameter(name: "HTTP_USER_AGENT", fallback: "")
referrer: server_parameter(name: "HTTP_REFERER", fallback: "direct")
ip_address: server_parameter(name: "REMOTE_ADDR", fallback: "unknown")
accept_language: server_parameter(name: "HTTP_ACCEPT_LANGUAGE", fallback: "en")
# Personalized content flags
returning_visitor: expression_result(
expression: "cookie_parameter('visited_before', 'no') == 'yes'"
)
has_cart: expression_result(
expression: "cookie_parameter('cart_items', '') != ''"
)
preferred_content: cookie_parameter(name: "content_preferences", fallback: "general")
}
Complete form setup with security:
{
# Contact form configuration
action_url: form_submission_url(form: "contact_form")
nonce: form_nonce(form: "contact_form")
method: "POST"
success_url: page_url(name: "thank-you")
error_url: page_url(name: "contact")
# Newsletter signup
action_url: form_submission_url(form: "newsletter")
nonce: form_nonce(form: "newsletter")
redirect_url: current_url
honeypot_field: "newsletter_honeypot"
# User registration
action_url: form_submission_url(form: "user_registration")
nonce: form_nonce(form: "user_registration")
login_url: page_url(name: "login")
terms_url: page_url(name: "terms-of-service")
privacy_url: page_url(name: "privacy-policy")
# Form validation settings
enable_captcha: acf_value(name: "enable_form_captcha")
require_email_verification: acf_value(name: "require_email_verification")
max_file_size: acf_value(name: "max_upload_size")
allowed_file_types: acf_value(name: "allowed_file_extensions")
}