Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/wp-inclu.../blocks
File: navigation.php
* @return string
[1000] Fix | Delete
*/
[1001] Fix | Delete
function block_core_navigation_render_submenu_icon() {
[1002] Fix | Delete
return '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" aria-hidden="true" focusable="false"><path d="M1.50002 4L6.00002 8L10.5 4" stroke-width="1.5"></path></svg>';
[1003] Fix | Delete
}
[1004] Fix | Delete
[1005] Fix | Delete
/**
[1006] Fix | Delete
* Filter out empty "null" blocks from the block list.
[1007] Fix | Delete
* 'parse_blocks' includes a null block with '\n\n' as the content when
[1008] Fix | Delete
* it encounters whitespace. This is not a bug but rather how the parser
[1009] Fix | Delete
* is designed.
[1010] Fix | Delete
*
[1011] Fix | Delete
* @since 5.9.0
[1012] Fix | Delete
*
[1013] Fix | Delete
* @param array $parsed_blocks the parsed blocks to be normalized.
[1014] Fix | Delete
* @return array the normalized parsed blocks.
[1015] Fix | Delete
*/
[1016] Fix | Delete
function block_core_navigation_filter_out_empty_blocks( $parsed_blocks ) {
[1017] Fix | Delete
$filtered = array_filter(
[1018] Fix | Delete
$parsed_blocks,
[1019] Fix | Delete
static function ( $block ) {
[1020] Fix | Delete
return isset( $block['blockName'] );
[1021] Fix | Delete
}
[1022] Fix | Delete
);
[1023] Fix | Delete
[1024] Fix | Delete
// Reset keys.
[1025] Fix | Delete
return array_values( $filtered );
[1026] Fix | Delete
}
[1027] Fix | Delete
[1028] Fix | Delete
/**
[1029] Fix | Delete
* Returns true if the navigation block contains a nested navigation block.
[1030] Fix | Delete
*
[1031] Fix | Delete
* @since 6.2.0
[1032] Fix | Delete
*
[1033] Fix | Delete
* @param WP_Block_List $inner_blocks Inner block instance to be normalized.
[1034] Fix | Delete
* @return bool true if the navigation block contains a nested navigation block.
[1035] Fix | Delete
*/
[1036] Fix | Delete
function block_core_navigation_block_contains_core_navigation( $inner_blocks ) {
[1037] Fix | Delete
foreach ( $inner_blocks as $block ) {
[1038] Fix | Delete
if ( 'core/navigation' === $block->name ) {
[1039] Fix | Delete
return true;
[1040] Fix | Delete
}
[1041] Fix | Delete
if ( $block->inner_blocks && block_core_navigation_block_contains_core_navigation( $block->inner_blocks ) ) {
[1042] Fix | Delete
return true;
[1043] Fix | Delete
}
[1044] Fix | Delete
}
[1045] Fix | Delete
[1046] Fix | Delete
return false;
[1047] Fix | Delete
}
[1048] Fix | Delete
[1049] Fix | Delete
/**
[1050] Fix | Delete
* Retrieves the appropriate fallback to be used on the front of the
[1051] Fix | Delete
* site when there is no menu assigned to the Nav block.
[1052] Fix | Delete
*
[1053] Fix | Delete
* This aims to mirror how the fallback mechanic for wp_nav_menu works.
[1054] Fix | Delete
* See https://developer.wordpress.org/reference/functions/wp_nav_menu/#more-information.
[1055] Fix | Delete
*
[1056] Fix | Delete
* @since 5.9.0
[1057] Fix | Delete
*
[1058] Fix | Delete
* @return array the array of blocks to be used as a fallback.
[1059] Fix | Delete
*/
[1060] Fix | Delete
function block_core_navigation_get_fallback_blocks() {
[1061] Fix | Delete
$page_list_fallback = array(
[1062] Fix | Delete
array(
[1063] Fix | Delete
'blockName' => 'core/page-list',
[1064] Fix | Delete
'innerContent' => array(),
[1065] Fix | Delete
'attrs' => array(),
[1066] Fix | Delete
),
[1067] Fix | Delete
);
[1068] Fix | Delete
[1069] Fix | Delete
$registry = WP_Block_Type_Registry::get_instance();
[1070] Fix | Delete
[1071] Fix | Delete
// If `core/page-list` is not registered then return empty blocks.
[1072] Fix | Delete
$fallback_blocks = $registry->is_registered( 'core/page-list' ) ? $page_list_fallback : array();
[1073] Fix | Delete
$navigation_post = WP_Navigation_Fallback::get_fallback();
[1074] Fix | Delete
[1075] Fix | Delete
// Use the first non-empty Navigation as fallback if available.
[1076] Fix | Delete
if ( $navigation_post ) {
[1077] Fix | Delete
$parsed_blocks = parse_blocks( $navigation_post->post_content );
[1078] Fix | Delete
$maybe_fallback = block_core_navigation_filter_out_empty_blocks( $parsed_blocks );
[1079] Fix | Delete
[1080] Fix | Delete
// Normalizing blocks may result in an empty array of blocks if they were all `null` blocks.
[1081] Fix | Delete
// In this case default to the (Page List) fallback.
[1082] Fix | Delete
$fallback_blocks = ! empty( $maybe_fallback ) ? $maybe_fallback : $fallback_blocks;
[1083] Fix | Delete
[1084] Fix | Delete
if ( function_exists( 'set_ignored_hooked_blocks_metadata' ) ) {
[1085] Fix | Delete
// Run Block Hooks algorithm to inject hooked blocks.
[1086] Fix | Delete
// We have to run it here because we need the post ID of the Navigation block to track ignored hooked blocks.
[1087] Fix | Delete
$markup = block_core_navigation_insert_hooked_blocks( $fallback_blocks, $navigation_post );
[1088] Fix | Delete
$blocks = parse_blocks( $markup );
[1089] Fix | Delete
[1090] Fix | Delete
if ( isset( $blocks[0]['innerBlocks'] ) ) {
[1091] Fix | Delete
$fallback_blocks = $blocks[0]['innerBlocks'];
[1092] Fix | Delete
}
[1093] Fix | Delete
}
[1094] Fix | Delete
}
[1095] Fix | Delete
[1096] Fix | Delete
/**
[1097] Fix | Delete
* Filters the fallback experience for the Navigation block.
[1098] Fix | Delete
*
[1099] Fix | Delete
* Returning a falsey value will opt out of the fallback and cause the block not to render.
[1100] Fix | Delete
* To customise the blocks provided return an array of blocks - these should be valid
[1101] Fix | Delete
* children of the `core/navigation` block.
[1102] Fix | Delete
*
[1103] Fix | Delete
* @since 5.9.0
[1104] Fix | Delete
*
[1105] Fix | Delete
* @param array[] $fallback_blocks default fallback blocks provided by the default block mechanic.
[1106] Fix | Delete
*/
[1107] Fix | Delete
return apply_filters( 'block_core_navigation_render_fallback', $fallback_blocks );
[1108] Fix | Delete
}
[1109] Fix | Delete
[1110] Fix | Delete
/**
[1111] Fix | Delete
* Iterate through all inner blocks recursively and get navigation link block's post IDs.
[1112] Fix | Delete
*
[1113] Fix | Delete
* @since 6.0.0
[1114] Fix | Delete
*
[1115] Fix | Delete
* @param WP_Block_List $inner_blocks Block list class instance.
[1116] Fix | Delete
*
[1117] Fix | Delete
* @return array Array of post IDs.
[1118] Fix | Delete
*/
[1119] Fix | Delete
function block_core_navigation_get_post_ids( $inner_blocks ) {
[1120] Fix | Delete
$post_ids = array_map( 'block_core_navigation_from_block_get_post_ids', iterator_to_array( $inner_blocks ) );
[1121] Fix | Delete
return array_unique( array_merge( ...$post_ids ) );
[1122] Fix | Delete
}
[1123] Fix | Delete
[1124] Fix | Delete
/**
[1125] Fix | Delete
* Get post IDs from a navigation link block instance.
[1126] Fix | Delete
*
[1127] Fix | Delete
* @since 6.0.0
[1128] Fix | Delete
*
[1129] Fix | Delete
* @param WP_Block $block Instance of a block.
[1130] Fix | Delete
*
[1131] Fix | Delete
* @return array Array of post IDs.
[1132] Fix | Delete
*/
[1133] Fix | Delete
function block_core_navigation_from_block_get_post_ids( $block ) {
[1134] Fix | Delete
$post_ids = array();
[1135] Fix | Delete
[1136] Fix | Delete
if ( $block->inner_blocks ) {
[1137] Fix | Delete
$post_ids = block_core_navigation_get_post_ids( $block->inner_blocks );
[1138] Fix | Delete
}
[1139] Fix | Delete
[1140] Fix | Delete
if ( 'core/navigation-link' === $block->name || 'core/navigation-submenu' === $block->name ) {
[1141] Fix | Delete
if ( $block->attributes && isset( $block->attributes['kind'] ) && 'post-type' === $block->attributes['kind'] && isset( $block->attributes['id'] ) ) {
[1142] Fix | Delete
$post_ids[] = $block->attributes['id'];
[1143] Fix | Delete
}
[1144] Fix | Delete
}
[1145] Fix | Delete
[1146] Fix | Delete
return $post_ids;
[1147] Fix | Delete
}
[1148] Fix | Delete
[1149] Fix | Delete
/**
[1150] Fix | Delete
* Renders the `core/navigation` block on server.
[1151] Fix | Delete
*
[1152] Fix | Delete
* @since 5.9.0
[1153] Fix | Delete
*
[1154] Fix | Delete
* @param array $attributes The block attributes.
[1155] Fix | Delete
* @param string $content The saved content.
[1156] Fix | Delete
* @param WP_Block $block The parsed block.
[1157] Fix | Delete
*
[1158] Fix | Delete
* @return string Returns the navigation block markup.
[1159] Fix | Delete
*/
[1160] Fix | Delete
function render_block_core_navigation( $attributes, $content, $block ) {
[1161] Fix | Delete
return WP_Navigation_Block_Renderer::render( $attributes, $content, $block );
[1162] Fix | Delete
}
[1163] Fix | Delete
[1164] Fix | Delete
/**
[1165] Fix | Delete
* Register the navigation block.
[1166] Fix | Delete
*
[1167] Fix | Delete
* @since 5.9.0
[1168] Fix | Delete
*
[1169] Fix | Delete
* @uses render_block_core_navigation()
[1170] Fix | Delete
* @throws WP_Error An WP_Error exception parsing the block definition.
[1171] Fix | Delete
*/
[1172] Fix | Delete
function register_block_core_navigation() {
[1173] Fix | Delete
register_block_type_from_metadata(
[1174] Fix | Delete
__DIR__ . '/navigation',
[1175] Fix | Delete
array(
[1176] Fix | Delete
'render_callback' => 'render_block_core_navigation',
[1177] Fix | Delete
)
[1178] Fix | Delete
);
[1179] Fix | Delete
}
[1180] Fix | Delete
[1181] Fix | Delete
add_action( 'init', 'register_block_core_navigation' );
[1182] Fix | Delete
[1183] Fix | Delete
/**
[1184] Fix | Delete
* Filter that changes the parsed attribute values of navigation blocks contain typographic presets to contain the values directly.
[1185] Fix | Delete
*
[1186] Fix | Delete
* @since 5.9.0
[1187] Fix | Delete
*
[1188] Fix | Delete
* @param array $parsed_block The block being rendered.
[1189] Fix | Delete
*
[1190] Fix | Delete
* @return array The block being rendered without typographic presets.
[1191] Fix | Delete
*/
[1192] Fix | Delete
function block_core_navigation_typographic_presets_backcompatibility( $parsed_block ) {
[1193] Fix | Delete
if ( 'core/navigation' === $parsed_block['blockName'] ) {
[1194] Fix | Delete
$attribute_to_prefix_map = array(
[1195] Fix | Delete
'fontStyle' => 'var:preset|font-style|',
[1196] Fix | Delete
'fontWeight' => 'var:preset|font-weight|',
[1197] Fix | Delete
'textDecoration' => 'var:preset|text-decoration|',
[1198] Fix | Delete
'textTransform' => 'var:preset|text-transform|',
[1199] Fix | Delete
);
[1200] Fix | Delete
foreach ( $attribute_to_prefix_map as $style_attribute => $prefix ) {
[1201] Fix | Delete
if ( ! empty( $parsed_block['attrs']['style']['typography'][ $style_attribute ] ) ) {
[1202] Fix | Delete
$prefix_len = strlen( $prefix );
[1203] Fix | Delete
$attribute_value = &$parsed_block['attrs']['style']['typography'][ $style_attribute ];
[1204] Fix | Delete
if ( 0 === strncmp( $attribute_value, $prefix, $prefix_len ) ) {
[1205] Fix | Delete
$attribute_value = substr( $attribute_value, $prefix_len );
[1206] Fix | Delete
}
[1207] Fix | Delete
if ( 'textDecoration' === $style_attribute && 'strikethrough' === $attribute_value ) {
[1208] Fix | Delete
$attribute_value = 'line-through';
[1209] Fix | Delete
}
[1210] Fix | Delete
}
[1211] Fix | Delete
}
[1212] Fix | Delete
}
[1213] Fix | Delete
[1214] Fix | Delete
return $parsed_block;
[1215] Fix | Delete
}
[1216] Fix | Delete
[1217] Fix | Delete
add_filter( 'render_block_data', 'block_core_navigation_typographic_presets_backcompatibility' );
[1218] Fix | Delete
[1219] Fix | Delete
/**
[1220] Fix | Delete
* Turns menu item data into a nested array of parsed blocks
[1221] Fix | Delete
*
[1222] Fix | Delete
* @since 5.9.0
[1223] Fix | Delete
*
[1224] Fix | Delete
* @deprecated 6.3.0 Use WP_Navigation_Fallback::parse_blocks_from_menu_items() instead.
[1225] Fix | Delete
*
[1226] Fix | Delete
* @param array $menu_items An array of menu items that represent
[1227] Fix | Delete
* an individual level of a menu.
[1228] Fix | Delete
* @param array $menu_items_by_parent_id An array keyed by the id of the
[1229] Fix | Delete
* parent menu where each element is an
[1230] Fix | Delete
* array of menu items that belong to
[1231] Fix | Delete
* that parent.
[1232] Fix | Delete
* @return array An array of parsed block data.
[1233] Fix | Delete
*/
[1234] Fix | Delete
function block_core_navigation_parse_blocks_from_menu_items( $menu_items, $menu_items_by_parent_id ) {
[1235] Fix | Delete
[1236] Fix | Delete
_deprecated_function( __FUNCTION__, '6.3.0', 'WP_Navigation_Fallback::parse_blocks_from_menu_items' );
[1237] Fix | Delete
[1238] Fix | Delete
if ( empty( $menu_items ) ) {
[1239] Fix | Delete
return array();
[1240] Fix | Delete
}
[1241] Fix | Delete
[1242] Fix | Delete
$blocks = array();
[1243] Fix | Delete
[1244] Fix | Delete
foreach ( $menu_items as $menu_item ) {
[1245] Fix | Delete
$class_name = ! empty( $menu_item->classes ) ? implode( ' ', (array) $menu_item->classes ) : null;
[1246] Fix | Delete
$id = ( null !== $menu_item->object_id && 'custom' !== $menu_item->object ) ? $menu_item->object_id : null;
[1247] Fix | Delete
$opens_in_new_tab = null !== $menu_item->target && '_blank' === $menu_item->target;
[1248] Fix | Delete
$rel = ( null !== $menu_item->xfn && '' !== $menu_item->xfn ) ? $menu_item->xfn : null;
[1249] Fix | Delete
$kind = null !== $menu_item->type ? str_replace( '_', '-', $menu_item->type ) : 'custom';
[1250] Fix | Delete
[1251] Fix | Delete
$block = array(
[1252] Fix | Delete
'blockName' => isset( $menu_items_by_parent_id[ $menu_item->ID ] ) ? 'core/navigation-submenu' : 'core/navigation-link',
[1253] Fix | Delete
'attrs' => array(
[1254] Fix | Delete
'className' => $class_name,
[1255] Fix | Delete
'description' => $menu_item->description,
[1256] Fix | Delete
'id' => $id,
[1257] Fix | Delete
'kind' => $kind,
[1258] Fix | Delete
'label' => $menu_item->title,
[1259] Fix | Delete
'opensInNewTab' => $opens_in_new_tab,
[1260] Fix | Delete
'rel' => $rel,
[1261] Fix | Delete
'title' => $menu_item->attr_title,
[1262] Fix | Delete
'type' => $menu_item->object,
[1263] Fix | Delete
'url' => $menu_item->url,
[1264] Fix | Delete
),
[1265] Fix | Delete
);
[1266] Fix | Delete
[1267] Fix | Delete
$block['innerBlocks'] = isset( $menu_items_by_parent_id[ $menu_item->ID ] )
[1268] Fix | Delete
? block_core_navigation_parse_blocks_from_menu_items( $menu_items_by_parent_id[ $menu_item->ID ], $menu_items_by_parent_id )
[1269] Fix | Delete
: array();
[1270] Fix | Delete
$block['innerContent'] = array_map( 'serialize_block', $block['innerBlocks'] );
[1271] Fix | Delete
[1272] Fix | Delete
$blocks[] = $block;
[1273] Fix | Delete
}
[1274] Fix | Delete
[1275] Fix | Delete
return $blocks;
[1276] Fix | Delete
}
[1277] Fix | Delete
[1278] Fix | Delete
/**
[1279] Fix | Delete
* Get the classic navigation menu to use as a fallback.
[1280] Fix | Delete
*
[1281] Fix | Delete
* @since 6.2.0
[1282] Fix | Delete
*
[1283] Fix | Delete
* @deprecated 6.3.0 Use WP_Navigation_Fallback::get_classic_menu_fallback() instead.
[1284] Fix | Delete
*
[1285] Fix | Delete
* @return object WP_Term The classic navigation.
[1286] Fix | Delete
*/
[1287] Fix | Delete
function block_core_navigation_get_classic_menu_fallback() {
[1288] Fix | Delete
[1289] Fix | Delete
_deprecated_function( __FUNCTION__, '6.3.0', 'WP_Navigation_Fallback::get_classic_menu_fallback' );
[1290] Fix | Delete
[1291] Fix | Delete
$classic_nav_menus = wp_get_nav_menus();
[1292] Fix | Delete
[1293] Fix | Delete
// If menus exist.
[1294] Fix | Delete
if ( $classic_nav_menus && ! is_wp_error( $classic_nav_menus ) ) {
[1295] Fix | Delete
// Handles simple use case where user has a classic menu and switches to a block theme.
[1296] Fix | Delete
[1297] Fix | Delete
// Returns the menu assigned to location `primary`.
[1298] Fix | Delete
$locations = get_nav_menu_locations();
[1299] Fix | Delete
if ( isset( $locations['primary'] ) ) {
[1300] Fix | Delete
$primary_menu = wp_get_nav_menu_object( $locations['primary'] );
[1301] Fix | Delete
if ( $primary_menu ) {
[1302] Fix | Delete
return $primary_menu;
[1303] Fix | Delete
}
[1304] Fix | Delete
}
[1305] Fix | Delete
[1306] Fix | Delete
// Returns a menu if `primary` is its slug.
[1307] Fix | Delete
foreach ( $classic_nav_menus as $classic_nav_menu ) {
[1308] Fix | Delete
if ( 'primary' === $classic_nav_menu->slug ) {
[1309] Fix | Delete
return $classic_nav_menu;
[1310] Fix | Delete
}
[1311] Fix | Delete
}
[1312] Fix | Delete
[1313] Fix | Delete
// Otherwise return the most recently created classic menu.
[1314] Fix | Delete
usort(
[1315] Fix | Delete
$classic_nav_menus,
[1316] Fix | Delete
static function ( $a, $b ) {
[1317] Fix | Delete
return $b->term_id - $a->term_id;
[1318] Fix | Delete
}
[1319] Fix | Delete
);
[1320] Fix | Delete
return $classic_nav_menus[0];
[1321] Fix | Delete
}
[1322] Fix | Delete
}
[1323] Fix | Delete
[1324] Fix | Delete
/**
[1325] Fix | Delete
* Converts a classic navigation to blocks.
[1326] Fix | Delete
*
[1327] Fix | Delete
* @since 6.2.0
[1328] Fix | Delete
*
[1329] Fix | Delete
* @deprecated 6.3.0 Use WP_Navigation_Fallback::get_classic_menu_fallback_blocks() instead.
[1330] Fix | Delete
*
[1331] Fix | Delete
* @param object $classic_nav_menu WP_Term The classic navigation object to convert.
[1332] Fix | Delete
* @return array the normalized parsed blocks.
[1333] Fix | Delete
*/
[1334] Fix | Delete
function block_core_navigation_get_classic_menu_fallback_blocks( $classic_nav_menu ) {
[1335] Fix | Delete
[1336] Fix | Delete
_deprecated_function( __FUNCTION__, '6.3.0', 'WP_Navigation_Fallback::get_classic_menu_fallback_blocks' );
[1337] Fix | Delete
[1338] Fix | Delete
// BEGIN: Code that already exists in wp_nav_menu().
[1339] Fix | Delete
$menu_items = wp_get_nav_menu_items( $classic_nav_menu->term_id, array( 'update_post_term_cache' => false ) );
[1340] Fix | Delete
[1341] Fix | Delete
// Set up the $menu_item variables.
[1342] Fix | Delete
_wp_menu_item_classes_by_context( $menu_items );
[1343] Fix | Delete
[1344] Fix | Delete
$sorted_menu_items = array();
[1345] Fix | Delete
foreach ( (array) $menu_items as $menu_item ) {
[1346] Fix | Delete
$sorted_menu_items[ $menu_item->menu_order ] = $menu_item;
[1347] Fix | Delete
}
[1348] Fix | Delete
[1349] Fix | Delete
unset( $menu_items, $menu_item );
[1350] Fix | Delete
[1351] Fix | Delete
// END: Code that already exists in wp_nav_menu().
[1352] Fix | Delete
[1353] Fix | Delete
$menu_items_by_parent_id = array();
[1354] Fix | Delete
foreach ( $sorted_menu_items as $menu_item ) {
[1355] Fix | Delete
$menu_items_by_parent_id[ $menu_item->menu_item_parent ][] = $menu_item;
[1356] Fix | Delete
}
[1357] Fix | Delete
[1358] Fix | Delete
$inner_blocks = block_core_navigation_parse_blocks_from_menu_items(
[1359] Fix | Delete
isset( $menu_items_by_parent_id[0] )
[1360] Fix | Delete
? $menu_items_by_parent_id[0]
[1361] Fix | Delete
: array(),
[1362] Fix | Delete
$menu_items_by_parent_id
[1363] Fix | Delete
);
[1364] Fix | Delete
[1365] Fix | Delete
return serialize_blocks( $inner_blocks );
[1366] Fix | Delete
}
[1367] Fix | Delete
[1368] Fix | Delete
/**
[1369] Fix | Delete
* If there's a classic menu then use it as a fallback.
[1370] Fix | Delete
*
[1371] Fix | Delete
* @since 6.2.0
[1372] Fix | Delete
*
[1373] Fix | Delete
* @deprecated 6.3.0 Use WP_Navigation_Fallback::create_classic_menu_fallback() instead.
[1374] Fix | Delete
*
[1375] Fix | Delete
* @return array the normalized parsed blocks.
[1376] Fix | Delete
*/
[1377] Fix | Delete
function block_core_navigation_maybe_use_classic_menu_fallback() {
[1378] Fix | Delete
[1379] Fix | Delete
_deprecated_function( __FUNCTION__, '6.3.0', 'WP_Navigation_Fallback::create_classic_menu_fallback' );
[1380] Fix | Delete
[1381] Fix | Delete
// See if we have a classic menu.
[1382] Fix | Delete
$classic_nav_menu = block_core_navigation_get_classic_menu_fallback();
[1383] Fix | Delete
[1384] Fix | Delete
if ( ! $classic_nav_menu ) {
[1385] Fix | Delete
return;
[1386] Fix | Delete
}
[1387] Fix | Delete
[1388] Fix | Delete
// If we have a classic menu then convert it to blocks.
[1389] Fix | Delete
$classic_nav_menu_blocks = block_core_navigation_get_classic_menu_fallback_blocks( $classic_nav_menu );
[1390] Fix | Delete
[1391] Fix | Delete
if ( empty( $classic_nav_menu_blocks ) ) {
[1392] Fix | Delete
return;
[1393] Fix | Delete
}
[1394] Fix | Delete
[1395] Fix | Delete
// Create a new navigation menu from the classic menu.
[1396] Fix | Delete
$wp_insert_post_result = wp_insert_post(
[1397] Fix | Delete
array(
[1398] Fix | Delete
'post_content' => $classic_nav_menu_blocks,
[1399] Fix | Delete
'post_title' => $classic_nav_menu->name,
[1400] Fix | Delete
'post_name' => $classic_nav_menu->slug,
[1401] Fix | Delete
'post_status' => 'publish',
[1402] Fix | Delete
'post_type' => 'wp_navigation',
[1403] Fix | Delete
),
[1404] Fix | Delete
true // So that we can check whether the result is an error.
[1405] Fix | Delete
);
[1406] Fix | Delete
[1407] Fix | Delete
if ( is_wp_error( $wp_insert_post_result ) ) {
[1408] Fix | Delete
return;
[1409] Fix | Delete
}
[1410] Fix | Delete
[1411] Fix | Delete
// Fetch the most recently published navigation which will be the classic one created above.
[1412] Fix | Delete
return block_core_navigation_get_most_recently_published_navigation();
[1413] Fix | Delete
}
[1414] Fix | Delete
[1415] Fix | Delete
/**
[1416] Fix | Delete
* Finds the most recently published `wp_navigation` Post.
[1417] Fix | Delete
*
[1418] Fix | Delete
* @since 6.1.0
[1419] Fix | Delete
*
[1420] Fix | Delete
* @deprecated 6.3.0 Use WP_Navigation_Fallback::get_most_recently_published_navigation() instead.
[1421] Fix | Delete
*
[1422] Fix | Delete
* @return WP_Post|null the first non-empty Navigation or null.
[1423] Fix | Delete
*/
[1424] Fix | Delete
function block_core_navigation_get_most_recently_published_navigation() {
[1425] Fix | Delete
[1426] Fix | Delete
_deprecated_function( __FUNCTION__, '6.3.0', 'WP_Navigation_Fallback::get_most_recently_published_navigation' );
[1427] Fix | Delete
[1428] Fix | Delete
// Default to the most recently created menu.
[1429] Fix | Delete
$parsed_args = array(
[1430] Fix | Delete
'post_type' => 'wp_navigation',
[1431] Fix | Delete
'no_found_rows' => true,
[1432] Fix | Delete
'update_post_meta_cache' => false,
[1433] Fix | Delete
'update_post_term_cache' => false,
[1434] Fix | Delete
'order' => 'DESC',
[1435] Fix | Delete
'orderby' => 'date',
[1436] Fix | Delete
'post_status' => 'publish',
[1437] Fix | Delete
'posts_per_page' => 1, // get only the most recent.
[1438] Fix | Delete
);
[1439] Fix | Delete
[1440] Fix | Delete
$navigation_post = new WP_Query( $parsed_args );
[1441] Fix | Delete
if ( count( $navigation_post->posts ) > 0 ) {
[1442] Fix | Delete
return $navigation_post->posts[0];
[1443] Fix | Delete
}
[1444] Fix | Delete
[1445] Fix | Delete
return null;
[1446] Fix | Delete
}
[1447] Fix | Delete
[1448] Fix | Delete
/**
[1449] Fix | Delete
* Accepts the serialized markup of a block and its inner blocks, and returns serialized markup of the inner blocks.
[1450] Fix | Delete
*
[1451] Fix | Delete
* @since 6.5.0
[1452] Fix | Delete
*
[1453] Fix | Delete
* @param string $serialized_block The serialized markup of a block and its inner blocks.
[1454] Fix | Delete
* @return string
[1455] Fix | Delete
*/
[1456] Fix | Delete
function block_core_navigation_remove_serialized_parent_block( $serialized_block ) {
[1457] Fix | Delete
$start = strpos( $serialized_block, '-->' ) + strlen( '-->' );
[1458] Fix | Delete
$end = strrpos( $serialized_block, '<!--' );
[1459] Fix | Delete
return substr( $serialized_block, $start, $end - $start );
[1460] Fix | Delete
}
[1461] Fix | Delete
[1462] Fix | Delete
/**
[1463] Fix | Delete
* Mock a parsed block for the Navigation block given its inner blocks and the `wp_navigation` post object.
[1464] Fix | Delete
* The `wp_navigation` post's `_wp_ignored_hooked_blocks` meta is queried to add the `metadata.ignoredHookedBlocks` attribute.
[1465] Fix | Delete
*
[1466] Fix | Delete
* @since 6.5.0
[1467] Fix | Delete
*
[1468] Fix | Delete
* @param array $inner_blocks Parsed inner blocks of a Navigation block.
[1469] Fix | Delete
* @param WP_Post $post `wp_navigation` post object corresponding to the block.
[1470] Fix | Delete
*
[1471] Fix | Delete
* @return array the normalized parsed blocks.
[1472] Fix | Delete
*/
[1473] Fix | Delete
function block_core_navigation_mock_parsed_block( $inner_blocks, $post ) {
[1474] Fix | Delete
$attributes = array();
[1475] Fix | Delete
[1476] Fix | Delete
if ( isset( $post->ID ) ) {
[1477] Fix | Delete
$ignored_hooked_blocks = get_post_meta( $post->ID, '_wp_ignored_hooked_blocks', true );
[1478] Fix | Delete
if ( ! empty( $ignored_hooked_blocks ) ) {
[1479] Fix | Delete
$ignored_hooked_blocks = json_decode( $ignored_hooked_blocks, true );
[1480] Fix | Delete
$attributes['metadata'] = array(
[1481] Fix | Delete
'ignoredHookedBlocks' => $ignored_hooked_blocks,
[1482] Fix | Delete
);
[1483] Fix | Delete
}
[1484] Fix | Delete
}
[1485] Fix | Delete
[1486] Fix | Delete
$mock_anchor_parent_block = array(
[1487] Fix | Delete
'blockName' => 'core/navigation',
[1488] Fix | Delete
'attrs' => $attributes,
[1489] Fix | Delete
'innerBlocks' => $inner_blocks,
[1490] Fix | Delete
'innerContent' => array_fill( 0, count( $inner_blocks ), null ),
[1491] Fix | Delete
);
[1492] Fix | Delete
[1493] Fix | Delete
return $mock_anchor_parent_block;
[1494] Fix | Delete
}
[1495] Fix | Delete
[1496] Fix | Delete
/**
[1497] Fix | Delete
* Insert hooked blocks into a Navigation block.
[1498] Fix | Delete
*
[1499] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function