晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/tabatabaei/.trash/wp-content.1/themes/blockbase/inc/ |
Upload File : |
<?php
// We should only change the render of the navigtion block
// to social links in the following conditions.
function blockbase_condition_to_render_social_menu( $block_content, $block ) {
// The block should be a navigation block.
if ( 'core/navigation' !== $block['blockName'] ) {
return false;
}
// The theme should have a menu defined at the social location.
if ( ! has_nav_menu( 'social' ) ) {
return false;
}
// The block should be empty (no custom menu assigned)
if ( ! empty($block['attrs']['navigationMenuId']) || ! empty($block['attrs']['ref']) ) {
return false;
}
// The block should have the class 'social-links'.
if ( empty( $block['attrs']['className'] ) ) {
return false;
}
if ( ! str_contains( $block['attrs']['className'], 'social-links' ) ) {
return false;
}
return true;
}
function blockbase_theme_has_navigation_social_links_settings( $theme_data ) {
return $theme_data
&& array_key_exists( 'settings', $theme_data )
&& array_key_exists( 'custom', $theme_data['settings'] )
&& array_key_exists( 'navigation/social-links', $theme_data['settings']['custom'] )
&& array_key_exists( 'color', $theme_data['settings']['custom']['navigation/social-links'] )
&& array_key_exists( 'text', $theme_data['settings']['custom']['navigation/social-links']['color'] );
}
function get_social_menu_as_social_links_block( $block ) {
$social_links_location = 'social';
$nav_menu_locations = get_nav_menu_locations();
$social_menu_id = $nav_menu_locations[ $social_links_location ];
$class_name = 'is-style-logos-only';
if ( ! empty( $block['attrs']['itemsJustification'] ) ) {
$class_name .= ' items-justified-' . $block['attrs']['itemsJustification'];
}
// Get color for social icons.
$theme_data = WP_Theme_JSON_Resolver_Gutenberg::get_merged_data()->get_raw_data();
$social_links_icon_color_value = 'var(--wp--custom--color--primary)';
$social_links_icon_color = 'primary';
if ( blockbase_theme_has_navigation_social_links_settings( $theme_data ) ) {
$social_links_icon_color_value = $theme_data['settings']['custom']['navigation/social-links']['color']['text'];
$social_links_icon_color = preg_replace( '/var\(--wp--custom--color--(.+)\)/', '$0 --> $2 $1', $social_links_icon_color_value );
}
$social_links_content = '<!-- wp:social-links {"iconColor":"' . $social_links_icon_color . '","iconColorValue":"' . $social_links_icon_color_value . '","className":"' . $class_name . '"} --><ul class="wp-block-social-links has-icon-color ' . $class_name . '">';
$menu = wp_get_nav_menu_items( $social_menu_id );
if ( $menu ) {
foreach ( $menu as $menu_item ) {
$service_name = preg_replace( '/(-[0-9]+)/', '', $menu_item->post_name );
$service_name = preg_replace( '/(-profile)/', '', $service_name );
$social_links_content .= '<!-- wp:social-link {"url":"' . $menu_item->url . '","service":"' . $service_name . '"} /-->';
}
}
$social_links_content .= '</ul><!-- /wp:social-links -->';
return do_blocks( $social_links_content );
}
function append_social_links_block( $parent_content, $social_links_block ) {
if ( empty( $parent_content ) ) {
return $social_links_block;
}
$dom = new domDocument;
$domXPath = new DomXPath( $dom );
// Since the nav block uses HTML5 element names, we need to suppress the warnings it sends when we loadHTML with HTML5 elements.
libxml_use_internal_errors( true );
$dom->loadHTML( '<?xml encoding="utf-8" ?>' . $parent_content );
$wp_block_navigation__container = $dom->getElementsByTagName( 'ul' )->item( 0 )->parentNode;
$social_links_node = $dom->createDocumentFragment();
$social_links_node->appendXML( $social_links_block );
if ( ! empty( $wp_block_navigation__container ) ) {
$wp_block_navigation__container->appendChild( $social_links_node );
}
$navigation_block = $dom->getElementsByTagName( 'nav' )->item( 0 );
return $dom->saveXML( $navigation_block );
}
function blockbase_social_menu_render( $block_content, $block ) {
if ( blockbase_condition_to_render_social_menu( $block_content, $block ) ) {
$social_links_block = get_social_menu_as_social_links_block( $block );
return append_social_links_block( $block_content, $social_links_block );
}
return $block_content;
}
/**
* Hijack the render of the menu block to inject a social menu.
*/
add_filter( 'render_block', 'blockbase_social_menu_render', 10, 2 );