You are here

categories.php in Gutenberg 8

Same filename and directory in other branches
  1. 8.2 vendor/gutenberg/block-library/blocks/categories.php

File

vendor/gutenberg/block-library/blocks/categories.php
View source
<?php

/**
 * Server-side rendering of the `core/categories` block.
 *
 * @package WordPress
 */

/**
 * Renders the `core/categories` block on server.
 *
 * @param array $attributes The block attributes.
 *
 * @return string Returns the categories list/dropdown markup.
 */
function gutenberg_render_block_core_categories($attributes) {
  static $block_id = 0;
  $block_id++;
  $args = array(
    'echo' => false,
    'hierarchical' => !empty($attributes['showHierarchy']),
    'orderby' => 'name',
    'show_count' => !empty($attributes['showPostCounts']),
    'title_li' => '',
  );
  if (!empty($attributes['displayAsDropdown'])) {
    $id = 'wp-block-categories-' . $block_id;
    $args['id'] = $id;
    $args['show_option_none'] = __('Select Category');
    $wrapper_markup = '<div class="%1$s">%2$s</div>';
    $items_markup = wp_dropdown_categories($args);
    $type = 'dropdown';
    if (!is_admin()) {
      $wrapper_markup .= gutenberg_build_dropdown_script_block_core_categories($id);
    }
  }
  else {
    $wrapper_markup = '<ul class="%1$s">%2$s</ul>';
    $items_markup = wp_list_categories($args);
    $type = 'list';
  }
  $class = "wp-block-categories wp-block-categories-{$type}";
  if (isset($attributes['align'])) {
    $class .= " align{$attributes['align']}";
  }
  if (isset($attributes['className'])) {
    $class .= " {$attributes['className']}";
  }
  return sprintf($wrapper_markup, esc_attr($class), $items_markup);
}

/**
 * Generates the inline script for a categories dropdown field.
 *
 * @param string $dropdown_id ID of the dropdown field.
 *
 * @return string Returns the dropdown onChange redirection script.
 */
function gutenberg_build_dropdown_script_block_core_categories($dropdown_id) {
  ob_start();
  ?>
	<script type='text/javascript'>
	/* <![CDATA[ */
	( function() {
		var dropdown = document.getElementById( '<?php

  echo esc_js($dropdown_id);
  ?>' );
		function onCatChange() {
			if ( dropdown.options[ dropdown.selectedIndex ].value > 0 ) {
				location.href = "<?php

  echo home_url();
  ?>/?cat=" + dropdown.options[ dropdown.selectedIndex ].value;
			}
		}
		dropdown.onchange = onCatChange;
	})();
	/* ]]> */
	</script>
	<?php

  return ob_get_clean();
}

/**
 * Registers the `core/categories` block on server.
 */
function gutenberg_register_block_core_categories() {
  register_block_type('core/categories', array(
    'attributes' => array(
      'align' => array(
        'type' => 'string',
        'enum' => array(
          'left',
          'center',
          'right',
          'wide',
          'full',
        ),
      ),
      'className' => array(
        'type' => 'string',
      ),
      'displayAsDropdown' => array(
        'type' => 'boolean',
        'default' => false,
      ),
      'showHierarchy' => array(
        'type' => 'boolean',
        'default' => false,
      ),
      'showPostCounts' => array(
        'type' => 'boolean',
        'default' => false,
      ),
    ),
    'render_callback' => 'gutenberg_render_block_core_categories',
  ));
}
add_action('init', 'gutenberg_register_block_core_categories', 20);

Functions

Namesort descending Description
gutenberg_build_dropdown_script_block_core_categories Generates the inline script for a categories dropdown field.
gutenberg_register_block_core_categories Registers the `core/categories` block on server.
gutenberg_render_block_core_categories Renders the `core/categories` block on server.