bp_nouveau_parse_hooked_dir_nav( string $hook = '', string $component = '', int $position = 99 )
Parse an html output to a list of component’s directory nav item.
Description Description
Parameters Parameters
- $hook
-
(Optional) The hook to fire.
Default value: ''
- $component
-
(Optional) The component nav belongs to.
Default value: ''
- $position
-
(Optional) The position of the nav item.
Default value: 99
Return Return
(array) A list of component's dir nav items
Source Source
File: bp-templates/bp-nouveau/includes/functions.php
function bp_nouveau_parse_hooked_dir_nav( $hook = '', $component = '', $position = 99 ) {
$extra_nav_items = array();
if ( empty( $hook ) || empty( $component ) || ! has_action( $hook ) ) {
return $extra_nav_items;
}
// Get the hook output.
ob_start();
/**
* Fires at the start of the output for `bp_nouveau_parse_hooked_dir_nav()`.
*
* This hook is variable and depends on the hook parameter passed in.
*
* @since 3.0.0
*/
do_action( $hook );
$output = ob_get_clean();
if ( empty( $output ) ) {
return $extra_nav_items;
}
preg_match_all( "/<li\sid=\"{$component}\-(.*)\"[^>]*>/siU", $output, $lis );
if ( empty( $lis[1] ) ) {
return $extra_nav_items;
}
$extra_nav_items = array_fill_keys( $lis[1], array( 'component' => $component, 'position' => $position ) );
preg_match_all( '/<a\s[^>]*>(.*)<\/a>/siU', $output, $as );
if ( ! empty( $as[0] ) ) {
foreach ( $as[0] as $ka => $a ) {
$extra_nav_items[ $lis[1][ $ka ] ]['slug'] = $lis[1][ $ka ];
$extra_nav_items[ $lis[1][ $ka ] ]['text'] = $as[1][ $ka ];
preg_match_all( '/([\w\-]+)=([^"\'> ]+|([\'"]?)(?:[^\3]|\3+)+?\3)/', $a, $attrs );
if ( ! empty( $attrs[1] ) ) {
foreach ( $attrs[1] as $katt => $att ) {
if ( 'href' === $att ) {
$extra_nav_items[ $lis[1][ $ka ] ]['link'] = trim( $attrs[2][ $katt ], '"' );
} else {
$extra_nav_items[ $lis[1][ $ka ] ][ $att ] = trim( $attrs[2][ $katt ], '"' );
}
}
}
}
}
if ( ! empty( $as[1] ) ) {
foreach ( $as[1] as $ks => $s ) {
preg_match_all( '/<span>(.*)<\/span>/siU', $s, $spans );
if ( empty( $spans[0] ) ) {
$extra_nav_items[ $lis[1][ $ks ] ]['count'] = false;
} elseif ( ! empty( $spans[1][0] ) ) {
$extra_nav_items[ $lis[1][ $ks ] ]['count'] = (int) $spans[1][0];
} else {
$extra_nav_items[ $lis[1][ $ks ] ]['count'] = '';
}
}
}
return $extra_nav_items;
}
Changelog Changelog
| Version | Description |
|---|---|
| 3.0.0 | Introduced. |