Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/inpsyde/menu-cache

Easily cache rendered menus using the Transients API.
https://github.com/inpsyde/menu-cache

cached-menus transients-api wordpress wordpress-plugin

Last synced: about 2 months ago
JSON representation

Easily cache rendered menus using the Transients API.

Awesome Lists containing this project

README

        

# Inpsyde Menu Cache

[![Version](https://img.shields.io/packagist/v/inpsyde/menu-cache.svg)](https://packagist.org/packages/inpsyde/menu-cache)
[![Status](https://img.shields.io/badge/status-active-brightgreen.svg)](https://github.com/inpsyde/menu-cache)
[![Build](https://img.shields.io/travis/inpsyde/menu-cache.svg)](http://travis-ci.org/inpsyde/menu-cache)
[![Downloads](https://img.shields.io/packagist/dt/inpsyde/menu-cache.svg)](https://packagist.org/packages/inpsyde/menu-cache)
[![License](https://img.shields.io/packagist/l/inpsyde/menu-cache.svg)](https://packagist.org/packages/inpsyde/menu-cache)

> Easily cache rendered menus using the Transients API.

## Introduction

The `wp_nav_menu()` function calls `_wp_menu_item_classes_by_context()`, which again, depending on the context, calls `wp_get_object_terms()`, which is **not** cached, multiple times.
With lots of taxonomies, terms and menu items, this can lead to a fair amount of (totally redundant) database queries.

This plugin lets you cache rendered menus (assuming they don't have dynamic components) for re-use.

## Installation

Install with [Composer](https://getcomposer.org):

```sh
$ composer require inpsyde/menu-cache
```

### Requirements

This package requires PHP 5.4 or higher.

## Usage

Once activated, the plugin caches **all** menus, by default for **five minutes**.
The menus to be cached, as well as the expiration, can be customized by using the appropriate filter.

### Filters

Need to customize anything?
Just use the provided filters.

**Please note:** when you use the below class constants for the filters, make sure that the class is actually available.
This can be as easy as _guarding_ your customization with `if ( class_exists( 'Inpsyde\MenuCache\MenuCache' ) )`.

#### `Inpsyde\MenuCache\MenuCache::FILTER_EXPIRATION`

The `Inpsyde\MenuCache\MenuCache::FILTER_EXPIRATION` filter allows you to define the expiration for all cached menus.
The default value is 300, which is 5 minutes.

**Arguments:**

- `int` `$expiration`: Expiration in seconds.

**Usage Example:**

```php
theme_location}";
}, 10, 2 );
```

#### `Inpsyde\MenuCache\MenuCache::FILTER_KEY_ARGUMENT`

The `Inpsyde\MenuCache\MenuCache::FILTER_KEY_ARGUMENT` filter allows you to customize the menu argument name that is used to store the menu key (for later look-up).

**Arguments:**

- `string` `$key_argument`: Current key argument name.

**Usage Example:**

```php
theme_location, 'some_prefix_here_' );
}, 10, 2 );
```

#### `Inpsyde\MenuCache\MenuCache::FILTER_THEME_LOCATIONS`

The `Inpsyde\MenuCache\MenuCache::FILTER_THEME_LOCATIONS` filter allows you to define theme locations to restrict caching menus to.

**Arguments:**

- `string|string[]` `$theme_locations`: One or more theme locations.

**Usage Example:**

```php