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

所有 BuddyPress 核心的操作和过滤器都以机器可读的 JSON 格式提供。

dev-main 2022-02-14 14:38 UTC

This package is auto-updated.

Last update: 2023-09-15 15:19:45 UTC


README

所有 BuddyPress 核心的操作和过滤器都以机器可读的 JSON 格式提供。

最后更新于 BuddyPress 10.0.0。

安装

  • 作为 PHP 使用的 Composer 包
  composer require renatonascalves/bp-hooks
  • 作为 JavaScript 或 TypeScript 使用的 npm 包
  npm install @renatonascalves/bp-hooks

PHP 中的使用

// Get hooks as JSON:
$actions_json = file_get_contents( 'vendor/renatonascalves/bp-hooks/hooks/actions.json' );
$filters_json = file_get_contents( 'vendor/renatonascalves/bp-hooks/hooks/filters.json' );

// Convert hooks to PHP:
$actions = json_decode( $actions_json, true )['hooks'];
$filters = json_decode( $filters_json, true )['hooks'];

// Search for filters matching a string:
$search = 'permalink';
$results = array_filter( $filters, function( array $hook ) use ( $search ) {
  return ( false !== strpos( $hook['name'], $search ) );
} );

var_dump( $results );

JavaScript 中的使用

// Get hooks as array of objects:
const actions = require('@renatonascalves/bp-hooks/hooks/actions.json').hooks;
const filters = require('@renatonascalves/bp-hooks/hooks/filters.json').hooks;

// Search for actions matching a string:
const search = 'menu';
const results = actions.filter( hook => ( null !== hook.name.match( search ) ) );

console.log(results);

在 TypeScript 中导入

import { hooks as actions } from '@renatonascalves/bp-hooks/hooks/actions.json';
import { hooks as filters } from '@renatonascalves/bp-hooks/hooks/filters.json';

如果需要,也可以导入钩子组件的接口

import { Hooks, Hook, Doc, Tags, Tag } from '@renatonascalves/bp-hooks/interface';

操作、过滤器以及模式

重新生成钩子文件

安装依赖

  npm i && composer i

然后运行

  composer generate

有一些脚本是用于检查数据的

  • 检查所有内容

    npm run check
  • 查找缺少 @since 标签的钩子

    jq '.hooks[] | . as $d | .doc .tags | map(.name) | select( contains(["since"]) | not ) | $d' hooks/filters.json
    jq '.hooks[] | . as $d | .doc .tags | map(.name) | select( contains(["since"]) | not ) | $d' hooks/actions.json
  • 查找 @param 标签数量不正确的钩子(不完全准确,不确定为什么)

    jq '.hooks[] | select( .args == ( .doc.tags | map(.name) | select( contains(["param"]) ) | length ) ) | .name' hooks/filters.json
    jq '.hooks[] | select( .args == ( .doc.tags | map(.name) | select( contains(["param"]) ) | length ) ) | .name' hooks/actions.json