inpsyde / menu-cache
使用 Transients API 轻松缓存渲染的菜单。
Requires
- php: >=5.4
Requires (Dev)
- brain/monkey: ^1.5.0
- dealerdirect/phpcodesniffer-composer-installer: ^0.5
- mockery/mockery: ~0.9
- phpcompatibility/phpcompatibility-wp: ^2.1
- phpunit/phpunit: ~4.8|~5.1
- squizlabs/php_codesniffer: ^3.0
- wp-coding-standards/wpcs: ^2.2
This package is auto-updated.
Last update: 2024-08-10 22:26:52 UTC
README
使用 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+ 许可协议 许可。