Source code for wp_api.endpoints.categories

"""
Categories endpoint for the WordPress REST API
"""

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


[docs] class Categories(BaseEndpoint): """WordPress Categories API wrapper""" endpoint = "categories"
[docs] def list( self, context: str = "view", page: int = 1, per_page: int = 10, search: str = None, exclude: Union[int, List[int]] = None, include: Union[int, List[int]] = None, order: str = "asc", orderby: str = "name", hide_empty: bool = False, parent: int = None, post: int = None, slug: Union[str, List[str]] = None, **kwargs ) -> List[Dict]: """ List categories 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 exclude: Ensure result set excludes specific IDs include: Limit result set to specific IDs order: Order sort attribute ascending or descending (asc, desc) orderby: Sort collection by object attribute (id, name, slug, etc.) hide_empty: Whether to hide categories that don't have any posts parent: Limit result set to categories that have a specific parent ID post: Limit result set to categories assigned to a specific post slug: Limit result set to categories with one or more specific slugs Returns: List of categories """ params = { "context": context, "page": page, "per_page": per_page, "order": order, "orderby": orderby, "hide_empty": "true" if hide_empty else "false", } # Add optional parameters if search: params["search"] = search 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 parent is not None: params["parent"] = parent if post: params["post"] = post if slug: params["slug"] = slug if isinstance(slug, str) else ",".join(slug) # Add any additional parameters params.update(kwargs) return super().list(**params)
[docs] def create( self, name: str, slug: str = None, parent: int = None, description: str = None, **kwargs ) -> Dict: """ Create a new category Args: name: Name of the category slug: Slug for the category (optional) parent: Parent category ID (optional) description: Description of the category (optional) Returns: Created category data """ data = {"name": name} if slug is not None: data["slug"] = slug if parent is not None: data["parent"] = parent if description is not None: data["description"] = description # Add any additional data data.update(kwargs) return super().create(data)
[docs] def update( self, id: int, name: str = None, slug: str = None, parent: int = None, description: str = None, **kwargs ) -> Dict: """ Update an existing category Args: id: Category ID name: Name of the category (optional) slug: Slug for the category (optional) parent: Parent category ID (optional) description: Description of the category (optional) Returns: Updated category data """ data = {} if name is not None: data["name"] = name if slug is not None: data["slug"] = slug if parent is not None: data["parent"] = parent if description is not None: data["description"] = description # Add any additional data data.update(kwargs) return super().update(id, data)