[ Index ]

PHP Cross Reference of WordPress

title

Body

[close]

/wp-includes/blocks/ -> categories.php (source)

   1  <?php
   2  /**
   3   * Server-side rendering of the `core/categories` block.
   4   *
   5   * @package WordPress
   6   */
   7  
   8  /**
   9   * Renders the `core/categories` block on server.
  10   *
  11   * @param array $attributes The block attributes.
  12   *
  13   * @return string Returns the categories list/dropdown markup.
  14   */
  15  function render_block_core_categories( $attributes ) {
  16      static $block_id = 0;
  17      $block_id++;
  18  
  19      $args = array(
  20          'echo'         => false,
  21          'hierarchical' => ! empty( $attributes['showHierarchy'] ),
  22          'orderby'      => 'name',
  23          'show_count'   => ! empty( $attributes['showPostCounts'] ),
  24          'title_li'     => '',
  25      );
  26  
  27      if ( ! empty( $attributes['displayAsDropdown'] ) ) {
  28          $id                       = 'wp-block-categories-' . $block_id;
  29          $args['id']               = $id;
  30          $args['show_option_none'] = __( 'Select Category' );
  31          $wrapper_markup           = '<div %1$s>%2$s</div>';
  32          $items_markup             = wp_dropdown_categories( $args );
  33          $type                     = 'dropdown';
  34  
  35          if ( ! is_admin() ) {
  36              // Inject the dropdown script immediately after the select dropdown.
  37              $items_markup = preg_replace(
  38                  '#(?<=</select>)#',
  39                  build_dropdown_script_block_core_categories( $id ),
  40                  $items_markup,
  41                  1
  42              );
  43          }
  44      } else {
  45          $wrapper_markup = '<ul %1$s>%2$s</ul>';
  46          $items_markup   = wp_list_categories( $args );
  47          $type           = 'list';
  48      }
  49  
  50      $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => "wp-block-categories-{$type}" ) );
  51  
  52      return sprintf(
  53          $wrapper_markup,
  54          $wrapper_attributes,
  55          $items_markup
  56      );
  57  }
  58  
  59  /**
  60   * Generates the inline script for a categories dropdown field.
  61   *
  62   * @param string $dropdown_id ID of the dropdown field.
  63   *
  64   * @return string Returns the dropdown onChange redirection script.
  65   */
  66  function build_dropdown_script_block_core_categories( $dropdown_id ) {
  67      ob_start();
  68      ?>
  69      <script type='text/javascript'>
  70      /* <![CDATA[ */
  71      ( function() {
  72          var dropdown = document.getElementById( '<?php echo esc_js( $dropdown_id ); ?>' );
  73  		function onCatChange() {
  74              if ( dropdown.options[ dropdown.selectedIndex ].value > 0 ) {
  75                  location.href = "<?php echo home_url(); ?>/?cat=" + dropdown.options[ dropdown.selectedIndex ].value;
  76              }
  77          }
  78          dropdown.onchange = onCatChange;
  79      })();
  80      /* ]]> */
  81      </script>
  82      <?php
  83      return ob_get_clean();
  84  }
  85  
  86  /**
  87   * Registers the `core/categories` block on server.
  88   */
  89  function register_block_core_categories() {
  90      register_block_type_from_metadata(
  91          __DIR__ . '/categories',
  92          array(
  93              'render_callback' => 'render_block_core_categories',
  94          )
  95      );
  96  }
  97  add_action( 'init', 'register_block_core_categories' );


Generated: Wed Oct 21 01:00:04 2020 Cross-referenced by PHPXref 0.7.1