/**
  * Renders an alternate language HTML link tag for each available translation into the HTML head.
  *
  * @since   3.0.0
  * @wp-hook wp_head
  *
  * @return bool Whether or not headers have been sent.
  */
 public function render()
 {
     $translations = $this->translations->to_array();
     if (!$translations) {
         return false;
     }
     array_walk($translations, function ($url, $language) {
         $html_link_tag = sprintf('<link rel="alternate" hreflang="%1$s" href="%2$s">', esc_attr($language), esc_url($url));
         /**
          * Filters the output of the hreflang links in the HTML head.
          *
          * @since 3.0.0
          *
          * @param string $html_link_tag Alternate language HTML link tag.
          * @param string $language      HTTP language code (e.g., "en-US").
          * @param string $url           Target URL.
          */
         echo apply_filters('multilingualpress.hreflang_html_link_tag', $html_link_tag, $language, $url);
     });
     return true;
 }
 /**
  * Sends an alternate language HTTP header for each available translation.
  *
  * @since   3.0.0
  * @wp-hook template_redirect
  *
  * @return bool Whether or not headers have been sent.
  */
 public function send()
 {
     $translations = $this->translations->to_array();
     if (!$translations) {
         return false;
     }
     array_walk($translations, function ($url, $language) {
         $header = sprintf('Link: <%1$s>; rel="alternate"; hreflang="%2$s"', esc_url($url), esc_attr($language));
         /**
          * Filters the output of the hreflang links in the HTTP header.
          *
          * @since 3.0.0
          *
          * @param string $header   Alternate language HTTP header.
          * @param string $language HTTP language code (e.g., "en-US").
          * @param string $url      Target URL.
          */
         $header = (string) apply_filters('multilingualpress.hreflang_http_header', $header, $language, $url);
         if ($header) {
             header($header, false);
         }
     });
     return true;
 }