inpsyde/menu-cache

此包已被 弃用 并不再维护。没有建议的替代包。

使用 Transients API 轻松缓存渲染的菜单。

安装: 10,355

依赖项: 0

建议者: 0

安全性: 0

星标: 72

关注者: 11

分支: 5

开放问题: 1

类型:wordpress-plugin

1.4.2 2019-12-10 12:18 UTC

This package is auto-updated.

Last update: 2024-08-10 22:26:52 UTC


README

Version Status Build Downloads License

使用 Transients API 轻松缓存渲染的菜单。

简介

wp_nav_menu() 函数调用 _wp_menu_item_classes_by_context(),它又根据上下文调用 wp_get_object_terms(),而后者 没有 被缓存,多次调用。在有很多分类、术语和菜单项的情况下,这可能导致大量(完全多余的)数据库查询。

此插件允许您缓存渲染的菜单(假设它们没有动态组件)以供重复使用。

安装

使用 Composer 安装

$ composer require inpsyde/menu-cache

要求

此包需要 PHP 5.4 或更高版本。

用法

激活后,默认情况下,插件会缓存 所有 菜单,有效期为 五分钟。可以通过使用相应的过滤器来自定义要缓存的菜单以及过期时间。

过滤器

需要自定义任何内容?只需使用提供的过滤器即可。

请注意:当您使用以下类常量进行过滤器时,请确保类实际上是可用的。这可以通过使用 if ( class_exists( 'Inpsyde\MenuCache\MenuCache' ) ) 对您的自定义进行 保护 来实现。

Inpsyde\MenuCache\MenuCache::FILTER_EXPIRATION

Inpsyde\MenuCache\MenuCache::FILTER_EXPIRATION 过滤器允许您定义所有缓存的菜单的过期时间。默认值是 300,即 5 分钟。

参数

  • int $expiration: 过期时间(秒)。

用法示例

<?php

add_filter( \Inpsyde\MenuCache\MenuCache::FILTER_EXPIRATION, function () {

	// Cache menus for 10 minutes.
	return 600;
} );

Inpsyde\MenuCache\MenuCache::FILTER_KEY

Inpsyde\MenuCache\MenuCache::FILTER_KEY 过滤器允许您根据菜单自定义缓存键。默认值是使用预定义前缀和序列化参数对象的 MD5 哈希构建的。

参数

  • string $key: 当前键。
  • object $args: 菜单参数。

用法示例

<?php

add_filter( \Inpsyde\MenuCache\MenuCache::FILTER_KEY, function ( $key, $args ) {

	// Construct the key based on the theme location only.
	return "cached_menu_{$args->theme_location}";
}, 10, 2 );

Inpsyde\MenuCache\MenuCache::FILTER_KEY_ARGUMENT

Inpsyde\MenuCache\MenuCache::FILTER_KEY_ARGUMENT 过滤器允许您自定义用于存储菜单键(稍后查找)的菜单参数名称。

参数

  • string $key_argument: 当前键参数名称。

用法示例

<?php

add_filter( \Inpsyde\MenuCache\MenuCache::FILTER_KEY_ARGUMENT, function () {

	// Use argument name with a leading underscore.
	return '_menu_key';
} );

Inpsyde\MenuCache\MenuCache::FILTER_SHOULD_CACHE_MENU

Inpsyde\MenuCache\MenuCache::FILTER_SHOULD_CACHE_MENU 过滤器允许您根据菜单自定义缓存。

参数

  • bool $key: 菜单是否应该被缓存。
  • object $args: 菜单参数。

用法示例

<?php

add_filter( \Inpsyde\MenuCache\MenuCache::FILTER_SHOULD_CACHE_MENU, function ( $should_cache_menu, $args ) {

	// Cache all menus for a bunch of dynamically created theme locations.
	return 0 === strpos( $args->theme_location, 'some_prefix_here_' );
}, 10, 2 );

Inpsyde\MenuCache\MenuCache::FILTER_THEME_LOCATIONS

Inpsyde\MenuCache\MenuCache::FILTER_THEME_LOCATIONS 过滤器允许您定义主题位置以限制缓存的菜单。

参数

  • string|string[] $theme_locations: 一个或多个主题位置。

用法示例

<?php

add_filter( \Inpsyde\MenuCache\MenuCache::FILTER_THEME_LOCATIONS, function () {

	// Cache the menus for the "primary" theme location only.
	return 'primary';
} );

许可协议

版权所有 (c) 2017 Inpsyde GmbH

此代码根据 GPLv2+ 许可协议 许可。