Source code for wp_api.endpoints.pages

"""
Pages endpoint for the WordPress REST API
"""

from typing import Dict, List, Optional, Any, Union
from .base import BaseEndpoint


[docs] class Pages(BaseEndpoint): """WordPress Pages API wrapper""" endpoint = "pages"
[docs] def list( self, context: str = "view", page: int = 1, per_page: int = 10, search: str = None, after: str = None, author: Union[int, List[int]] = None, author_exclude: Union[int, List[int]] = None, before: str = None, exclude: Union[int, List[int]] = None, include: Union[int, List[int]] = None, menu_order: int = None, offset: int = None, order: str = "desc", orderby: str = "date", parent: Union[int, List[int]] = None, parent_exclude: Union[int, List[int]] = None, slug: Union[str, List[str]] = None, status: Union[str, List[str]] = "publish", **kwargs ) -> List[Dict]: """ List pages with various filtering options Args: context: Scope under which the request is made (view, edit, embed) page: Current page of the collection per_page: Maximum number of items to be returned in result set search: Limit results to those matching a string after: Limit response to pages published after a given ISO8601 compliant date author: Limit result set to pages assigned to specific authors author_exclude: Ensure result set excludes pages assigned to specific authors before: Limit response to pages published before a given ISO8601 compliant date exclude: Ensure result set excludes specific IDs include: Limit result set to specific IDs menu_order: Limit result set to pages with a specific menu_order value offset: Offset the result set by a specific number of items order: Order sort attribute ascending or descending (asc, desc) orderby: Sort collection by object attribute (date, author, title, etc.) parent: Limit result set to items with particular parent IDs parent_exclude: Limit result set to all items except those with specific parent IDs slug: Limit result set to pages with one or more specific slugs status: Limit result set to pages with specific statuses Returns: List of pages """ params = { "context": context, "page": page, "per_page": per_page, "order": order, "orderby": orderby, } # Add optional parameters if search: params["search"] = search if after: params["after"] = after if author: params["author"] = author if isinstance(author, int) else ",".join(map(str, author)) if author_exclude: params["author_exclude"] = author_exclude if isinstance(author_exclude, int) else ",".join(map(str, author_exclude)) if before: params["before"] = before if exclude: params["exclude"] = exclude if isinstance(exclude, int) else ",".join(map(str, exclude)) if include: params["include"] = include if isinstance(include, int) else ",".join(map(str, include)) if menu_order: params["menu_order"] = menu_order if offset: params["offset"] = offset if parent: params["parent"] = parent if isinstance(parent, int) else ",".join(map(str, parent)) if parent_exclude: params["parent_exclude"] = parent_exclude if isinstance(parent_exclude, int) else ",".join(map(str, parent_exclude)) if slug: params["slug"] = slug if isinstance(slug, str) else ",".join(slug) if status: params["status"] = status if isinstance(status, str) else ",".join(status) # Add any additional parameters params.update(kwargs) return super().list(**params)
[docs] def create( self, title: str, content: str = None, excerpt: str = None, status: str = "publish", author: int = None, featured_media: int = None, comment_status: str = None, ping_status: str = None, menu_order: int = None, parent: int = None, template: str = None, **kwargs ) -> Dict: """ Create a new page Args: title: Page title content: Page content excerpt: Page excerpt status: Page status (publish, future, draft, pending, private) author: Page author ID featured_media: Featured image ID comment_status: Whether comments are allowed (open, closed) ping_status: Whether pings are allowed (open, closed) menu_order: The order in which the page should appear in menus parent: Parent page ID template: Page template to use Returns: Created page data """ data = {"title": title} if content is not None: data["content"] = content if excerpt is not None: data["excerpt"] = excerpt if status is not None: data["status"] = status if author is not None: data["author"] = author if featured_media is not None: data["featured_media"] = featured_media if comment_status is not None: data["comment_status"] = comment_status if ping_status is not None: data["ping_status"] = ping_status if menu_order is not None: data["menu_order"] = menu_order if parent is not None: data["parent"] = parent if template is not None: data["template"] = template # Add any additional data data.update(kwargs) return super().create(data)
[docs] def update( self, id: int, title: str = None, content: str = None, excerpt: str = None, status: str = None, author: int = None, featured_media: int = None, comment_status: str = None, ping_status: str = None, menu_order: int = None, parent: int = None, template: str = None, **kwargs ) -> Dict: """ Update an existing page Args: id: Page ID title: Page title content: Page content excerpt: Page excerpt status: Page status (publish, future, draft, pending, private) author: Page author ID featured_media: Featured image ID comment_status: Whether comments are allowed (open, closed) ping_status: Whether pings are allowed (open, closed) menu_order: The order in which the page should appear in menus parent: Parent page ID template: Page template to use Returns: Updated page data """ data = {} if title is not None: data["title"] = title if content is not None: data["content"] = content if excerpt is not None: data["excerpt"] = excerpt if status is not None: data["status"] = status if author is not None: data["author"] = author if featured_media is not None: data["featured_media"] = featured_media if comment_status is not None: data["comment_status"] = comment_status if ping_status is not None: data["ping_status"] = ping_status if menu_order is not None: data["menu_order"] = menu_order if parent is not None: data["parent"] = parent if template is not None: data["template"] = template # Add any additional data data.update(kwargs) return super().update(id, data)
[docs] def get_revisions(self, page_id: int, **params) -> List[Dict]: """ Get page revisions Args: page_id: Page ID **params: Query parameters Returns: List of page revisions """ endpoint = f"{self.endpoint}/{page_id}/revisions" return self.client.get(endpoint, params)
[docs] def get_revision(self, page_id: int, revision_id: int, **params) -> Dict: """ Get a specific page revision Args: page_id: Page ID revision_id: Revision ID **params: Query parameters Returns: Page revision data """ endpoint = f"{self.endpoint}/{page_id}/revisions/{revision_id}" return self.client.get(endpoint, params)