Проблема: < /h1>
Это приводит к общей странице Структуры: страница продуктов (родитель) и страница сведений о продукте (ребенок), которая в меню навигации показывает в виде раскрывающегося меню из продуктов. Пример: пример навигации.
Я не могу найти способ либо ввести навигацию произвольно, заменить блоки в нем, либо определить шорткод. (См. Позже, что я попробовал).
Что я хочу:
Я хочу иметь возможность получить доступ к меню навигации, чтобы динамически добавлять ссылки в выпадающем списке продуктов, поэтому я могу добавить запись для каждого продукта и/или группировать их свойствами, например, у каждого продукта есть свойство «размер», и я могу группировать продукты, основанные на этом свойстве. Попробовал:
Я попытался восстановить весь навигационный блок, но я просто не мог даже перехватить его и супер грязный код.
Затем я попытался зацикнуть блоки с визуализированной страницы, но это тоже не сработало. Мой собственный контент, вероятно, шорткод. Прямо сейчас я смог добавить шорт -код в меню навигации, но только в конце с помощью смещения: < /p>
Код: Выделить всё
function theme_render_shortcode_block() {
return do_shortcode( '[navigation_product_list]' );
}
function theme_register_shortcode_block() {
if ( function_exists( 'register_block_type' ) ) {
register_block_type( 'theme/products-shortcode-block', array(
'title' => 'Products Shortcode Block',
'icon' => 'shortcode',
'render_callback' => 'theme_render_shortcode_block'
) );
}
}
add_action( 'init', 'theme_register_shortcode_block' );
add_filter( 'block_core_navigation_render_inner_blocks', function( $inner_blocks ) {
$menu_item = new WP_Block( array(
'blockName' => 'theme/products-shortcode-block'
) );
$inner_blocks->offsetSet( null, $menu_item );
return $inner_blocks;
} );
add_filter( 'block_core_navigation_render_inner_blocks', function( $inner_blocks ) {
$target_menu_item_label = 'Product Details';
foreach ( $inner_blocks as $index => $block ) {
// Find the block with "Product Details" label.
if ( isset($block->parsed_block['attrs']['label']) && $block->parsed_block['attrs']['label'] === $target_menu_item_label ) {
// Replace it with shortcode block.
$replacement_block = new WP_Block( array(
'blockName' => 'theme/products-shortcode-block'
) );
$inner_blocks[ $index ] = $replacement_block;
break;
}
}
return $inner_blocks;
} );
< /code>
Я попытался нацелить этикетку «Детали продукта», но он ничего не делает.
Для контекста блок-блок-шорт-код продуктов выполняет короткий код, который создает с динамическим содержанием на основе таблицы баз данных. Я хочу поместить это в правильное место.
Подробнее здесь: https://stackoverflow.com/questions/797 ... ation-menu