[ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Server-side rendering of the `core/footnotes` block. 4 * 5 * @package WordPress 6 */ 7 8 /** 9 * Renders the `core/footnotes` block on the server. 10 * 11 * @since 6.3.0 12 * 13 * @param array $attributes Block attributes. 14 * @param string $content Block default content. 15 * @param WP_Block $block Block instance. 16 * 17 * @return string Returns the HTML representing the footnotes. 18 */ 19 function render_block_core_footnotes( $attributes, $content, $block ) { 20 // Bail out early if the post ID is not set for some reason. 21 if ( empty( $block->context['postId'] ) ) { 22 return ''; 23 } 24 25 if ( post_password_required( $block->context['postId'] ) ) { 26 return; 27 } 28 29 $footnotes = get_post_meta( $block->context['postId'], 'footnotes', true ); 30 31 if ( ! $footnotes ) { 32 return; 33 } 34 35 $footnotes = json_decode( $footnotes, true ); 36 37 if ( ! is_array( $footnotes ) || count( $footnotes ) === 0 ) { 38 return ''; 39 } 40 41 $wrapper_attributes = get_block_wrapper_attributes(); 42 $footnote_index = 1; 43 44 $block_content = ''; 45 46 foreach ( $footnotes as $footnote ) { 47 // Translators: %d: Integer representing the number of return links on the page. 48 $aria_label = sprintf( __( 'Jump to footnote reference %1$d' ), $footnote_index ); 49 $block_content .= sprintf( 50 '<li id="%1$s">%2$s <a href="#%1$s-link" aria-label="%3$s">↩︎</a></li>', 51 $footnote['id'], 52 $footnote['content'], 53 $aria_label 54 ); 55 ++$footnote_index; 56 } 57 58 return sprintf( 59 '<ol %1$s>%2$s</ol>', 60 $wrapper_attributes, 61 $block_content 62 ); 63 } 64 65 /** 66 * Registers the `core/footnotes` block on the server. 67 * 68 * @since 6.3.0 69 */ 70 function register_block_core_footnotes() { 71 register_block_type_from_metadata( 72 __DIR__ . '/footnotes', 73 array( 74 'render_callback' => 'render_block_core_footnotes', 75 ) 76 ); 77 } 78 add_action( 'init', 'register_block_core_footnotes' ); 79 80 81 /** 82 * Registers the footnotes meta field required for footnotes to work. 83 * 84 * @since 6.5.0 85 */ 86 function register_block_core_footnotes_post_meta() { 87 $post_types = get_post_types( array( 'show_in_rest' => true ) ); 88 foreach ( $post_types as $post_type ) { 89 // Only register the meta field if the post type supports the editor, custom fields, and revisions. 90 if ( 91 post_type_supports( $post_type, 'editor' ) && 92 post_type_supports( $post_type, 'custom-fields' ) && 93 post_type_supports( $post_type, 'revisions' ) 94 ) { 95 register_post_meta( 96 $post_type, 97 'footnotes', 98 array( 99 'show_in_rest' => true, 100 'single' => true, 101 'type' => 'string', 102 'revisions_enabled' => true, 103 ) 104 ); 105 } 106 } 107 } 108 /* 109 * Most post types are registered at priority 10, so use priority 20 here in 110 * order to catch them. 111 */ 112 add_action( 'init', 'register_block_core_footnotes_post_meta', 20 ); 113 114 /** 115 * Adds the footnotes field to the revisions display. 116 * 117 * @since 6.3.0 118 * 119 * @param array $fields The revision fields. 120 * @return array The revision fields. 121 */ 122 function wp_add_footnotes_to_revision( $fields ) { 123 $fields['footnotes'] = __( 'Footnotes' ); 124 return $fields; 125 } 126 add_filter( '_wp_post_revision_fields', 'wp_add_footnotes_to_revision' ); 127 128 /** 129 * Gets the footnotes field from the revision for the revisions screen. 130 * 131 * @since 6.3.0 132 * 133 * @param string $revision_field The field value, but $revision->$field 134 * (footnotes) does not exist. 135 * @param string $field The field name, in this case "footnotes". 136 * @param object $revision The revision object to compare against. 137 * @return string The field value. 138 */ 139 function wp_get_footnotes_from_revision( $revision_field, $field, $revision ) { 140 return get_metadata( 'post', $revision->ID, $field, true ); 141 } 142 add_filter( '_wp_post_revision_field_footnotes', 'wp_get_footnotes_from_revision', 10, 3 );
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated : Tue Dec 24 08:20:01 2024 | Cross-referenced by PHPXref |