-
Notifications
You must be signed in to change notification settings - Fork 358
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Blockbase: Add social navigation to blockbase themes (#4482)
* Blockbase: Add social navigation to blockbase themes * Add social navigation links to primary navigation * move to a different file * add missing file * suppress warnings for HTML5 elements * only append social links to a navigation block if the block opts in * Fix fatal * Removed requirement to have social parent container be primary menu (or even have content) * Fix layout for social nav * Update the structure of the social links when appended to match the way that the navigation block works Co-authored-by: Jason Crist <jcrist@pbking.com>
- Loading branch information
Showing
19 changed files
with
130 additions
and
131 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
<?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 have a social links attribute. | ||
if ( empty( $block['attrs']['__unstableSocialLinks'] ) ) { | ||
return false; | ||
} | ||
|
||
return true; | ||
} | ||
|
||
function get_social_menu_as_social_links_block( $block ) { | ||
if ( empty( $block['attrs']['__unstableSocialLinks'] ) ) { | ||
return false; | ||
} | ||
|
||
$social_links_location = $block['attrs']['__unstableSocialLinks']; | ||
$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']; | ||
} | ||
$social_links_content = '<!-- wp:social-links {"iconColor":"primary","iconColorValue":"var(--wp--custom--color--primary)","className":"' . $class_name . '"} --><ul class="wp-block-social-links has-icon-color ' . $class_name . '">'; | ||
$menu = wp_get_nav_menu_items( $social_menu_id ); | ||
foreach ($menu as $menu_item) { | ||
$service_name = preg_replace( '/(-[0-9]+)/', '', $menu_item->post_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( $parent_content ); | ||
$wp_block_navigation__container = $dom->getElementsByTagName('ul')->item( 0 )->parentNode; | ||
$social_links_node = $dom->createDocumentFragment(); | ||
$social_links_node->appendXML( $social_links_block ); | ||
$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 ); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.