/**
  * Filter page's title to feature letters, meta, value in archives
  * pages' titles. Hooked to 'the_title' and 'wp_title' filters.
  * 
  * @since    2.1.1
  * 
  * @param    string        $title Current title
  * @param    int|string    $id Current page ID if current filter if 'the_title', separator if filter is 'wp_title'
  * 
  * @return   string    
  */
 public function movie_archives_title($title, $id = null)
 {
     // Exclude admin
     if (is_admin()) {
         return $title;
     }
     // 'wp_title' filter second parameter is separator, not id
     $filter = current_filter();
     $sep = ' | ';
     if ('wp_title' == $filter) {
         $id = get_the_ID();
     }
     // Exclude not-archive pages
     if (!in_array($id, $this->pages)) {
         return $title;
     }
     $is_movie = $id == $this->pages['movie'];
     $translate = '1' == wpmoly_o('rewrite-enable');
     $rewrite_movie = '1' == wpmoly_o('movie-archives-title-rewrite');
     $rewrite_taxonomy = '1' == wpmoly_o('tax-archives-title-rewrite');
     if ($is_movie && !$rewrite_movie || !$is_movie && !$rewrite_taxonomy) {
         return $title;
     }
     $page = array_search($id, $this->pages);
     $titles = array('movie' => __('Movies', 'wpmovielibrary'), 'collection' => __('Collections', 'wpmovielibrary'), 'genre' => __('Genres', 'wpmovielibrary'), 'actor' => __('Actors', 'wpmovielibrary'));
     /**
      * Filter Archive Pages Titles
      * 
      * @since    2.1.1
      * 
      * @param    array    $titles Default Archive Pages titles
      * 
      * @return   array    Filtered titles
      */
     $titles = apply_filters('wpmoly_filter_archive_pages_titles', $titles);
     /**
      * Filter Archive Page's default title
      * 
      * @since    2.1.1
      * 
      * @param    string    $title Current Archive Page title
      * @param    int       $id Current Archive Page Post ID
      * 
      * @return   string    Filtered title
      */
     $title = apply_filters("wpmoly_filter_{$page}_archive_page_default_title", $titles[$page], $id);
     if (!is_single($id) && !is_page($id) || 'the_title' == $filter && !in_the_loop()) {
         return $title;
     }
     $meta = get_query_var('meta');
     $detail = get_query_var('detail');
     $value = get_query_var('value');
     $sorting = get_query_var('sorting');
     $_detail = '';
     $_meta = '';
     if ($is_movie && $rewrite_movie) {
         if ('' != $meta) {
             if ($translate) {
                 $meta = WPMOLY_L10n::untranslate_rewrite($meta);
             }
             $supported = WPMOLY_Settings::get_supported_movie_meta();
             if (isset($supported[$meta])) {
                 $_meta = $supported[$meta]['title'];
             }
             if ('' != $value) {
                 $value = WPMOLY_L10n::untranslate_rewrite($value);
             }
         } elseif ('' != $detail) {
             if ($translate) {
                 $detail = WPMOLY_L10n::untranslate_rewrite($detail);
             }
             $supported = WPMOLY_Settings::get_supported_movie_detail();
             if (isset($supported[$detail])) {
                 $_detail = $supported[$detail]['title'];
             }
             if ('' != $value) {
                 $value = WPMOLY_L10n::untranslate_rewrite($value);
             }
         }
         if ('production_countries' == $meta) {
             $value = WPMOLY_L10n::get_country_standard_name($value);
             $value = __($value, 'wpmovielibrary-iso');
         } else {
             if ('spoken_languages' == $meta) {
                 $value = WPMOLY_L10n::get_language_standard_name($value);
                 $value = __($value, 'wpmovielibrary-iso');
             } else {
                 $value = __($value, 'wpmovielibrary');
             }
         }
         if ('' == $_meta && '' != $_detail) {
             $_meta = $_detail;
         }
         if ('' != $_meta && '' == $value) {
             $title = sprintf(__('Movies by %s', 'wpmovielibrary'), $_meta);
         } elseif ('' != $_meta && '' != $value) {
             $title = sprintf(__('Movies by %s: %s', 'wpmovielibrary'), ucwords($_meta), $value);
         } else {
             $title = __('Movies', 'wpmovielibrary');
         }
     }
     if ('' != $sorting) {
         $sorting = self::parse_query_vars(compact('sorting'));
         if (isset($sorting['letter']) && '' != $sorting['letter']) {
             $title .= sprintf(' − %s ', sprintf(__('Letter %s', 'wpmovielibrary'), $sorting['letter']));
         }
         if (isset($sorting['paged']) && '' != $sorting['paged'] && 'wp_title' == $filter) {
             $title .= sprintf(__(' %s Page %d ', 'wpmovielibrary'), $sep, $sorting['paged']);
         }
     }
     /**
      * Filter Page's Post title as used in (get_)the_title()
      * 
      * @since    2.1.1
      * 
      * @param    string    $title Current Archive Page title
      * @param    int       $id Current Archive Page Post ID
      * 
      * @return   string    Filtered title
      */
     $title = apply_filters("wpmoly_filter_{$page}_archive_page_title", $title, $id);
     if ('wp_title' == $filter) {
         $title = str_replace(array(' : ', ' − '), $sep, $title) . $sep;
         /**
          * Filter Page's main title as used in wp_title()
          * 
          * @since    2.1.1
          * 
          * @param    string    $title Current Archive Page title
          * @param    int       $id Current Archive Page Post ID
          * 
          * @return   string    Filtered title
          */
         $title = apply_filters("wpmoly_filter_{$page}_archive_page_wp_title", $title, $id);
     }
     return $title;
 }