💥 TRENDING: Changeset/ - HD Photos!

Changeset 1807041


Ignore:
Timestamp:
01/22/2018 11:38:26 AM (8 years ago)
Author:
Breno Alves
Message:

Adding 0.7.0 release files

Location:
monk/trunk
Files:
1 added
2 deleted
26 edited

Legend:

Unmodified
Added
Removed
  • monk/trunk/CHANGELOG.md

    r1734509 r1807041  
    11## Changelog
     2
     3- **[0.7.0]**
     4    + Added hreflang tags
     5    + Added comments filter by post language on admin
     6    + Added monk_get_translations function that can be used to create custom language switchers.
     7    + Changed database queries to improve performance
     8    + Fixed static front page bug
     9    + Fixed custom meta queries overwrite
     10    + Fixed syntax error on plugin activation for older PHP versions.
     11    + Fixed terms filter button was not showing.
     12    + Fixed incorrectly language options when opening last edited menu.
    213
    314- **[0.6.0]**
  • monk/trunk/README.md

    r1732422 r1807041  
    2222
    2323If you find any error or have suggestions, contribute with them to improve Monk. They are all welcome, but before anything please take a minute to read our [contributor guidelines](https://github.com/brenoalvs/monk/blob/master/.github/CONTRIBUITING.md) and [code of conduct](https://github.com/brenoalvs/monk/blob/master/.github/code_of_conduct.md).
     24
     25## Tests ##
     26
     27Tests are in `tests` directory. To run them you need to install some requirements and configure the test suite.
     28
     291. Install PHPUnit (https://github.com/sebastianbergmann/phpunit#installation).
     302. Install WP-CLI (http://wp-cli.org/#install).
     313. `cd` to plugin's directory.
     324. Install and configure the test environment running `bin/install-wp-tests.sh <db-name> <db-user> <db-pass> [db-host] [wp-version]`. E.g.: `bin/install-wp-tests.sh wordpress_test root '' localhost latest`
     335. Run `phpunit` and let the tests begin!
     34
     35*Note:* Be sure to have `svn` command installed on your system.
     36
     37*Note:* If anything fails running install-wp-tests.sh you'll have to delete /tmp/wordpress* and drop the wordpress_test database to undo what the script does.
  • monk/trunk/README.txt

    r1734509 r1807041  
    33Tags: multilingual, translation, language, multilanguage, international, localization
    44Requires at least: 4.6
    5 Tested up to: 4.8.1
     5Tested up to: 4.9.2
    66Requires PHP: 5.4
    7 Stable tag: 0.6.0
     7Stable tag: 0.7.0
    88License: GPLv2 or later
    99License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    7272== Changelog ==
    7373
     74= [0.7.0] =
     75* Added hreflang tags
     76* Added comments filter by post language on admin
     77* Added monk_get_translations function that can be used to create custom language switchers
     78* Changed database queries to improve performance
     79* Fixed static front page bug
     80* Fixed custom meta queries overwrite
     81* Fixed syntax error on plugin activation for older PHP versions
     82* Fixed terms filter button was not showing
     83* Fixed incorrectly language options when opening last edited menu
     84
    7485= [0.6.0] =
    7586* Changed the notification system for when Monk settings page gets updated
     
    7889* Added the filter monk_custom_language_slug to let users change language slugs
    7990
    80 = [0.5.2] =
    81 * Fixed bug when a post was restored from trash
    82 * Fixed the default category english translation
    83 * Fixed bug when "All languages" is selected in the language selector of post and pages
    84 
    85 = [0.5.1] =
    86 * Fixed bug on medias update process
    87 * Fixed accessibility attributes on admin controls.
    88 * Fixed persistent language filter when post type has no posts.
    89 
    90 = [0.5.0] =
    91 * Added site title and description translation
    92 * Added shortcode to retrieve translation links
    93 * Added the 'uncategorized' category translations
    94 * Fixed custom taxonomies links on language switcher
    95 * Fixed medias filter by language on post edit pages
    96 
    9791[See changelog for older versions](https://raw.githubusercontent.com/brenoalvs/monk/master/CHANGELOG.md)
    9892
  • monk/trunk/admin/class-monk-admin.php

    r1734509 r1807041  
    3636
    3737    /**
     38     * The default language of the plugin.
     39     *
     40     * @since    0.7.0
     41     * @access   private
     42     * @var      string    $default_language    The default language of the plugin.
     43     */
     44    private $default_language;
     45
     46    /**
     47     * The active languages of the plugin.
     48     *
     49     * @since    0.7.0
     50     * @access   private
     51     * @var      array $active_languages The active languages of the plugin.
     52     */
     53    private $active_languages;
     54
     55    /**
    3856     * Initialize the class and set its properties.
    3957     *
     58     * @since  0.1.0
     59     * @param  string $monk             The name of the plugin.
     60     * @param  string $version          The version of this plugin.
     61     * @param  string $default_language The default language of the plugin.
     62     * @param  array  $active_languages The active languages of the plugin.
     63     * @return  void
     64     */
     65    public function __construct( $monk, $version, $default_language, $active_languages ) {
     66        $this->monk             = $monk;
     67        $this->version          = $version;
     68        $this->default_language = $default_language;
     69        $this->active_languages = $active_languages;
     70    }
     71
     72    /**
     73     * Register the stylesheets for the admin area.
     74     *
    4075     * @since    0.1.0
    41      * @param    string $monk       The name of this plugin.
    42      * @param    string $version    The version of this plugin.
    43      * @return  void
    44      */
    45     public function __construct( $monk, $version ) {
    46 
    47         $this->monk = $monk;
    48         $this->version = $version;
    49 
    50     }
    51 
    52     /**
    53      * Register the stylesheets for the admin area.
    54      *
    55      * @since    0.1.0
    5676     * @return  void
    5777     */
    5878    public function enqueue_styles() {
    59         wp_enqueue_style( $this->monk, plugin_dir_url( __FILE__ ) . 'css/monk-admin.css', array(), $this->version, 'all' );
     79        wp_enqueue_style( strtolower( $this->monk ), plugin_dir_url( __FILE__ ) . 'css/monk-admin.css', array(), $this->version, 'all' );
    6080        wp_enqueue_style( 'monk-widgets', plugin_dir_url( __FILE__ ) . 'css/monk-widgets.css', array(), $this->version, 'all' );
    6181        wp_enqueue_style( 'monk-flags', plugin_dir_url( __FILE__ ) . 'css/monk-flags.css', array(), $this->version, 'all' );
     
    266286        switch ( $action ) {
    267287            case 'monk_tools':
    268                 $tools   = 'nav-tab-active';
     288                $tools = 'nav-tab-active';
    269289                break;
    270290            case 'monk_options':
     
    327347        $monk_languages   = monk_get_available_languages();
    328348        $site_name        = get_option( 'blogname' );
    329         $default_language = get_option( 'monk_default_language', false );
     349        $default_language = $this->default_language;
    330350        $default_slug     = $monk_languages[ $default_language ]['slug'];
    331         $active_languages = get_option( 'monk_active_languages', array() );
     351        $active_languages = $this->active_languages;
    332352
    333353        require_once plugin_dir_path( __FILE__ ) . '/partials/admin-monk-site-name-render.php';
     
    345365        $monk_languages   = monk_get_available_languages();
    346366        $site_description = get_option( 'blogdescription' );
    347         $default_language = get_option( 'monk_default_language', false );
     367        $default_language = $this->default_language;
    348368        $default_slug     = $monk_languages[ $default_language ]['slug'];
    349         $active_languages = get_option( 'monk_active_languages', array() );
     369        $active_languages = $this->active_languages;
    350370
    351371        require_once plugin_dir_path( __FILE__ ) . '/partials/admin-monk-site-description-render.php';
     
    359379     */
    360380    public function monk_default_language_render() {
    361         $default_language = get_option( 'monk_default_language', false );
     381        $default_language = $this->default_language;
    362382        $languages        = get_available_languages();
    363383        $args             = array(
     
    439459    public function monk_post_meta_box_field_render( $post ) {
    440460        global $current_screen;
    441         $monk_languages         = monk_get_available_languages();
    442         $monk_id                = get_post_meta( $post->ID, '_monk_post_translations_id', true );
    443         $post_default_language  = get_post_meta( $post->ID, '_monk_post_language', true );
    444         $site_default_language  = get_option( 'monk_default_language', false );
    445         $active_languages       = get_option( 'monk_active_languages', false );
     461        $monk_languages        = monk_get_available_languages();
     462        $monk_id               = get_post_meta( $post->ID, '_monk_post_translations_id', true );
     463        $post_default_language = get_post_meta( $post->ID, '_monk_post_language', true );
     464        $site_default_language = $this->default_language;
     465        $active_languages      = $this->active_languages;
    446466
    447467        if ( empty( $monk_id ) ) {
     
    456476        $lang = filter_input( INPUT_GET, 'lang' );
    457477        if ( isset( $lang ) ) {
    458             $lang    = sanitize_text_field( wp_unslash( $lang ) );
     478            $lang = sanitize_text_field( wp_unslash( $lang ) );
    459479        } else {
    460             $lang    = $site_default_language;
     480            $lang = $site_default_language;
    461481        }
    462482
     
    510530        $monk_languages = monk_get_available_languages();
    511531
    512         $active_languages  = get_option( 'monk_active_languages' );
    513         $current_language  = get_post_meta( $post_id, '_monk_post_language', true );
    514         $post_language     = filter_input( INPUT_POST, 'monk_post_language' );
     532        $active_languages = $this->active_languages;
     533        $current_language = get_post_meta( $post_id, '_monk_post_language', true );
     534        $post_language    = filter_input( INPUT_POST, 'monk_post_language' );
    515535
    516536        if ( ! $current_language ) {
     
    526546            $language = sanitize_text_field( wp_unslash( $post_language ) );
    527547
    528             if ( in_array( $language , $active_languages ) ) {
     548            if ( in_array( $language, $active_languages, true ) ) {
    529549                update_post_meta( $post_id, '_monk_post_language', $language );
    530550            }
     
    591611     */
    592612    public function monk_untrash_post( $post_id ) {
    593         $language = get_post_meta( $post_id, '_monk_post_language', true );
    594         $monk_id  = get_post_meta( $post_id, '_monk_post_translations_id', true );
    595         $post_translations = get_option( 'monk_post_translations_' . $monk_id, array() );
     613        $language                       = get_post_meta( $post_id, '_monk_post_language', true );
     614        $monk_id                        = get_post_meta( $post_id, '_monk_post_translations_id', true );
     615        $post_translations              = get_option( 'monk_post_translations_' . $monk_id, array() );
    596616        $post_translations[ $language ] = $post_id;
    597617
     
    637657        }
    638658
    639         $default_language = get_option( 'monk_default_language', false );
    640         $active_languages = get_option( 'monk_active_languages', false );
    641         $filter           = filter_input( INPUT_GET , 'monk_language_filter' );
     659        $default_language = $this->default_language;
     660        $active_languages = $this->active_languages;
     661        $filter           = filter_input( INPUT_GET, 'monk_language_filter' );
    642662        $language         = $filter;
    643663        $screen           = $this->get_current_screen();
    644664
    645665        if ( ! is_customize_preview() && $screen && 'nav-menus' === $screen->base ) {
    646             $menu_id  = filter_input( INPUT_GET , 'menu' ) ? filter_input( INPUT_GET , 'menu' ) : get_user_option( 'nav_menu_recently_edited' );
     666            $menu_id  = filter_input( INPUT_GET, 'menu' ) ? filter_input( INPUT_GET, 'menu' ) : get_user_option( 'nav_menu_recently_edited' );
    647667            $language = get_term_meta( $menu_id, '_monk_menu_language', true );
    648668            $language = empty( $language ) ? $default_language : $language;
     
    665685                'relation' => 'OR', // Optional, defaults to "AND".
    666686                array(
    667                     'key'     => '_monk_post_language',
    668                     'value'   => $default_language,
     687                    'key'   => '_monk_post_language',
     688                    'value' => $default_language,
    669689                ),
    670690                array(
     
    676696            $meta_query = array(
    677697                array(
    678                     'key'     => '_monk_post_language',
    679                     'value'   => $language,
     698                    'key'   => '_monk_post_language',
     699                    'value' => $language,
    680700                ),
    681701            );
    682702        }
    683703
     704        $old_meta_query = $query->get( 'meta_query' );
     705
     706        if ( is_array( $old_meta_query ) ) {
     707            $meta_query = array_merge( $old_meta_query, $meta_query );
     708        }
    684709        $query->set( 'meta_query', $meta_query );
    685710    }
     
    698723            return $args;
    699724        }
    700 
    701         $screen = $this->get_current_screen();
     725        $old_meta_query = $args['meta_query'];
     726        $screen         = $this->get_current_screen();
    702727
    703728        if ( is_customize_preview() ) {
    704             $language = get_option( 'monk_default_language', false );
    705 
    706             $meta_query = array(
     729            $language = $this->default_language;
     730
     731            $meta_query         = array(
    707732                array(
    708733                    'relation' => 'OR', // Optional, defaults to "AND".
     
    737762                || ( 'edit-tags' === $screen->base ) ) {
    738763
    739                 $active_languages = get_option( 'monk_active_languages', array() );
    740                 $default_language = get_option( 'monk_default_language', false );
     764                $active_languages = $this->active_languages;
     765                $default_language = $this->default_language;
    741766
    742767                if ( 'nav-menus' === $screen->base ) {
    743                     $menu_id  = filter_input( INPUT_GET , 'menu' ) ? filter_input( INPUT_GET , 'menu' ) : get_user_option( 'nav_menu_recently_edited' );
     768                    $menu_id  = filter_input( INPUT_GET, 'menu' ) ? filter_input( INPUT_GET, 'menu' ) : get_user_option( 'nav_menu_recently_edited' );
    744769                    $language = get_term_meta( $menu_id, '_monk_menu_language', true );
    745770                    $language = empty( $language ) ? $default_language : $language;
     
    788813        } // End if().
    789814
     815        if ( is_array( $old_meta_query ) ) {
     816            $args['meta_query'] = array_merge( $old_meta_query, $args['meta_query'] );
     817        }
    790818        return $args;
    791819    }
     
    839867
    840868            $monk_language        = get_post_meta( $post_id, '_monk_post_language', true );
    841             $slug                 = $monk_languages[ $monk_language ]['slug'];
     869            $slug                 = ! empty( $monk_language ) ? $monk_languages[ $monk_language ]['slug'] : '';
    842870            $monk_translations_id = get_post_meta( $post_id, '_monk_post_translations_id', true );
    843871            $monk_translations    = get_option( 'monk_post_translations_' . $monk_translations_id, false );
    844             $default_language     = get_option( 'monk_default_language', false );
     872            $default_language     = $this->default_language;
    845873            $base_url             = admin_url( 'post.php?action=edit' );
    846             $active_languages     = get_option( 'monk_active_languages', false );
     874            $active_languages     = $this->active_languages;
    847875            $post_type            = get_query_var( 'post_type' );
    848876            $post_type            = isset( $post_type ) && ! empty( $post_type ) ? sanitize_text_field( wp_unslash( $post_type ) ) : false;
     
    863891            } else {
    864892                $new_url = add_query_arg( array(
    865                     'monk_id'   => $monk_translations_id,
     893                    'monk_id' => $monk_translations_id,
    866894                ), admin_url( 'post-new.php' ) );
    867895            }
     
    885913    public function monk_custom_taxonomy_field() {
    886914        $monk_languages   = monk_get_available_languages();
    887         $languages        = get_option( 'monk_active_languages', false );
     915        $languages        = $this->active_languages;
    888916        $taxonomies       = get_taxonomies();
    889         $default_language = get_option( 'monk_default_language', false );
     917        $default_language = $this->default_language;
    890918
    891919        require plugin_dir_path( dirname( __FILE__ ) ) . 'admin/partials/admin-monk-language-term.php';
     
    907935        if ( ! empty( $monk_language ) ) {
    908936
    909             $active_languages  = get_option( 'monk_active_languages', false );
     937            $active_languages  = $this->active_languages;
    910938            $language          = sanitize_text_field( wp_unslash( filter_input( INPUT_POST, 'monk_language' ) ) );
    911939            $is_menu           = 'nav_menu' === $taxonomy ? 'menu' : 'term';
     
    919947                $term_translations = get_option( 'monk_' . $is_menu . '_translations_' . $monk_id, array() );
    920948
    921                 if ( in_array( $language , $active_languages, true ) && ( ! array_key_exists( $language , $term_translations ) || empty( $term_translations ) ) ) {
     949                if ( in_array( $language, $active_languages, true ) && ( ! array_key_exists( $language, $term_translations ) || empty( $term_translations ) ) ) {
    922950                    add_term_meta( $term_id, '_monk_' . $is_menu . '_language', $language, true );
    923951
     
    953981        $current_language          = get_term_meta( $term_id, '_monk_' . $is_menu . '_language', true );
    954982        $monk_term_translations_id = get_term_meta( $term_id, '_monk_' . $is_menu . '_translations_id', true );
     983        $new_language              = $new_language && ! empty( $new_language ) ? $new_language : $current_language;
    955984
    956985        update_term_meta( $term_id, '_monk_' . $is_menu . '_language', $new_language );
     
    963992        $monk_term_translations = get_option( 'monk_' . $is_menu . '_translations_' . $monk_term_translations_id, array() );
    964993
    965         if ( ! array_key_exists( $new_language , $monk_term_translations ) ) {
     994        if ( ! array_key_exists( $new_language, $monk_term_translations ) ) {
    966995            if ( ! empty( $monk_term_translations ) ) {
    967996                unset( $monk_term_translations[ $current_language ] );
     
    10141043        $monk_term_translations_id = get_term_meta( $term->term_id, '_monk_term_translations_id', true );
    10151044        $option_name               = 'monk_term_translations_' . $monk_term_translations_id;
    1016         $languages                 = get_option( 'monk_active_languages', false );
     1045        $languages                 = $this->active_languages;
    10171046        $monk_term_translations    = get_option( $option_name, array() );
    10181047
     
    10341063            $taxonomies                = get_taxonomies();
    10351064            $monk_language             = get_term_meta( $term_id, '_monk_term_language', true );
    1036             $slug                      = $monk_languages[ $monk_language ]['slug'];
    10371065            $monk_term_translations_id = get_term_meta( $term_id, '_monk_term_translations_id', true );
    1038             $languages                 = get_option( 'monk_active_languages', false );
     1066            $languages                 = $this->active_languages;
    10391067            $monk_term_translations    = get_option( 'monk_term_translations_' . $monk_term_translations_id, array() );
    1040             $default_language          = get_option( 'monk_default_language', false );
     1068            $default_language          = $this->default_language;
    10411069            $available_languages       = false;
    10421070            $post_type                 = 'none';
     
    10741102        $monk_languages            = monk_get_available_languages();
    10751103        $monk_language             = get_term_meta( $term->term_id, '_monk_term_language', true );
    1076         $languages                 = get_option( 'monk_active_languages', false );
     1104        $languages                 = $this->active_languages;
    10771105        $taxonomies                = get_taxonomies();
    10781106        $monk_term_translations_id = get_term_meta( $term->term_id, '_monk_term_translations_id', true );
     
    11251153     */
    11261154    public function monk_add_attachment_translation() {
    1127         $monk_id          = filter_input( INPUT_POST, 'monk_id' );
    1128         $current_post_id  = filter_input( INPUT_POST, 'current_post_id' );
    1129         $lang             = filter_input( INPUT_POST, 'lang' );
    1130         $attach_path      = get_attached_file( $current_post_id );
    1131         $attach_url       = wp_get_attachment_url( $monk_id );
     1155        $monk_id         = filter_input( INPUT_POST, 'monk_id' );
     1156        $current_post_id = filter_input( INPUT_POST, 'current_post_id' );
     1157        $lang            = filter_input( INPUT_POST, 'lang' );
     1158        $attach_path     = get_attached_file( $current_post_id );
     1159        $attach_url      = wp_get_attachment_url( $monk_id );
    11321160
    11331161        $filetype      = wp_check_filetype( basename( $attach_path ), null );
    11341162        $wp_upload_dir = wp_upload_dir();
    11351163
    1136         $attachment    = array(
     1164        $attachment = array(
    11371165            'guid'           => $attach_url,
    11381166            'post_mime_type' => $filetype['type'],
     
    11581186
    11591187        $monk_attach_url = admin_url( 'post.php' );
    1160         $language_url = add_query_arg( array(
     1188        $language_url    = add_query_arg( array(
    11611189            'post'    => $attach_id,
    11621190            'action'  => 'edit',
     
    11771205     */
    11781206    public function monk_language_selector_render( $post_id, $language_code = false ) {
    1179         $monk_languages      = monk_get_available_languages();
     1207        $monk_languages = monk_get_available_languages();
    11801208
    11811209        $monk_id             = get_post_meta( $post_id, '_monk_post_translations_id', true );
    11821210        $language            = get_post_meta( $post_id, '_monk_post_language', true );
    11831211        $slug                = $monk_languages[ $language ]['slug'];
    1184         $active_languages    = get_option( 'monk_active_languages', false );
    1185         $default_language    = get_option( 'monk_default_language', false );
     1212        $active_languages    = $this->active_languages;
     1213        $default_language    = $this->default_language;
    11861214        $post_translations   = get_option( 'monk_post_translations_' . $monk_id, false );
    11871215        $post                = filter_input( INPUT_GET, 'post' );
     
    12221250     */
    12231251    public function monk_fields_to_save( $post, $attachment ) {
    1224         $active_languages = get_option( 'monk_active_languages', false );
    1225 
    1226         if ( 'upload.php' !== substr( strrchr( parse_url( $_SERVER['HTTP_REFERER'] )['path'], '/' ), 1 ) ) {
     1252        $active_languages = $this->active_languages;
     1253        $referer          = wp_parse_url( $_SERVER['HTTP_REFERER'] );
     1254
     1255        if ( 'upload.php' !== substr( strrchr( $referer['path'], '/' ), 1 ) ) {
    12271256            if ( isset( $attachment['language'] ) ) {
    12281257                if ( is_array( $active_languages ) ) {
     
    12661295        $requested_post_id = filter_input( INPUT_POST, 'post_id' );
    12671296        $post_language     = isset( $requested_post_id ) ? get_post_meta( $requested_post_id, '_monk_post_language', true ) : '';
    1268         $default_language  = get_option( 'monk_default_language', false );
     1297        $default_language  = $this->default_language;
    12691298        $requested_post    = filter_input( INPUT_POST, 'post' );
    12701299        $is_modal          = ! isset( $requested_post ) ? true : false;
     
    12771306        } elseif ( ! $language && $post_language ) {
    12781307            $lang_code = $post_language;
    1279             $language = $monk_languages[ $post_language ]['english_name'];
     1308            $language  = $monk_languages[ $post_language ]['english_name'];
    12801309        } elseif ( ! $language && $new_post_language ) {
    12811310            $lang_code = $new_post_language;
    1282             $language = $monk_languages[ $new_post_language ]['english_name'];
     1311            $language  = $monk_languages[ $new_post_language ]['english_name'];
    12831312        } else {
    12841313            $lang_code = $default_language;
    1285             $language = $monk_languages[ $default_language ]['english_name'];
    1286         }
    1287 
    1288         if ( 'upload.php' !== substr( strrchr( wp_parse_url( $_SERVER['HTTP_REFERER'] )['path'], '/' ), 1 ) ) {
     1314            $language  = $monk_languages[ $default_language ]['english_name'];
     1315        }
     1316
     1317        $referer = wp_parse_url( $_SERVER['HTTP_REFERER'] );
     1318
     1319        if ( 'upload.php' !== substr( strrchr( $referer['path'], '/' ), 1 ) ) {
    12891320            $is_translatable = false;
    12901321        }
     
    13871418        if ( is_admin() && ( isset( $post_id ) && '0' !== $post_id ) && isset( $action ) ) {
    13881419
    1389             $default_language  = get_option( 'monk_default_language' );
    1390             $language = get_post_meta( $post_id, '_monk_post_language', true );
     1420            $default_language = $this->default_language;
     1421            $language         = get_post_meta( $post_id, '_monk_post_language', true );
    13911422
    13921423            if ( empty( $language ) ) {
     
    14401471            }
    14411472        }
    1442         $url = monk_get_current_url();
    1443         $action_url = add_query_arg( 'lang', '', $url );
     1473        $monk_languages = monk_get_available_languages();
     1474        $languages      = get_option( 'monk_active_languages', array() );
     1475        $url            = monk_get_current_url();
     1476        $action_url     = add_query_arg( 'lang', '', $url );
    14441477
    14451478        require_once plugin_dir_path( __FILE__ ) . '/partials/admin-monk-term-language-selector-render.php';
     
    14641497        }
    14651498
    1466         $active_languages = get_option( 'monk_active_languages', false );
    1467         $default_language = get_option( 'monk_default_language', false );
     1499        $active_languages = $this->active_languages;
     1500        $default_language = $this->default_language;
    14681501
    14691502        if ( '0' === filter_input( INPUT_GET, 'menu' ) ) {
     
    14861519
    14871520            foreach ( $active_languages as $code ) {
    1488                 if ( $menu_translations && array_key_exists( $code , $menu_translations ) ) {
    1489                     $translation_counter = $translation_counter + 1;
     1521                if ( $menu_translations && array_key_exists( $code, $menu_translations ) ) {
     1522                    $translation_counter = $translation_counter++;
    14901523                }
    14911524            }
     
    15211554        $menus            = get_nav_menu_locations();
    15221555        $current_menus    = get_theme_mod( 'nav_menu_locations' );
    1523         $default_language = get_option( 'monk_default_language', false );
     1556        $default_language = $this->default_language;
    15241557
    15251558        foreach ( $nav_menus as $nav_menu ) {
     
    16271660        if ( check_ajax_referer( '_monk_save_general_settings', '_monk_save_general_settings', false ) ) {
    16281661            $active_languages = filter_input( INPUT_POST, 'monk_active_languages', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY );
    1629             $response = array();
     1662            $response         = array();
    16301663
    16311664            $response[] = $this->monk_save_language_packages( $active_languages ) ? true : false;
     
    16501683
    16511684            global $wpdb;
    1652             $default_language = get_option( 'monk_default_language', false );
     1685            $default_language = $this->default_language;
    16531686            $post_types       = get_post_types( array(
    16541687                'public'   => true,
     
    16671700            $posts_where .= ')';
    16681701
    1669             $post_ids    = $wpdb->get_results( "SELECT ID FROM $wpdb->posts WHERE $posts_where AND NOT EXISTS ( SELECT post_id FROM $wpdb->postmeta WHERE $wpdb->posts.ID=$wpdb->postmeta.post_id AND $wpdb->postmeta.meta_key = '_monk_post_language' )", ARRAY_A ); // WPCS: unprepared SQL OK.
     1702            $post_ids = $wpdb->get_results( "SELECT ID FROM $wpdb->posts WHERE $posts_where AND NOT EXISTS ( SELECT post_id FROM $wpdb->postmeta WHERE $wpdb->posts.ID=$wpdb->postmeta.post_id AND $wpdb->postmeta.meta_key = '_monk_post_language' )", ARRAY_A ); // WPCS: unprepared SQL OK.
    16701703
    16711704            $term_ids = $wpdb->get_results( "SELECT term_id FROM $wpdb->terms
     
    16761709            if ( is_array( $post_ids ) && ! empty( $post_ids ) ) {
    16771710                foreach ( $post_ids as $post_id ) {
    1678                     $set_language           = $wpdb->insert( 'wp_postmeta', array(
     1711                    $set_language          = $wpdb->insert( 'wp_postmeta', array(
    16791712                        'post_id'    => intval( $post_id['ID'] ),
    16801713                        'meta_key'   => '_monk_post_language',
    16811714                        'meta_value' => $default_language,
    16821715                    ));
    1683                     $set_monk_id            = $wpdb->insert( 'wp_postmeta', array(
     1716                    $set_monk_id           = $wpdb->insert( 'wp_postmeta', array(
    16841717                        'post_id'    => intval( $post_id['ID'] ),
    16851718                        'meta_key'   => '_monk_post_translations_id',
    16861719                        'meta_value' => intval( $post_id['ID'] ),
    16871720                    ));
    1688                     $value = array(
     1721                    $value                 = array(
    16891722                        $default_language => intval( $post_id['ID'] ),
    16901723                    );
    1691                     $set_translation_array  = $wpdb->insert( 'wp_options', array(
     1724                    $set_translation_array = $wpdb->insert( 'wp_options', array(
    16921725                        'option_name'  => 'monk_post_translations_' . intval( $post_id['ID'] ),
    16931726                        'option_value' => maybe_serialize( $value ),
     
    17011734            if ( is_array( $term_ids ) && ! empty( $term_ids ) ) {
    17021735                foreach ( $term_ids as $term_id ) {
    1703                     $set_language = $wpdb->insert( 'wp_termmeta', array(
     1736                    $set_language          = $wpdb->insert( 'wp_termmeta', array(
    17041737                        'term_id'    => intval( $term_id['term_id'] ),
    17051738                        'meta_key'   => '_monk_term_language',
    17061739                        'meta_value' => $default_language,
    17071740                    ));
    1708                     $set_monk_id  = $wpdb->insert( 'wp_termmeta', array(
     1741                    $set_monk_id           = $wpdb->insert( 'wp_termmeta', array(
    17091742                        'term_id'    => intval( $term_id['term_id'] ),
    17101743                        'meta_key'   => '_monk_term_translations_id',
    17111744                        'meta_value' => intval( $term_id['term_id'] ),
    17121745                    ));
    1713                     $value = array(
     1746                    $value                 = array(
    17141747                        $default_language => intval( $term_id['term_id'] ),
    17151748                    );
    1716                     $set_translation_array  = $wpdb->insert( 'wp_options', array(
     1749                    $set_translation_array = $wpdb->insert( 'wp_options', array(
    17171750                        'option_name'  => 'monk_term_translations_' . $term_id['term_id'],
    17181751                        'option_value' => maybe_serialize( $value ),
     
    17371770    public function monk_save_site_options() {
    17381771        if ( check_ajax_referer( '_monk_site_options', false, false ) ) {
    1739             $default_language = get_option( 'monk_default_language', false );
    1740             $active_languages = get_option( 'monk_active_languages', array() );
     1772            $default_language = $this->default_language;
     1773            $active_languages = $this->active_languages;
    17411774            $default_blogname = filter_input( INPUT_POST, 'blogname' );
    17421775            $default_blogdesc = filter_input( INPUT_POST, 'blogdescription' );
     
    17801813            ), $atts
    17811814        );
     1815
    17821816        $base_id      = get_post_meta( get_queried_object_id(), '_monk_post_translations_id', true );
    17831817        $translations = get_option( 'monk_post_translations_' . $base_id, false );
    17841818
    17851819        if ( ! empty( $translations[ $atts['language'] ] ) ) {
    1786             $translation  = $translations[ $atts['language'] ];
     1820            $translation      = $translations[ $atts['language'] ];
    17871821            $translation_link = '<a href="' . esc_attr( get_permalink( $translation ) ) . '" class="' . esc_attr( $atts['class'] ) . '">' . esc_html( $atts['text'] ) . '</a>';
    17881822            return $translation_link;
     
    17911825        }
    17921826    }
     1827
     1828    /**
     1829     * Function to filter comments by their post language.
     1830     *
     1831     * @uses the comments_clauses filter
     1832     *
     1833     * @since    0.7.0
     1834     *
     1835     * @param    array $clauses Array with the query pieces to be filtered.
     1836     * @return  array $clauses
     1837     */
     1838    public function monk_admin_filter_comment_clauses( $clauses ) {
     1839        $screen = $this->get_current_screen();
     1840        $lang   = filter_input( INPUT_GET, 'lang' );
     1841
     1842        if ( ! is_admin() || 'edit-comments' !== $screen->base || 'all' === $lang ) {
     1843            return $clauses;
     1844        }
     1845
     1846        global $wpdb;
     1847
     1848        $default_language = get_option( 'monk_default_language', false );
     1849        $lang             = empty( $lang ) ? $default_language : $lang;
     1850        $replace          = array( '(', ')' );
     1851        $comment_status   = str_replace( $replace, '', $clauses['where'] );
     1852        $comment_status   = '(' . $comment_status . ')';
     1853        $not_exists       = '';
     1854
     1855        if ( $default_language === $lang ) {
     1856            $not_exists = " ( SELECT ID FROM $wpdb->posts WHERE ID NOT IN ( SELECT post_id FROM $wpdb->postmeta WHERE $wpdb->postmeta.meta_key = '_monk_post_language' ) AND comment_count > 0 ) or comment_post_id IN ";
     1857        }
     1858
     1859        $clauses['where'] = 'comment_post_id in ' . $not_exists . " ( select ID FROM $wpdb->posts WHERE ID IN ( select post_id FROM $wpdb->postmeta WHERE $wpdb->postmeta.meta_key = '_monk_post_language' AND $wpdb->postmeta.meta_value = '$lang' ) AND comment_count > 0 ) AND " . $comment_status;
     1860
     1861        $clauses['orderby'] = str_replace( 'wp_comments.', '', $clauses['orderby'] );
     1862
     1863        return $clauses;
     1864    }
     1865
     1866    /**
     1867     * Function to add a language selector to comments admin page.
     1868     *
     1869     * @uses the restrict_manage_comments action
     1870     *
     1871     * @since    0.7.0
     1872     *
     1873     * @return  void
     1874     */
     1875    public function monk_admin_add_comments_language_selector() {
     1876        $comment_status = filter_input( INPUT_GET, 'comment_status' );
     1877        $comment_status = 'all' === $comment_status ? 'total_comments' : $comment_status;
     1878        $comment_status = empty( $comment_status ) ? 'total_comments' : $comment_status;
     1879        $comment_class  = wp_count_comments();
     1880
     1881        foreach ( $comment_class as $status => $number ) {
     1882
     1883            if ( $comment_status === $status && intval( $number ) > 0 ) {
     1884                $monk_languages = monk_get_available_languages();
     1885                $languages      = get_option( 'monk_active_languages', array() );
     1886                $url_language   = filter_input( INPUT_GET, 'lang' );
     1887
     1888                require plugin_dir_path( dirname( __FILE__ ) ) . 'admin/partials/admin-monk-comments-language-selector-render.php';
     1889                break;
     1890            }
     1891        }
     1892    }
    17931893}
  • monk/trunk/admin/css/monk-admin.css

    r1712354 r1807041  
    106106}
    107107
     108fieldset.menu-settings-group {
     109    margin: 0 0 10px;
     110    overflow: hidden;
     111    padding-left: 18%;
     112}
     113
    108114.add-menu-translation {
    109115    text-align: right;
     
    116122}
    117123
     124legend.howto {
     125    float: left;
     126    clear: both;
     127    width: 21.951%;
     128    padding: 3px 0 0;
     129    margin-left: -21.951%;
     130}
     131
    118132.menu-flag {
    119133    font-size: 15px;
    120134    margin-right: 5px;
     135    margin-left: 0 !important;
    121136}
    122137
  • monk/trunk/admin/js/monk-admin.js

    r1734509 r1807041  
    9090                            if ( response.success ) {
    9191                                if ( response.data ) {
    92                                     $( '#monk-downloading' ).addClass( 'monk-hide' );   
    93                                     if ( -1 < $.inArray( false, response.data ) ) {     
     92                                    $( '#monk-downloading' ).addClass( 'monk-hide' );
     93                                    if ( -1 < $.inArray( false, response.data ) ) {
    9494                                        $( '#monk-error' ).removeClass( 'monk-hide' );
    95                                     } else {       
     95                                    } else {
    9696                                        $( '#monk-submit-settings' ).click();
    9797                                    }
     
    123123                        if ( response.hasOwnProperty( 'success' ) ) {
    124124                            $( '#monk-bulk-action' ).addClass( 'monk-hide' );
    125                             if ( response.success ) {       
     125                            if ( response.success ) {
    126126                                $( '#monk-done' ).removeClass( 'monk-hide' );
    127127                            } else {
     
    158158                        if ( response.hasOwnProperty( 'success' ) ) {
    159159                            $( '#monk-save-options' ).addClass( 'monk-hide' );
    160                             if ( response.success ) {       
     160                            if ( response.success ) {
    161161                                $( '#monk-done' ).removeClass( 'monk-hide' );
    162162                            } else {
     
    213213                    var attachment_id = file_attachment.attributes.id;
    214214                    var item          = $( '.attachments li.save-ready' ).not( '.uploading, .saved-language, [data-id]' );
    215                    
     215
    216216                    if ( typeof undefined === typeof item.attr( 'data-id' ) ) {
    217217                        item.find( '.attachment-preview' ).click();
     
    229229        if ( /\bnav-menus.php?\b/.test( window.location.pathname ) ) {
    230230            if ( $( '.add-menu-translation' ).length ) {
    231                 $( 'div#nav-menu-header .major-publishing-actions' ).append( $( '.add-menu-translation' ) );
    232                 $( $( 'fieldset.menu-language' ) ).insertBefore( 'fieldset.auto-add-pages' );
     231                $( '#nav-menu-header .major-publishing-actions' ).append( $( '.add-menu-translation' ) );
     232                $( $( 'fieldset.menu-language' ) ).insertBefore( '.auto-add-pages' );
    233233                $( $( '.menu-translations' ) ).insertAfter( '.menu-settings' );
    234234
    235235                if ( $( '#monk-menu-translation-message' ).length ) {
    236236                    $( '.menu-theme-locations' ).append( $( '#monk-menu-translation-message' ) );
    237                     $( '.menu-theme-locations  > div.checkbox-input' ).remove();
     237                    $( '.menu-theme-locations  > .checkbox-input' ).remove();
    238238                }
    239239                if ( $( '#monk-checkbox-wrapper' ).length ) {
     
    244244                    }
    245245                    $( '.menu-theme-locations' ).append( $( '#monk-checkbox-wrapper' ) );
    246                     $( '.menu-theme-locations  > div.checkbox-input' ).remove();
     246                    $( '.menu-theme-locations  > .checkbox-input' ).remove();
    247247                }
    248248            } else {
    249                 $( 'div#nav-menu-header .major-publishing-actions' ).append( $( '.new-menu-language' ) );
     249                $( '#nav-menu-header .major-publishing-actions' ).append( $( '.new-menu-language' ) );
    250250            }
    251251
  • monk/trunk/admin/partials/admin-monk-active-languages-render.php

    r1712354 r1807041  
    1616$monk_languages = monk_get_available_languages();
    1717
    18 $active_languages = get_option( 'monk_active_languages', false );
    19 $default_language = get_option( 'monk_default_language', false );
     18$active_languages = $this->active_languages;
     19$default_language = $this->default_language;
    2020?>
    2121<fieldset>
  • monk/trunk/admin/partials/admin-monk-language-name-render.php

    r1734509 r1807041  
    1919        <?php $language = get_post_meta( filter_input( INPUT_POST, 'post_id' ), '_monk_post_language', true ); ?>
    2020    <?php else : ?>
    21         <?php $language = get_option( 'monk_default_language', false ); ?>
     21        <?php $language = $this->default_language; ?>
    2222    <?php endif; ?>
    2323<?php endif; ?>
  • monk/trunk/admin/partials/admin-monk-menu-translation-fields-render.php

    r1708712 r1807041  
    5252            </select>
    5353        <?php else : ?>
    54             <span class="menu-flag flag-icon flag-icon-<?php echo esc_attr( $monk_languages[ $menu_language ]['slug'] ); ?>"></span>
     54            <span class="menu-flag flag-icon flag-icon-<?php echo esc_attr( strtolower( $menu_language ) ); ?>"></span>
    5555            <span><?php echo esc_html( $monk_languages[ $menu_language ]['english_name'] ); ?></span>
    5656            <input type="hidden" name="monk_language" value="<?php echo esc_attr( $menu_language ); ?>">
  • monk/trunk/admin/partials/admin-monk-post-meta-box-field-render.php

    r1708712 r1807041  
    4747            </p>
    4848            <?php if ( $post_translations && $post->ID !== $monk_id ) : ?>
    49                 <?php if ( get_the_title( $monk_id ) ) : ?> 
     49                <?php if ( get_the_title( $monk_id ) ) : ?>
    5050                    <?php $title = get_the_title( $monk_id ); ?>
    5151                <?php else : ?>
     
    6666    $post_translations   = get_option( $option_current_name );
    6767    foreach ( $active_languages as $code ) {
    68         if ( $post_translations && array_key_exists( $code , $post_translations ) ) {
     68        if ( $post_translations && array_key_exists( $code, $post_translations ) ) {
    6969            $translation_counter = $translation_counter + 1;
    7070        }
     
    9494                            'monk_id'   => $monk_id,
    9595                        ), $monk_translation_url );
    96                         $lang_id = sanitize_title( $lang_code );
     96                        $lang_id      = sanitize_title( $lang_code );
    9797                        if ( array_key_exists( $lang_code, $monk_languages ) && ! array_key_exists( $lang_code, $post_translations ) ) :
    9898                            $lang_name = $monk_languages[ $lang_code ]['english_name'];
     
    120120                    foreach ( $active_languages as $lang_code ) :
    121121                        $language_url = add_query_arg( array(
    122                             'lang'      => $lang_code,
    123                             'monk_id'   => $monk_id,
     122                            'lang'    => $lang_code,
     123                            'monk_id' => $monk_id,
    124124                        ), $monk_translation_url );
    125                         $lang_id = sanitize_title( $lang_code );
     125                        $lang_id      = sanitize_title( $lang_code );
    126126                        if ( array_key_exists( $lang_code, $monk_languages ) && ! array_key_exists( $lang_code, $post_translations ) ) :
    127127                            $lang_name = $monk_languages[ $lang_code ]['english_name'];
     
    155155            <span id="current-language"><?php echo esc_html( $monk_languages[ $post_default_language ]['english_name'] ); ?></span>
    156156
    157             <!-- 
     157            <!--
    158158                Gives the option to alter the current post language
    159159                When the user select this feature,
  • monk/trunk/admin/partials/admin-monk-select-menu-to-edit-render.php

    r1708712 r1807041  
    7979
    8080<?php
    81 $menu_id           = empty( $menu ) || 'delete' === filter_input( INPUT_GET, 'action' ) ? get_user_option( 'nav_menu_recently_edited' ) : $menu;
     81$menu_id = empty( $menu ) || 'delete' === filter_input( INPUT_GET, 'action' ) ? get_user_option( 'nav_menu_recently_edited' ) : $menu;
    8282
    8383if ( is_nav_menu( $menu_id ) ) :
     
    9292    }
    9393
    94     $menu_name      = $menu->name;
     94    $menu_name = $menu->name;
    9595    ?>
    9696    <?php if ( array_key_exists( $default_language, $menu_translations ) && $menu_language !== $default_language ) : ?>
     
    103103        <?php if ( ! $locations_tab ) : ?>
    104104            <div class="hide-if-no-js" id="monk-menu-translation-message">
    105             <?php $locations = array_keys( $menus, $menu ); ?>
     105            <?php $locations = array_keys( $menus, $menu, true ); ?>
    106106            <?php if ( $locations ) : ?>
    107107                <?php foreach ( $locations as $location ) : ?>
     
    111111                <?php endforeach; ?>
    112112            <?php else : ?>
    113                 <div><?php esc_html_e( 'None', 'monk' ); ?></div>
     113                <div><?php esc_html_e( 'No assigned location', 'monk' ); ?></div>
    114114            <?php endif; ?>
    115115            </div>
  • monk/trunk/admin/partials/admin-monk-site-description-render.php

    r1720925 r1807041  
    1414}
    1515?>
    16 <input type="text" name="blogdescription" value="<?php echo esc_attr( $site_description ); ?>" class="regular-text"><span class="monk-language-flag flag-icon flag-icon-<?php echo esc_attr( $default_slug ); ?>" aria-label="<?php echo esc_attr( $monk_languages[ $default_language ]['native_name'] ); ?>" title="<?php echo esc_attr( $monk_languages[ $default_language ]['native_name'] ); ?>"></span><br>
     16<input type="text" name="blogdescription" value="<?php echo esc_attr( $site_description ); ?>" class="regular-text"><span class="monk-language-flag flag-icon flag-icon-<?php echo esc_attr( strtolower( $default_language ) ); ?>" aria-label="<?php echo esc_attr( $monk_languages[ $default_language ]['native_name'] ); ?>" title="<?php echo esc_attr( $monk_languages[ $default_language ]['native_name'] ); ?>"></span><br>
    1717<?php foreach ( $active_languages as $lang ) : ?>
    1818    <?php if ( $lang !== $default_language ) : ?>
    1919        <?php $site_description = get_option( 'monk_' . $lang . '_blogdescription', '' ); ?>
    20         <input type="text" name="<?php echo esc_attr( 'monk_' . $lang . '_blogdescription' ); ?>" value="<?php echo esc_attr( $site_description ); ?>" placeholder="<?php echo esc_attr( $monk_languages[ $lang ]['native_name'] ); ?>" class="regular-text"><span class="monk-language-flag flag-icon flag-icon-<?php echo esc_attr( $monk_languages[ $lang ]['slug'] ); ?>" aria-label="<?php echo esc_attr( $monk_languages[ $lang ]['native_name'] ); ?>" title="<?php echo esc_attr( $monk_languages[ $lang ]['native_name'] ); ?>"></span><br>
     20        <input type="text" name="<?php echo esc_attr( 'monk_' . $lang . '_blogdescription' ); ?>" value="<?php echo esc_attr( $site_description ); ?>" placeholder="<?php echo esc_attr( $monk_languages[ $lang ]['native_name'] ); ?>" class="regular-text"><span class="monk-language-flag flag-icon flag-icon-<?php echo esc_attr( strtolower( $lang ) ); ?>" aria-label="<?php echo esc_attr( $monk_languages[ $lang ]['native_name'] ); ?>" title="<?php echo esc_attr( $monk_languages[ $lang ]['native_name'] ); ?>"></span><br>
    2121    <?php endif; ?>
    2222<?php endforeach; ?>
  • monk/trunk/admin/partials/admin-monk-site-name-render.php

    r1720925 r1807041  
    1414}
    1515?>
    16 <input type="text" name="blogname" value="<?php echo esc_attr( $site_name ); ?>" class="regular-text"><span class="monk-language-flag flag-icon flag-icon-<?php echo esc_attr( $default_slug ); ?>" aria-label="<?php echo esc_attr( $monk_languages[ $default_language ]['native_name'] ); ?>" title="<?php echo esc_attr( $monk_languages[ $default_language ]['native_name'] ); ?>"></span><br>
     16<input type="text" name="blogname" value="<?php echo esc_attr( $site_name ); ?>" class="regular-text"><span class="monk-language-flag flag-icon flag-icon-<?php echo esc_attr( strtolower( $default_language ) ); ?>" aria-label="<?php echo esc_attr( $monk_languages[ $default_language ]['native_name'] ); ?>" title="<?php echo esc_attr( $monk_languages[ $default_language ]['native_name'] ); ?>"></span><br>
    1717<?php foreach ( $active_languages as $lang ) : ?>
    1818    <?php if ( $lang !== $default_language ) : ?>
    1919        <?php $site_name = get_option( 'monk_' . $lang . '_blogname', '' ); ?>
    20         <input type="text" name="<?php echo esc_attr( 'monk_' . $lang . '_blogname' ); ?>" value="<?php echo esc_attr( $site_name ); ?>" placeholder="<?php echo esc_attr( $monk_languages[ $lang ]['native_name'] ); ?>" class="regular-text"><span class="monk-language-flag flag-icon flag-icon-<?php echo esc_attr( $monk_languages[ $lang ]['slug'] ); ?>" aria-label="<?php echo esc_attr( $monk_languages[ $lang ]['native_name'] ); ?>" title="<?php echo esc_attr( $monk_languages[ $lang ]['native_name'] ); ?>"></span><br>
     20        <input type="text" name="<?php echo esc_attr( 'monk_' . $lang . '_blogname' ); ?>" value="<?php echo esc_attr( $site_name ); ?>" placeholder="<?php echo esc_attr( $monk_languages[ $lang ]['native_name'] ); ?>" class="regular-text"><span class="monk-language-flag flag-icon flag-icon-<?php echo esc_attr( strtolower( $lang ) ); ?>" aria-label="<?php echo esc_attr( $monk_languages[ $lang ]['native_name'] ); ?>" title="<?php echo esc_attr( $monk_languages[ $lang ]['native_name'] ); ?>"></span><br>
    2121    <?php endif; ?>
    2222<?php endforeach; ?>
  • monk/trunk/admin/partials/admin-monk-term-language-selector-render.php

    r1734509 r1807041  
    33 * Provides the view for monk_add_term_language_filter function.
    44 *
    5  * @since      0.5.2
     5 * @since      0.7.0
    66 *
    77 * @package    Monk
     
    1313    die;
    1414}
    15 
    1615$monk_languages = monk_get_available_languages();
    1716$languages      = get_option( 'monk_active_languages' );
    1817$url_language   = filter_input( INPUT_GET, 'lang' );
     18
    1919?>
    2020
     
    2323        <option value="all"><?php esc_html_e( 'All Languages', 'monk' ); ?></option>
    2424        <?php foreach ( $languages as $language ) : ?>
    25             <option value="<?php echo esc_attr( $language ); ?>" 
     25            <option value="<?php echo esc_attr( $language ); ?>"
    2626                <?php
    2727                if ( isset( $url_language ) && ! empty( $url_language ) ) {
  • monk/trunk/admin/partials/monk-language-column.php

    r1720925 r1807041  
    1818    <?php if ( $monk_language ) : ?>
    1919        <div class="monk-flag-wrapper">
    20             <span class="monk-selector-flag flag-icon <?php echo esc_attr( 'flag-icon-' . $monk_languages[ $monk_language ]['slug'] ); ?>" aria-label="<?php echo esc_attr( $monk_languages[ $monk_language ]['english_name'] ); ?>" title="<?php echo esc_attr( $monk_languages[ $monk_language ]['english_name'] ); ?>"></span>
     20            <span class="monk-selector-flag flag-icon <?php echo esc_attr( 'flag-icon-' . strtolower( $monk_language ) ); ?>" aria-label="<?php echo esc_attr( $monk_languages[ $monk_language ]['english_name'] ); ?>" title="<?php echo esc_attr( $monk_languages[ $monk_language ]['english_name'] ); ?>"></span>
    2121        </div>
    2222        <?php if ( $available_languages ) : ?>
  • monk/trunk/admin/partials/monk-language-filter.php

    r1734509 r1807041  
    1515
    1616$monk_languages = monk_get_available_languages();
    17 $languages      = get_option( 'monk_active_languages' );
     17$languages      = $this->active_languages;
    1818$url_language   = filter_input( INPUT_GET, 'monk_language_filter' );
    1919?>
     
    2121    <option value=""><?php esc_html_e( 'All Languages', 'monk' ); ?></option>
    2222    <?php foreach ( $languages as $language ) : ?>
    23         <option value="<?php echo esc_attr( $language ); ?>" 
     23        <option value="<?php echo esc_attr( $language ); ?>"
    2424            <?php
    2525            if ( isset( $url_language ) && ! empty( $url_language ) ) {
     
    2727                selected( $monk_language_filter, $language );
    2828            } elseif ( ! isset( $url_language ) ) {
    29                 selected( get_option( 'monk_default_language' ), $language );
     29                selected( $this->default_language, $language );
    3030            }
    3131            ?>
  • monk/trunk/includes/class-monk-activator.php

    r1720925 r1807041  
    3333        $language = get_locale() ? get_locale() : 'en_US';
    3434
    35         $default_post_category = get_term( get_option( 'default_category' ) );
     35        $default_post_category = get_term( get_option( 'default_category' ), OBJECT );
    3636        $uncategorized_term    = get_term_by( 'id', 1, 'category' );
    3737
  • monk/trunk/includes/class-monk-i18n.php

    r1712354 r1807041  
    1919class Monk_I18n {
    2020
     21    /**
     22     * The default language of the plugin.
     23     *
     24     * @since    0.7.0
     25     * @access   private
     26     * @var      string    $default_language    The default language of the plugin.
     27     */
     28    private $default_language;
     29
     30    /**
     31     * The active languages of the plugin.
     32     *
     33     * @since    0.7.0
     34     * @access   private
     35     * @var      array $active_languages The active languages of the plugin.
     36     */
     37    private $active_languages;
     38
     39    /**
     40     * Initialize the class and set its properties.
     41     *
     42     * @since  0.7.0
     43     * @param  string $default_language The default language of the plugin.
     44     * @param  array  $active_languages The active languages of the plugin.
     45     * @return  void
     46     */
     47    public function __construct( $default_language, $active_languages ) {
     48        $this->default_language = $default_language;
     49        $this->active_languages = $active_languages;
     50    }
    2151
    2252    /**
     
    6999            $slug             = $matches[0];
    70100            $locale           = monk_get_locale_by_slug( $slug );
    71             $active_languages = get_option( 'monk_active_languages', false );
     101            $active_languages = $this->active_languages;
    72102
    73103            if ( ! in_array( $locale, $active_languages, true ) ) {
    74                 $locale = get_option( 'monk_default_language', false );
     104                $locale = $this->default_language;
    75105            }
    76106        } elseif ( $slug ) {
    77107            $locale = monk_get_locale_by_slug( $slug );
    78108        } else {
    79             $locale = get_option( 'monk_default_language', false );
     109            $locale = $this->default_language;
    80110        }
    81111
  • monk/trunk/includes/class-monk-links.php

    r1712354 r1807041  
    7777     *
    7878     * @access   private
    79      * @var      string    $site_language    The main site language set by user.
    80      */
    81     private $site_language;
     79     * @var      string    $site_slug    The main site language set by user.
     80     */
     81    private $site_slug;
    8282
    8383    /**
     
    9090     */
    9191    private $site_root;
     92
     93    /**
     94     * The default language of the plugin.
     95     *
     96     * @since    0.7.0
     97     * @access   private
     98     * @var      string    $default_language    The default language of the plugin.
     99     */
     100    private $default_language;
     101
     102    /**
     103     * The active languages of the plugin.
     104     *
     105     * @since    0.7.0
     106     * @access   private
     107     * @var      array $active_languages The active languages of the plugin.
     108     */
     109    private $active_languages;
    92110
    93111    /**
     
    98116     * @param    string $monk       The name and ID of the plugin.
    99117     * @param    string $version    The plugin version.
    100      */
    101     public function __construct( $monk, $version ) {
     118     * @param  string $default_language The default language of the plugin.
     119     * @param  array  $active_languages The active languages of the plugin.
     120     */
     121    public function __construct( $monk, $version, $default_language, $active_languages ) {
    102122        $monk_languages = monk_get_available_languages();
    103123
    104         $this->plugin_name   = $monk;
    105         $this->version       = $version;
    106         $this->index         = 'index.php';
    107         $this->site_home     = home_url();
    108         $this->structure     = get_option( 'permalink_structure', false );
    109         $this->site_root     = preg_match( '#^/*' . $this->index . '#', $this->structure ) ? $this->index . '/' : '';
    110 
    111         $default_language    = get_option( 'monk_default_language', false );
     124        $this->plugin_name = $monk;
     125        $this->version     = $version;
     126        $this->index       = 'index.php';
     127        $this->site_home   = home_url();
     128        $this->structure   = get_option( 'permalink_structure', false );
     129        $this->site_root   = preg_match( '#^/*' . $this->index . '#', $this->structure ) ? $this->index . '/' : '';
     130
     131        $this->default_language = $default_language;
     132        $this->active_languages = $active_languages;
    112133
    113134        if ( $default_language ) {
    114             $this->site_language = $monk_languages[ $default_language ]['slug'];
     135            $this->site_slug = $monk_languages[ $this->default_language ]['slug'];
    115136        }
    116137    }
     
    131152
    132153        $active_languages = array();
    133         $languages        = get_option( 'monk_active_languages', false );
     154        $languages        = $this->active_languages;
    134155
    135156        if ( $languages ) {
     
    286307
    287308        $url_language         = get_query_var( 'lang' );
    288         $language             = ( empty( $url_language ) ) ? $this->site_language : $url_language;
     309        $language             = ( empty( $url_language ) ) ? $this->site_slug : $url_language;
    289310        $default_language_url = get_option( 'monk_default_language_url', false );
    290311        $path_index           = strripos( $link, $path );
     
    292313
    293314        if ( $this->monk_using_permalinks() ) {
    294             if ( empty( $default_language_url ) && $this->site_language === $language ) {
     315            if ( empty( $default_language_url ) && $this->site_slug === $language ) {
    295316                $link = trailingslashit( $link );
    296317            } else {
     
    299320        } else {
    300321            $monk_languages = monk_get_available_languages();
    301             if ( empty( $default_language_url ) && $this->site_language === $language ) {
     322            if ( empty( $default_language_url ) && $this->site_slug === $language ) {
    302323                $link = $link;
    303324            } else {
     
    320341     */
    321342    public function monk_change_language_url( $url, $lang ) {
    322         $monk_languages       = monk_get_available_languages();
    323 
    324         $default_language     = $this->site_language;
     343        $monk_languages = monk_get_available_languages();
     344
     345        $default_language     = $this->site_slug;
    325346        $default_language_url = get_option( 'monk_default_language_url', false );
    326347        $active_languages     = $this->monk_get_active_languages();
     
    372393        $post_language = get_post_meta( $post->ID, '_monk_post_language', true );
    373394        $url_language  = get_query_var( 'lang' );
    374         $language      = ( empty( $post_language ) ) ? $this->site_language : $post_language;
     395        $language      = ( empty( $post_language ) ) ? $this->site_slug : $post_language;
    375396        $link          = $this->monk_change_language_url( $link, $language );
    376397
     
    392413    public function monk_add_language_page_permalink( $link, $post_id ) {
    393414        $page_language = get_post_meta( $post_id, '_monk_post_language', true );
    394         $language      = ( empty( $page_language ) ) ? $this->site_language : $page_language;
     415        $language      = ( empty( $page_language ) ) ? $this->site_slug : $page_language;
    395416        $link          = $this->monk_change_language_url( $link, $language );
    396417
     
    413434        $active_languages = $this->monk_get_active_languages();
    414435        $url_language     = get_query_var( 'lang' );
    415         $language         = ( in_array( $url_language, $active_languages, true ) ) ? $url_language : $this->site_language;
     436        $language         = ( in_array( $url_language, $active_languages, true ) ) ? $url_language : $this->site_slug;
    416437        $link             = $this->monk_change_language_url( $link, $language );
    417438
     
    433454    public function monk_add_language_date_permalink( $link ) {
    434455        $monk_languages       = monk_get_available_languages();
    435         $language             = ( get_query_var( 'lang' ) ) ? get_query_var( 'lang' ) : $this->site_language;
    436         $default_language     = get_option( 'monk_default_language', false );
     456        $language             = ( get_query_var( 'lang' ) ) ? get_query_var( 'lang' ) : $this->site_slug;
     457        $default_language     = $this->default_language;
    437458        $default_slug         = $monk_languages[ $default_language ]['slug'];
    438459        $default_language_url = get_option( 'monk_default_language_url', false );
     
    458479        $monk_languages = monk_get_available_languages();
    459480        $term_language  = get_term_meta( $term->term_id, '_monk_term_language', true );
    460         $language       = ( empty( $term_language ) ) ? $this->site_language : $monk_languages[ $term_language ]['slug'];
     481        $language       = ( empty( $term_language ) ) ? $this->site_slug : $monk_languages[ $term_language ]['slug'];
    461482        $link           = $this->monk_change_language_url( $link, $language );
    462483
     
    478499    public function monk_add_language_attachment_permalink( $link, $post_id ) {
    479500        $attachment_language = get_post_meta( $post_id, '_monk_post_language', true );
    480         $language            = ( empty( $attachment_language ) ) ? $this->site_language : $attachment_language;
     501        $language            = ( empty( $attachment_language ) ) ? $this->site_slug : $attachment_language;
    481502        $link                = $this->monk_change_language_url( $link, $language );
    482503
     
    495516    public function monk_add_language_author_permalink( $link, $author_id ) {
    496517        $monk_languages       = monk_get_available_languages();
    497         $default_language     = get_option( 'monk_default_language', false );
     518        $default_language     = $this->default_language;
    498519        $default_slug         = $monk_languages[ $default_language ]['slug'];
    499520        $default_language_url = get_option( 'monk_default_language_url', false );
    500         $language             = ( get_query_var( 'lang' ) ) ? get_query_var( 'lang' ) : $this->site_language;
     521        $language             = ( get_query_var( 'lang' ) ) ? get_query_var( 'lang' ) : $this->site_slug;
    501522
    502523        if ( ! $this->monk_using_permalinks() ) {
     
    519540     */
    520541    public function monk_add_language_search_permalink( $link ) {
    521         $language = get_query_var( 'lang' ) ? get_query_var( 'lang' ) : $this->site_language;
     542        $language = get_query_var( 'lang' ) ? get_query_var( 'lang' ) : $this->site_slug;
    522543
    523544        $link = $this->monk_change_language_url( $link, $language );
     
    541562        if ( $form ) {
    542563            $monk_languages       = monk_get_available_languages();
    543             $default_language     = get_option( 'monk_default_language', false );
     564            $default_language     = $this->default_language;
    544565            $default_slug         = $monk_languages[ $default_language ]['slug'];
    545566            $default_language_url = get_option( 'monk_default_language_url', false );
    546567            $page_language        = get_query_var( 'lang' );
    547             $language             = ( empty( $page_language ) ) ? $this->site_language : $page_language;
     568            $language             = ( empty( $page_language ) ) ? $this->site_slug : $page_language;
    548569
    549570            // Replace the closing form tag with the hidden field.
     
    584605
    585606        // First get the correct url and scheme.
    586         $requested_url    = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
     607        $requested_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    587608
    588609        // Get current active languages.
     
    608629        } elseif ( is_home() || is_front_page() || is_archive() && ! ( is_tax() || is_tag() || is_category() ) ) {
    609630            // From valid query var.
    610             $slug = get_query_var( 'lang', $this->site_language );
     631            $slug = get_query_var( 'lang', $this->site_slug );
    611632        }
    612633
    613634        // If is not any of the above content cases, the fallback is the default language.
    614635        if ( empty( $slug ) ) {
    615             $slug         = $this->site_language;
     636            $slug         = $this->site_slug;
    616637            $redirect_url = $requested_url;
    617638        } else {
     
    656677    public function monk_previous_and_next_posts( $join, $in_same_term, $excluded_terms, $taxonomy, $post ) {
    657678        global $wpdb;
    658         $post_id          = $post->ID;
    659         $post_language    = get_post_meta( $post_id, '_monk_post_language', true );
    660         $language         = get_option( 'monk_default_language', false );
     679        $post_id       = $post->ID;
     680        $post_language = get_post_meta( $post_id, '_monk_post_language', true );
     681        $language      = $this->default_language;
    661682
    662683        if ( $post_language ) {
  • monk/trunk/includes/class-monk.php

    r1734509 r1807041  
    5656
    5757    /**
     58     * The default language of the plugin.
     59     *
     60     * @since    0.7.0
     61     * @access   protected
     62     * @var      string    $default_language    The default language of the plugin.
     63     */
     64    protected $default_language;
     65
     66    /**
     67     * The active languages of the plugin.
     68     *
     69     * @since    0.7.0
     70     * @access   protected
     71     * @var      array $active_languages The active languages of the plugin.
     72     */
     73    protected $active_languages;
     74
     75    /**
    5876     * Define the core functionality of the plugin.
    5977     *
     
    6785    public function __construct() {
    6886
    69         $this->plugin_name = 'Monk';
    70         $this->version = '0.6.0';
     87        $this->plugin_name      = 'Monk';
     88        $this->version          = '0.7.0';
     89        $this->default_language = get_option( 'monk_default_language', false );
     90        $this->active_languages = get_option( 'monk_active_languages', array() );
    7191
    7292        $this->load_dependencies();
    73         $this->set_locale();
     93        $this->set_locale( $this->get_default_language(), $this->get_active_languages() );
    7494        $this->define_global_hooks();
    75         $this->define_admin_hooks();
    76         $this->define_public_hooks();
    77         $this->define_link_hooks();
     95        $this->define_admin_hooks( $this->get_default_language(), $this->get_active_languages() );
     96        $this->define_public_hooks( $this->get_default_language(), $this->get_active_languages() );
     97        $this->define_link_hooks( $this->get_default_language(), $this->get_active_languages() );
    7898        $this->define_widget_hooks();
    7999    }
     
    151171     * with WordPress.
    152172     *
    153      * @since    0.1.0
    154      * @access   private
    155      * @return  void
    156      */
    157     private function set_locale() {
    158 
    159         $monk_i18n = new Monk_I18n();
     173     * @param    string $default_language The language defined by user.
     174     * @param    array  $active_languages Active languages to be used accorss the site.
     175     *
     176     * @since    0.1.0
     177     * @access   private
     178     * @return  void
     179     */
     180    private function set_locale( $default_language, $active_languages ) {
     181
     182        $monk_i18n = new Monk_I18n( $default_language, $active_languages );
    160183
    161184        $this->loader->add_action( 'plugins_loaded', $monk_i18n, 'load_plugin_textdomain' );
     
    180203     * of the plugin.
    181204     *
    182      * @since    0.1.0
    183      * @access   private
    184      * @return  void
    185      */
    186     private function define_admin_hooks() {
    187 
    188         $plugin_admin = new Monk_Admin( $this->get_plugin_name(), $this->get_version() );
     205     * @param   string $default_language The default language of the plugin.
     206     * @param   array  $active_languages The active languages of the plugin.
     207     *
     208     * @since   0.1.0
     209     * @access  private
     210     * @return  void
     211     */
     212    private function define_admin_hooks( $default_language, $active_languages ) {
     213        $plugin_admin = new Monk_Admin( $this->get_plugin_name(), $this->get_version(), $default_language, $active_languages );
    189214
    190215        $this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_styles' );
     
    202227        $this->loader->add_action( 'delete_attachment', $plugin_admin, 'monk_delete_post_data' );
    203228        $this->loader->add_action( 'restrict_manage_posts', $plugin_admin, 'monk_admin_languages_selector' );
     229        $this->loader->add_action( 'restrict_manage_comments', $plugin_admin, 'monk_admin_add_comments_language_selector' );
    204230        $this->loader->add_filter( 'pre_get_posts', $plugin_admin, 'monk_admin_posts_filter' );
    205231        $this->loader->add_filter( 'get_terms_defaults', $plugin_admin, 'monk_admin_terms_filter', 10, 2 );
     232        $this->loader->add_filter( 'comments_clauses', $plugin_admin, 'monk_admin_filter_comment_clauses', 10, 2 );
    206233        $this->loader->add_filter( 'manage_posts_columns', $plugin_admin, 'monk_language_column_head' );
    207234        $this->loader->add_filter( 'manage_pages_columns', $plugin_admin, 'monk_language_column_head' );
     
    232259     * of the plugin.
    233260     *
    234      * @since    0.1.0
    235      * @access   private
    236      * @return  void
    237      */
    238     private function define_public_hooks() {
    239 
    240         $plugin_public = new Monk_Public( $this->get_plugin_name(), $this->get_version() );
     261     * @param   string $default_language The default language of the plugin.
     262     * @param   array  $active_languages The active languages of the plugin.
     263     *
     264     * @since    0.1.0
     265     * @access   private
     266     * @return  void
     267     */
     268    private function define_public_hooks( $default_language, $active_languages ) {
     269
     270        $plugin_public = new Monk_Public( $this->get_plugin_name(), $this->get_version(), $default_language, $active_languages );
    241271
    242272        $this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_styles' );
    243273        $this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_scripts' );
    244 
     274        $this->loader->add_action( 'wp_head', $plugin_public, 'monk_print_localization_tags' );
    245275        $this->loader->add_action( 'pre_get_posts', $plugin_public, 'monk_public_posts_filter' );
    246276        $this->loader->add_filter( 'get_terms_defaults', $plugin_public, 'monk_public_terms_filter' );
    247277        $this->loader->add_filter( 'wp_nav_menu_args', $plugin_public, 'monk_filter_nav_menus' );
     278        $this->loader->add_filter( 'option_page_on_front', $plugin_public, 'monk_page_on_front_translations' );
    248279
    249280        $options = array(
     
    271302     * Register all of the hooks related to links and permalinks
    272303     *
     304     * @param   string $default_language The default language of the plugin.
     305     * @param   array  $active_languages The active languages of the plugin.
     306     *
    273307     * @since    0.2.0
    274308     * @access   private
    275309     */
    276     private function define_link_hooks() {
    277 
    278         $plugin_links = new Monk_Links( $this->get_plugin_name(), $this->get_version() );
     310    private function define_link_hooks( $default_language, $active_languages ) {
     311
     312        $plugin_links = new Monk_Links( $this->get_plugin_name(), $this->get_version(), $default_language, $active_languages );
    279313
    280314        $this->loader->add_action( 'init', $plugin_links, 'monk_add_home_rewrite_rule' );
     
    324358     */
    325359    public function add_term_hooks() {
    326         $plugin_admin = new Monk_Admin( $this->get_plugin_name(), $this->get_version() );
    327         $taxonomies = get_taxonomies();
     360        $plugin_admin = new Monk_Admin( $this->get_plugin_name(), $this->get_version(), $this->get_default_language(), $this->get_active_languages() );
     361        $taxonomies   = get_taxonomies();
    328362
    329363        foreach ( $taxonomies as $taxonomy ) {
     
    411445    }
    412446
     447    /**
     448     * Retrieve the default language of the plugin.
     449     *
     450     * @since     0.7.0
     451     * @return    string    The default language of the plugin.
     452     */
     453    public function get_default_language() {
     454        return $this->default_language;
     455    }
     456
     457    /**
     458     * Retrieve the active languages of the plugin.
     459     *
     460     * @since     0.7.0
     461     * @return    array    The active languages of the plugin.
     462     */
     463    public function get_active_languages() {
     464        return $this->active_languages;
     465    }
    413466}
  • monk/trunk/includes/monk-functions.php

    r1734509 r1807041  
    2222    $languages_codes = array_keys( $monk_languages );
    2323
    24     return in_array( $language_code , $language_codes, true );
     24    return in_array( $language_code, $language_codes, true );
    2525}
    2626
     
    5454
    5555    foreach ( $monk_languages as $locale => $data ) {
    56         if ( $data['slug'] === $slug ) {
     56        if ( $data['slug'] === $slug || $slug === $locale ) {
    5757            return $locale;
    5858        }
     
    7171 */
    7272function monk_get_url_args( $arg ) {
    73     $url    = $_SERVER['HTTP_REFERER'];
    74     $query  = parse_url( $url );
    75     $query  = array_key_exists( 'query', $query ) ? $query['query'] : '';
    76     $query  = parse_str( $query, $name );
     73    $url   = $_SERVER['HTTP_REFERER'];
     74    $query = wp_parse_url( $url );
     75    $query = array_key_exists( 'query', $query ) ? $query['query'] : '';
     76    $query = parse_str( $query, $name );
    7777
    7878    if ( isset( $name[ $arg ] ) ) {
     
    9696
    9797    if ( ! $monk_languages ) {
    98         $monk_languages['en_US']       = array(
     98        $monk_languages['en_US'] = array(
    9999            'native_name'  => 'English (United States)',
    100100            'english_name' => __( 'English (United States)', 'monk' ),
     
    130130                case 'es_CL':
    131131                case 'es_AR':
     132                case 'es_CR':
    132133                case 'fr_CA':
    133134                case 'fr_BE':
     
    167168    return $monk_languages;
    168169}
     170
     171/**
     172 * Retrieves translation data for current page.
     173 *
     174 * @since  0.7.0
     175 *
     176 * @return array $translation_data
     177 */
     178function monk_get_translations() {
     179    $monk           = new Monk();
     180    $monk_languages = monk_get_available_languages();
     181
     182    $translation_data         = array();
     183    $active_languages_slug    = array();
     184    $current_language_slug    = '';
     185    $active_languages         = $monk->get_active_languages();
     186    $default_language         = $monk->get_default_language();
     187    $has_default_language_url = get_option( 'monk_default_language_url', false );
     188    $current_locale           = monk_get_locale_by_slug( get_query_var( 'lang' ) );
     189    $default_slug             = $monk_languages[ $default_language ]['slug'];
     190
     191    if ( $current_locale && in_array( $current_locale, $active_languages, true ) ) {
     192        $current_language_slug = sanitize_text_field( get_query_var( 'lang' ) );
     193    } else {
     194        $current_language_slug = $monk_languages[ $default_language ]['slug'];
     195        $current_locale        = $default_language;
     196    }
     197
     198    foreach ( $monk_languages as $lang_code => $list ) {
     199        if ( in_array( $lang_code, $active_languages, true ) ) {
     200            $translation_data[ $list['slug'] ]['id']           = 0;
     201            $translation_data[ $list['slug'] ]['code']         = $lang_code;
     202            $translation_data[ $list['slug'] ]['slug']         = $list['slug'];
     203            $translation_data[ $list['slug'] ]['current']      = false;
     204            $translation_data[ $list['slug'] ]['native_name']  = $list['native_name'];
     205            $translation_data[ $list['slug'] ]['english_name'] = $list['english_name'];
     206            $translation_data[ $list['slug'] ]['url']          = null;
     207        }
     208    }
     209
     210    if ( is_front_page() || is_post_type_archive() || is_date() || is_404() || is_author() || is_search() ) {
     211
     212        foreach ( $active_languages as $code ) {
     213            $active_languages_slug[] = $monk_languages[ $code ]['slug'];
     214        }
     215
     216        foreach ( $active_languages_slug as $lang_slug ) {
     217            $current_url    = monk_get_current_url();
     218            $locale_by_slug = monk_get_locale_by_slug( $lang_slug );
     219
     220            if ( $lang_slug !== $current_language_slug ) {
     221                if ( get_option( 'permalink_structure', false ) ) {
     222                    if ( get_query_var( 'lang' ) ) {
     223                        $pattern     = '/\/(' . implode( '|', $active_languages_slug ) . ')/';
     224                        $current_url = remove_query_arg( 'lang', $current_url );
     225                        $current_url = is_ssl() ? str_replace( 'https://', '', $current_url ) : str_replace( 'http://', '', $current_url );
     226
     227                        if ( empty( $has_default_language_url ) && $lang_slug === $default_slug ) {
     228                            $current_url = preg_replace( $pattern, '', $current_url );
     229                        } else {
     230                            $current_url = preg_replace( $pattern, '/' . $lang_slug, $current_url );
     231                        }
     232
     233                        $current_url = is_ssl() ? 'https://' . $current_url : 'http://' . $current_url;
     234                    } else {
     235                        if ( dirname( $_SERVER['PHP_SELF'] ) === '\\' || dirname( $_SERVER['PHP_SELF'] ) === '/' ) {
     236                            $current_url = str_replace( home_url(), home_url() . $lang_slug . '/', $current_url );
     237                        } else {
     238                            $current_url = str_replace( dirname( $_SERVER['PHP_SELF'] ), trailingslashit( dirname( $_SERVER['PHP_SELF'] ) ) . $lang_slug, $current_url );
     239                        }
     240                    }
     241                    $translation_data[ $lang_slug ]['url'] = $current_url;
     242                } else {
     243                    if ( empty( $has_default_language_url ) && $lang_slug === $default_slug ) {
     244                        $translation_data[ $lang_slug ]['url'] = remove_query_arg( 'lang', $current_url );
     245                    } else {
     246                        $translation_data[ $lang_slug ]['url'] = add_query_arg( 'lang', sanitize_key( $lang_slug ) );
     247                    }
     248                }
     249            }
     250        }
     251    } // End if().
     252
     253    if ( ( is_singular() && ! is_front_page() ) ) {
     254        $current_id         = get_the_id();
     255        $current_locale     = get_post_meta( $current_id, '_monk_post_language', true );
     256        $translations_id    = get_post_meta( $current_id, '_monk_post_translations_id', true );
     257        $total_translations = get_option( 'monk_post_translations_' . $translations_id, false );
     258
     259        if ( $current_locale ) {
     260            $current_language_slug = $monk_languages[ $current_locale ]['slug'];
     261        } else {
     262            $current_language_slug = $monk_languages[ $default_language ]['slug'];
     263            $current_locale        = $default_language;
     264        }
     265
     266        if ( is_array( $total_translations ) ) {
     267            foreach ( $total_translations as $lang_code => $post_id ) {
     268                if ( in_array( $lang_code, $active_languages, true ) || $monk_languages[ $lang_code ]['slug'] === $current_language_slug ) {
     269                    $monk_translations[ $lang_code ] = $post_id;
     270                }
     271            }
     272        } else {
     273            $monk_translations[ $current_locale ] = $current_id;
     274        }
     275
     276        foreach ( $monk_translations as $lang_code => $post_id ) {
     277            $translation_data[ $monk_languages[ $lang_code ]['slug'] ]['url'] = get_permalink( $post_id );
     278            $translation_data[ $monk_languages[ $lang_code ]['slug'] ]['id']  = $post_id;
     279        }
     280
     281        foreach ( $active_languages as $code ) {
     282            if ( in_array( $code, $monk_translations, true ) ) {
     283                $translation_data[ $monk_languages[ $code ]['slug'] ]['code']         = $code;
     284                $translation_data[ $monk_languages[ $code ]['slug'] ]['native_name']  = $monk_languages[ $code ]['native_name'];
     285                $translation_data[ $monk_languages[ $code ]['slug'] ]['english_name'] = $monk_languages[ $code ]['english_name'];
     286            }
     287        }
     288    } // End if().
     289
     290    if ( is_archive() && ( is_category() || is_tag() || is_tax() ) ) {
     291        $monk_term_translations_id = get_term_meta( get_queried_object_id(), '_monk_term_translations_id', true );
     292        $total_translations        = get_option( 'monk_term_translations_' . $monk_term_translations_id, false );
     293
     294        if ( get_term_meta( get_queried_object_id(), '_monk_term_language', true ) ) {
     295            $current_language_slug = $monk_languages[ get_term_meta( get_queried_object_id(), '_monk_term_language', true ) ]['slug'];
     296            $current_locale        = get_term_meta( get_queried_object_id(), '_monk_term_language', true );
     297        } else {
     298            $current_language_slug = $monk_languages[ $default_language ]['slug'];
     299            $current_locale        = $default_language;
     300        }
     301
     302        if ( is_array( $total_translations ) ) {
     303            foreach ( $total_translations as $lang_code => $term_id ) {
     304                if ( in_array( $lang_code, $active_languages, true ) || $monk_languages[ $lang_code ]['slug'] === $current_language_slug ) {
     305                    $monk_translations[ $lang_code ] = $term_id;
     306                }
     307            }
     308        } else {
     309            $monk_translations[ $current_locale ] = get_the_id();
     310        }
     311
     312        if ( $monk_translations ) {
     313            foreach ( $monk_translations as $lang_code => $term_id ) {
     314                if ( $monk_languages[ $lang_code ]['slug'] !== $current_language_slug ) {
     315                    $translation_data[ $monk_languages[ $lang_code ]['slug'] ]['url'] = get_term_link( $term_id );
     316                }
     317            }
     318        } else {
     319            $current_language_slug                       = $monk_languages[ $monk->get_default_language() ]['slug'];
     320            $monk_translations[ $current_language_slug ] = get_queried_object_id();
     321
     322            foreach ( $monk_translations as $lang_code => $term_id ) {
     323                if ( $lang_code !== $current_language_slug ) {
     324                    $translation_data[ $monk_languages[ $lang_code ]['slug'] ]['url'] = get_term_link( $term_id );
     325                }
     326            }
     327        }
     328    } // End if().
     329
     330    foreach ( $translation_data as $slug => $list ) {
     331        if ( $current_language_slug === $slug ) {
     332            $translation_data[ $slug ]['current'] = true;
     333        }
     334    }
     335
     336    return $translation_data;
     337}
     338
     339/**
     340 * Function to get post translation id.
     341 *
     342 * Retrieves ID of translation in a given language or in current site language.
     343 *
     344 * @param  int    $id   Id of the post.
     345 * @param  string $lang Language slug.
     346 *
     347 * @return int    $id   Id of post translation.
     348 */
     349function monk_translated_post_id( $id, $lang = null ) {
     350    if ( empty( $lang ) ) {
     351        $monk             = new Monk();
     352        $default_language = $monk->get_default_language();
     353        $lang             = get_query_var( 'lang', $default_language );
     354    }
     355
     356    $current_language = monk_get_locale_by_slug( $lang );
     357    $post_group_id    = get_post_meta( $id, '_monk_post_translations_id', true );
     358    $page_group       = get_option( 'monk_post_translations_' . $post_group_id, array() );
     359
     360    $id = array_key_exists( $current_language, $page_group ) ? $page_group[ $current_language ] : $id;
     361
     362    return $id;
     363}
  • monk/trunk/languages/monk.pot

    r1734509 r1807041  
    22# Copyright (C) 2016
    33# This file is distributed under the GNU General Public License v2 or later.
     4#, fuzzy
    45msgid ""
    56msgstr ""
    67"Project-Id-Version: Monk 0.1.0\n"
    78"Report-Msgid-Bugs-To: Monk\n"
    8 "POT-Creation-Date: 2017-09-22 18:42-0300\n"
     9"POT-Creation-Date: 2018-01-22 08:54-0200\n"
    910"PO-Revision-Date: \n"
    1011"Last-Translator: Breno Alves\n"
     
    1920"X-Poedit-KeywordsList: __;_e;esc_html_e;esc_html_x:1,2c;esc_html__;"
    2021"esc_attr_e;esc_attr_x:1,2c;esc_attr__;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;"
    21 "_x:1,2c;_n:1,2;_n_noop:1,2;__ngettext:1,2;__ngettext_noop:1,2;_c,_nc:4c,1,2\n"
     22"_x:1,2c;_n:1,2;_n_noop:1,2;__ngettext:1,2;__ngettext_noop:1,2;_c,"
     23"_nc:4c,1,2\n"
    2224"X-Poedit-Basepath: ..\n"
    23 "X-Generator: Poedit 1.5.4\n"
     25"X-Generator: Poedit 2.0.3\n"
    2426"X-Poedit-SearchPath-0: .\n"
    2527
    26 #: includes/monk-functions.php:100
    27 msgid "English (United States)"
    28 msgstr ""
    29 
    30 #: widgets/class-monk-language-switcher.php:32
    31 msgid "Switch between site translations."
    32 msgstr ""
    33 
    34 #: widgets/class-monk-language-switcher.php:34
    35 #: widgets/class-monk-language-switcher.php:231
    36 msgid "Language Switcher"
    37 msgstr ""
    38 
    39 #: widgets/class-monk-language-switcher.php:49
    40 #: widgets/partials/admin-monk-language-switcher.php:16
    41 msgid "Languages"
    42 msgstr ""
    43 
    44 #: widgets/class-monk-language-switcher.php:246
    45 msgid "Background"
    46 msgstr ""
    47 
    48 #: widgets/class-monk-language-switcher.php:261
    49 msgid "Text"
    50 msgstr ""
    51 
    52 #: widgets/class-monk-language-switcher.php:276
    53 msgid "Background Hover"
    54 msgstr ""
    55 
    56 #: widgets/class-monk-language-switcher.php:291
    57 msgid "Text Hover"
    58 msgstr ""
    59 
    60 #: widgets/partials/admin-monk-language-switcher.php:21
    61 msgid "Title: "
    62 msgstr ""
    63 
    64 #: widgets/partials/admin-monk-language-switcher.php:25
    65 msgid "Hide Flags"
    66 msgstr ""
    67 
    68 #: widgets/partials/admin-monk-language-switcher.php:29
    69 msgid "Monk Love"
    70 msgstr ""
    71 
    72 #: widgets/partials/public-monk-language-switcher.php:43
    73 msgid "No other translations"
    74 msgstr ""
    75 
    76 #: widgets/partials/public-monk-language-switcher.php:68
    77 #, php-format
    78 msgid "Made with %1$s by %2$s"
    79 msgstr ""
    80 
    81 #: admin/class-monk-admin.php:74
    82 msgid "Language packs updated"
    83 msgstr ""
    84 
    85 #: admin/class-monk-admin.php:75
    86 msgid "Error on update language packs! Try again."
    87 msgstr ""
    88 
    89 #: admin/class-monk-admin.php:76
    90 msgid "Posts and terms language updated"
    91 msgstr ""
    92 
    93 #: admin/class-monk-admin.php:77
    94 msgid "Error on update posts and terms language! Try again."
    95 msgstr ""
    96 
    97 #: admin/class-monk-admin.php:78
    98 msgid "Select the checkbox."
    99 msgstr ""
    100 
    101 #: admin/class-monk-admin.php:79
    102 msgid "Site title and description updated"
    103 msgstr ""
    104 
    105 #: admin/class-monk-admin.php:80
    106 msgid "Error on update site title and descripition! Try again."
    107 msgstr ""
    108 
    109 #: admin/class-monk-admin.php:132
     28#: admin/class-monk-admin.php:145
    11029msgid "Monk Settings"
    11130msgstr ""
    11231
    113 #: admin/class-monk-admin.php:155
     32#: admin/class-monk-admin.php:168
    11433#: admin/partials/admin-monk-settings-tabs-render.php:18
    11534msgid "Tools"
    11635msgstr ""
    11736
    118 #: admin/class-monk-admin.php:163
     37#: admin/class-monk-admin.php:176
    11938#: admin/partials/admin-monk-settings-tabs-render.php:19
    12039msgid "Options"
    12140msgstr ""
    12241
    123 #: admin/class-monk-admin.php:172
     42#: admin/class-monk-admin.php:185
    12443msgid "General Settings"
    12544msgstr ""
    12645
    127 #: admin/class-monk-admin.php:182
     46#: admin/class-monk-admin.php:195
    12847msgid "Default site language"
    12948msgstr ""
    13049
    131 #: admin/class-monk-admin.php:191
     50#: admin/class-monk-admin.php:204
    13251#: admin/partials/admin-monk-post-meta-box-field-render.php:80
    13352msgid "Add new translation"
    13453msgstr ""
    13554
    136 #: admin/class-monk-admin.php:200
     55#: admin/class-monk-admin.php:213
    13756msgid "Set default language to all posts and terms without language"
    13857msgstr ""
    13958
    140 #: admin/class-monk-admin.php:209
     59#: admin/class-monk-admin.php:222
    14160msgid "Show default language in URL"
    14261msgstr ""
    14362
    144 #: admin/class-monk-admin.php:218
     63#: admin/class-monk-admin.php:231
    14564msgid "Site Title"
    14665msgstr ""
    14766
    148 #: admin/class-monk-admin.php:227
     67#: admin/class-monk-admin.php:240
    14968msgid "Tagline"
    15069msgstr ""
    15170
    152 #: admin/class-monk-admin.php:255
     71#: admin/class-monk-admin.php:268
    15372msgid "Here you can configure your language preferences."
    15473msgstr ""
    15574
    156 #: admin/class-monk-admin.php:256
     75#: admin/class-monk-admin.php:269
    15776msgid ""
    15877"Select a default language for your site and check the languages you will "
     
    16079msgstr ""
    16180
    162 #: admin/class-monk-admin.php:429 admin/class-monk-admin.php:831
    163 #: admin/class-monk-admin.php:1311
    164 #: admin/partials/admin-monk-language-update-term.php:20
     81#: admin/class-monk-admin.php:442 admin/class-monk-admin.php:852
     82#: admin/class-monk-admin.php:1335
    16583#: admin/partials/admin-monk-language-term.php:19
    16684#: admin/partials/admin-monk-language-term.php:39
     85#: admin/partials/admin-monk-language-update-term.php:20
    16786msgid "Language"
    16887msgstr ""
    16988
    170 #: admin/class-monk-admin.php:1216
     89#: admin/class-monk-admin.php:1237
    17190msgid "No translations available"
    17291msgstr ""
    17392
    174 #: admin/class-monk-admin.php:1317
     93#: admin/class-monk-admin.php:1341
    17594msgid "Translate"
    17695msgstr ""
    17796
    178 #: admin/partials/admin-monk-select-menu-to-edit-render.php:35
    179 #, php-format
    180 msgid "Translations of %s"
    181 msgstr ""
    182 
    183 #: admin/partials/admin-monk-select-menu-to-edit-render.php:55
    184 msgid "— Select a Menu —"
    185 msgstr ""
    186 
    187 #: admin/partials/admin-monk-select-menu-to-edit-render.php:113
    188 msgid "None"
    189 msgstr ""
    190 
     97#: admin/partials/admin-monk-comments-language-selector-render.php:19
    19198#: admin/partials/admin-monk-term-language-selector-render.php:23
    19299#: admin/partials/monk-language-filter.php:21
    193100msgid "All Languages"
    194 msgstr ""
    195 
    196 #: admin/partials/admin-monk-settings-tabs-render.php:17
    197 msgid "General"
    198 msgstr ""
    199 
    200 #: admin/partials/admin-monk-term-translation.php:21
    201 #: admin/partials/admin-monk-post-meta-box-field-render.php:74
    202 msgid "Translations"
    203 msgstr ""
    204 
    205 #: admin/partials/admin-monk-term-translation.php:47
    206 msgid "Add a translation +"
    207 msgstr ""
    208 
    209 #: admin/partials/admin-monk-term-translation.php:50
    210 msgid "You must set a language before add translations."
    211101msgstr ""
    212102
     
    223113msgstr ""
    224114
     115#: admin/partials/admin-monk-language-term.php:50
     116msgid "This is a translation of "
     117msgstr ""
     118
     119#: admin/partials/admin-monk-menu-translation-fields-render.php:22
     120msgid "Add translation +"
     121msgstr ""
     122
     123#: admin/partials/admin-monk-menu-translation-fields-render.php:62
     124msgid "Menu Translations"
     125msgstr ""
     126
     127#: admin/partials/admin-monk-menu-translation-fields-render.php:65
     128msgid "This menu does not have translations. "
     129msgstr ""
     130
     131#: admin/partials/admin-monk-menu-translation-fields-render.php:67
     132msgid "You can add one here. "
     133msgstr ""
     134
     135#: admin/partials/admin-monk-notice-render.php:13
     136msgid "Monk: "
     137msgstr ""
     138
     139#: admin/partials/admin-monk-notice-render.php:13
     140msgid "You need to "
     141msgstr ""
     142
     143#: admin/partials/admin-monk-notice-render.php:14
     144msgid "configure your language preferences"
     145msgstr ""
     146
    225147#: admin/partials/admin-monk-options-description.php:16
    226148msgid "Here you can translate some data referring to your site."
    227149msgstr ""
    228150
    229 #: admin/partials/admin-monk-notice-render.php:13
    230 msgid "Monk: "
    231 msgstr ""
    232 
    233 #: admin/partials/admin-monk-notice-render.php:13
    234 msgid "You need to "
    235 msgstr ""
    236 
    237 #: admin/partials/admin-monk-notice-render.php:14
    238 msgid "configure your language preferences"
     151#: admin/partials/admin-monk-post-meta-box-field-render.php:21
     152msgid "Post language"
     153msgstr ""
     154
     155#. translators: This is a message to display the post being translated
     156#: admin/partials/admin-monk-post-meta-box-field-render.php:57
     157#, php-format
     158msgid "Translating \"%s\"."
     159msgstr ""
     160
     161#: admin/partials/admin-monk-post-meta-box-field-render.php:74
     162#: admin/partials/admin-monk-term-translation.php:21
     163msgid "Translations"
     164msgstr ""
     165
     166#: admin/partials/admin-monk-post-meta-box-field-render.php:78
     167#: admin/partials/monk-language-column.php:29
     168msgid "Add+"
     169msgstr ""
     170
     171#: admin/partials/admin-monk-post-meta-box-field-render.php:150
     172#: admin/partials/admin-monk-post-meta-box-field-render.php:189
     173msgid "Cancel"
     174msgstr ""
     175
     176#: admin/partials/admin-monk-post-meta-box-field-render.php:165
     177msgid "Edit"
     178msgstr ""
     179
     180#: admin/partials/admin-monk-post-meta-box-field-render.php:167
     181msgid "Change current language"
     182msgstr ""
     183
     184#: admin/partials/admin-monk-post-meta-box-field-render.php:208
     185msgid "Not translated, add one"
     186msgstr ""
     187
     188#. translators: This is a label to display the translations group
     189#: admin/partials/admin-monk-select-menu-to-edit-render.php:35
     190#, php-format
     191msgid "Translations of %s"
     192msgstr ""
     193
     194#: admin/partials/admin-monk-select-menu-to-edit-render.php:55
     195msgid "— Select a Menu —"
     196msgstr ""
     197
     198#: admin/partials/admin-monk-select-menu-to-edit-render.php:113
     199msgid "No assigned location"
     200msgstr ""
     201
     202#: admin/partials/admin-monk-settings-render.php:60
     203msgid "Select the checkbox."
    239204msgstr ""
    240205
     
    249214#: admin/partials/admin-monk-settings-render.php:76
    250215msgid "Downloading packages..."
     216msgstr ""
     217
     218#: admin/partials/admin-monk-settings-render.php:80
     219msgid "Done!"
     220msgstr ""
     221
     222#: admin/partials/admin-monk-settings-render.php:81
     223msgid "Error. Try again."
     224msgstr ""
     225
     226#: admin/partials/admin-monk-settings-tabs-render.php:17
     227msgid "General"
     228msgstr ""
     229
     230#: admin/partials/admin-monk-term-translation.php:47
     231msgid "Add a translation +"
     232msgstr ""
     233
     234#: admin/partials/admin-monk-term-translation.php:50
     235msgid "You must set a language before add translations."
    251236msgstr ""
    252237
     
    260245msgstr ""
    261246
    262 #: admin/partials/monk-language-column.php:29
    263 #: admin/partials/admin-monk-post-meta-box-field-render.php:78
    264 msgid "Add+"
     247#: admin/partials/admin-monk-widget-notice.php:24
     248msgid "Remember to activate the "
     249msgstr ""
     250
     251#: admin/partials/admin-monk-widget-notice.php:24
     252msgid "language switcher."
    265253msgstr ""
    266254
     
    269257msgstr ""
    270258
    271 #: admin/partials/admin-monk-language-term.php:50
    272 msgid "This is a translation of "
    273 msgstr ""
    274 
    275 #: admin/partials/admin-monk-menu-translation-fields-render.php:22
    276 msgid "Add translation +"
    277 msgstr ""
    278 
    279 #: admin/partials/admin-monk-menu-translation-fields-render.php:62
    280 msgid "Menu Translations"
    281 msgstr ""
    282 
    283 #: admin/partials/admin-monk-menu-translation-fields-render.php:65
    284 msgid "This menu does not have translations. "
    285 msgstr ""
    286 
    287 #: admin/partials/admin-monk-menu-translation-fields-render.php:67
    288 msgid "You can add one here. "
    289 msgstr ""
    290 
    291 #: admin/partials/admin-monk-post-meta-box-field-render.php:21
    292 msgid "Post language"
    293 msgstr ""
    294 
    295 #: admin/partials/admin-monk-post-meta-box-field-render.php:57
     259#: includes/monk-functions.php:100
     260msgid "English (United States)"
     261msgstr ""
     262
     263#: widgets/class-monk-language-switcher.php:52
     264msgid "Switch between site translations."
     265msgstr ""
     266
     267#: widgets/class-monk-language-switcher.php:54
     268#: widgets/class-monk-language-switcher.php:134
     269msgid "Language Switcher"
     270msgstr ""
     271
     272#: widgets/class-monk-language-switcher.php:69
     273#: widgets/partials/admin-monk-language-switcher.php:16
     274msgid "Languages"
     275msgstr ""
     276
     277#: widgets/class-monk-language-switcher.php:149
     278msgid "Background"
     279msgstr ""
     280
     281#: widgets/class-monk-language-switcher.php:164
     282msgid "Text"
     283msgstr ""
     284
     285#: widgets/class-monk-language-switcher.php:179
     286msgid "Background Hover"
     287msgstr ""
     288
     289#: widgets/class-monk-language-switcher.php:194
     290msgid "Text Hover"
     291msgstr ""
     292
     293#: widgets/partials/admin-monk-language-switcher.php:21
     294msgid "Title: "
     295msgstr ""
     296
     297#: widgets/partials/admin-monk-language-switcher.php:25
     298msgid "Hide Flags"
     299msgstr ""
     300
     301#: widgets/partials/admin-monk-language-switcher.php:29
     302msgid "Monk Love"
     303msgstr ""
     304
     305#. translators: This is a message that says a content has no translations
     306#: widgets/partials/public-monk-language-switcher.php:45
     307msgid "No other translations"
     308msgstr ""
     309
     310#. translators: This is a message to say the user is with us
     311#: widgets/partials/public-monk-language-switcher.php:70
    296312#, php-format
    297 msgid "Translating \"%s\"."
    298 msgstr ""
    299 
    300 #: admin/partials/admin-monk-post-meta-box-field-render.php:150
    301 #: admin/partials/admin-monk-post-meta-box-field-render.php:189
    302 msgid "Cancel"
    303 msgstr ""
    304 
    305 #: admin/partials/admin-monk-post-meta-box-field-render.php:165
    306 msgid "Edit"
    307 msgstr ""
    308 
    309 #: admin/partials/admin-monk-post-meta-box-field-render.php:167
    310 msgid "Change current language"
    311 msgstr ""
    312 
    313 #: admin/partials/admin-monk-post-meta-box-field-render.php:208
    314 msgid "Not translated, add one"
    315 msgstr ""
    316 
    317 #: admin/partials/admin-monk-widget-notice.php:24
    318 msgid "Remember to activate the "
    319 msgstr ""
    320 
    321 #: admin/partials/admin-monk-widget-notice.php:24
    322 msgid "language switcher."
    323 msgstr ""
     313msgid "Made with %1$s by %2$s"
     314msgstr ""
  • monk/trunk/monk.php

    r1734509 r1807041  
    44 * Plugin URI:        https://wordpress.org/plugins/monk
    55 * Description:       Monk is a lightweight translation plugin to make your content reach the world.
    6  * Version:           0.6.0
     6 * Version:           0.7.0
    77 * Author:            Breno Alves
    88 * Author URI:        https://github.com/brenoalvs
  • monk/trunk/public/class-monk-public.php

    r1720925 r1807041  
    3636
    3737    /**
     38     * The default language of the plugin.
     39     *
     40     * @since    0.7.0
     41     * @access   private
     42     * @var      string    $default_language    The default language of the plugin.
     43     */
     44    private $default_language;
     45
     46    /**
     47     * The active languages of the plugin.
     48     *
     49     * @since    0.7.0
     50     * @access   private
     51     * @var      array $active_languages The active languages of the plugin.
     52     */
     53    private $active_languages;
     54
     55    /**
    3856     * Initialize the class and set its properties.
    3957     *
    40      * @since    0.1.0
    41      * @param      string $monk       The name of the plugin.
    42      * @param      string $version    The version of this plugin.
    43      * @return void
    44      */
    45     public function __construct( $monk, $version ) {
    46         $this->plugin_name = $monk;
    47         $this->version = $version;
     58     * @since  0.1.0
     59     * @param  string $monk             The name of the plugin.
     60     * @param  string $version          The version of this plugin.
     61     * @param  string $default_language The default language of the plugin.
     62     * @param  array  $active_languages The active languages of the plugin.
     63     * @return void
     64     */
     65    public function __construct( $monk, $version, $default_language, $active_languages ) {
     66        $this->plugin_name      = $monk;
     67        $this->version          = $version;
     68        $this->default_language = $default_language;
     69        $this->active_languages = $active_languages;
    4870    }
    4971
     
    82104        $filter_main_query = false;
    83105
    84         if ( is_home() || is_front_page() || is_archive() || is_search() ) {
     106        if ( is_home() || is_archive() || is_search() ) {
    85107            $filter_main_query = true;
    86108        }
     
    93115
    94116        $query_args       = array();
    95         $default_language = get_option( 'monk_default_language', false );
    96         $active_languages = get_option( 'monk_active_languages', false );
     117        $default_language = $this->default_language;
     118        $active_languages = $this->active_languages;
    97119        $default_slug     = $monk_languages[ $default_language ]['slug'];
    98         $current_language = get_query_var( 'lang', $default_slug );
    99         $current_language = monk_get_locale_by_slug( $current_language );
     120        $lang             = get_query_var( 'lang', $default_slug );
     121        $current_language = monk_get_locale_by_slug( $lang );
     122
     123        // Hotfix for translatable static front page.
     124        if ( is_home() && 'page' === get_option( 'show_on_front' ) && ! is_page( get_option( 'page_for_posts' ) ) ) {
     125            $front_page_id     = get_option( 'page_on_front' );
     126            $group_id          = get_post_meta( $front_page_id, '_monk_post_translations_id', true );
     127            $translation_group = get_option( 'monk_post_translations_' . $group_id, false );
     128
     129            $query->set( 'page_id', $translation_group[ $current_language ] );
     130            $query->is_home     = false;
     131            $query->is_page     = true;
     132            $query->is_singular = true;
     133            return;
     134        }
    100135
    101136        if ( $current_language && in_array( $current_language, $active_languages ) ) {
     
    120155        }
    121156
    122         $query->set( 'meta_query', array( $query_args ) );
     157        $meta_query = $query->get( 'meta_query' );
     158
     159        if ( is_array( $meta_query ) ) {
     160            $query_args = array_merge( $meta_query, $query_args );
     161        }
     162
     163        $query->set( 'meta_query', $query_args );
    123164    }
    124165
     
    138179        $monk_languages = monk_get_available_languages();
    139180
    140         $default_language = get_option( 'monk_default_language', false );
    141         $active_languages = get_option( 'monk_active_languages', false );
     181        $default_language = $this->default_language;
     182        $active_languages = $this->active_languages;
    142183        $default_slug     = $monk_languages[ $default_language ]['slug'];
    143184        $current_language = get_query_var( 'lang', $default_slug );
    144185        $current_language = monk_get_locale_by_slug( $current_language );
     186        $old_meta_query   = $args['meta_query'];
    145187
    146188        if ( $current_language && in_array( $current_language, $active_languages ) ) {
     
    167209        }
    168210
     211        if ( is_array( $old_meta_query ) ) {
     212            $args['meta_query'] = array_merge( $old_meta_query, $args['meta_query'] );
     213        }
     214
    169215        return $args;
    170216    }
     
    182228        $menus            = get_nav_menu_locations();
    183229        $language         = get_query_var( 'lang' );
    184         $default_language = get_option( 'monk_default_language', false );
     230        $default_language = $this->default_language;
    185231
    186232        if ( $language ) {
     
    199245                    } else {
    200246                        $menu_id_fallback = array_shift( $monk_translations );
    201                         $args['menu'] = $menu_id_fallback;
     247                        $args['menu']     = $menu_id_fallback;
    202248                    }
    203249                }
     
    218264     */
    219265    public function monk_filter_translatable_option( $pre_option, $option ) {
    220         $default_language = get_option( 'monk_default_language', false );
     266        $default_language = $this->default_language;
    221267        $current_slug     = get_query_var( 'lang', false );
    222268        $current_locale   = monk_get_locale_by_slug( $current_slug );
     
    228274        return $pre_option;
    229275    }
     276
     277    /**
     278     * Retrieves translation in current language for page_on_front option.
     279     *
     280     * @param  int $page_id The page on front ID configured by user.
     281     * @return int          Page on front translation ID.
     282     */
     283    public function monk_page_on_front_translations( $page_id ) {
     284        if ( ! is_admin() ) {
     285            $page_id = monk_translated_post_id( $page_id );
     286        }
     287
     288        return $page_id;
     289    }
     290
     291    /**
     292     * Prints the hreflang tags according to the current content.
     293     *
     294     * @return void
     295     */
     296    public function monk_print_localization_tags() {
     297        if ( is_admin() ) {
     298            return;
     299        }
     300
     301        $monk_localization_data = array();
     302        $translation_data       = monk_get_translations();
     303
     304        foreach ( $translation_data as $slug => $data ) {
     305            $monk_localization_data[ $slug ] = $data['url'];
     306        }
     307
     308        $monk_localization_data = apply_filters( 'monk_hreflang_tags', $monk_localization_data );
     309
     310        foreach ( $monk_localization_data as $slug => $url ) {
     311            if ( null !== $url ) {
     312                echo '<link rel="alternate" href="' . esc_url( $url ) . '" hreflang="' . esc_attr( $slug ) . '" />' . PHP_EOL;
     313            }
     314        }
     315    }
    230316}
  • monk/trunk/widgets/class-monk-language-switcher.php

    r1734509 r1807041  
    2323
    2424    /**
     25     * The default language of the plugin.
     26     *
     27     * @since    0.7.0
     28     * @access   private
     29     * @var      string    $default_language    The default language of the plugin.
     30     */
     31    private $default_language;
     32
     33    /**
     34     * The active languages of the plugin.
     35     *
     36     * @since    0.7.0
     37     * @access   private
     38     * @var      array $active_languages The active languages of the plugin.
     39     */
     40    private $active_languages;
     41
     42    /**
    2543     * Sets up the widgets classname and description.
    2644     *
     
    2846     */
    2947    public function __construct() {
    30         $widget_options = array(
     48        $this->default_language = get_option( 'monk_default_language', false );
     49        $this->active_languages = get_option( 'monk_active_languages', array() );
     50        $widget_options         = array(
    3151            'classname'   => 'monk_language_switcher',
    3252            'description' => __( 'Switch between site translations.', 'monk' ),
     
    5070        $flag                     = ! empty( $instance['flag'] ) ? true : false;
    5171        $monk_love                = ! empty( $instance['monk_love'] ) ? true : false;
    52         $active_languages         = get_option( 'monk_active_languages' );
     72        $active_languages         = $this->active_languages;
    5373        $current_language         = '';
    5474        $monk_languages_reverted  = array();
    55         $default_language         = get_option( 'monk_default_language', false );
     75        $default_language         = $this->default_language;
    5676        $default_slug             = $monk_languages[ $default_language ]['slug'];
    5777        $has_default_language_url = get_option( 'monk_default_language_url', false );
    58         $current_locale             = monk_get_locale_by_slug( get_query_var( 'lang' ) );
    59 
    60         if ( get_query_var( 'lang' ) && in_array( $current_locale, $active_languages ) ) {
    61             $current_language = sanitize_text_field( get_query_var( 'lang' ) );
    62         } else {
    63             $current_language = $monk_languages[ $default_language ]['slug'];
     78        $current_locale           = monk_get_locale_by_slug( get_query_var( 'lang' ) );
     79
     80        $translation_data = monk_get_translations();
     81
     82        foreach ( $translation_data as $slug => $data ) {
     83            if ( ! empty( $data['url'] ) ) {
     84                $switchable_languages[ $slug ] = $data['url'];
     85            }
     86            if ( true === $translation_data[ $slug ]['current'] ) {
     87                $current_language = $slug;
     88            }
    6489        }
    65 
    66         if ( is_front_page() || is_post_type_archive() || is_date() || is_404() || is_author() || is_search() ) {
    67 
    68             foreach ( $active_languages as $code ) {
    69                 $active_languages_slug[] = $monk_languages[ $code ]['slug'];
    70             }
    71 
    72             foreach ( $active_languages_slug as $lang_code ) {
    73                 $current_url = monk_get_current_url();
    74 
    75                 if ( $lang_code !== $current_language ) {
    76                     if ( get_option( 'permalink_structure', false ) ) {
    77                         if ( get_query_var( 'lang' ) ) {
    78                             $pattern                  = '/\/(' . implode( '|', $active_languages_slug ) . ')/';
    79                             $current_url              = remove_query_arg( 'lang', $current_url );
    80                             $current_url              = is_ssl() ? str_replace( 'https://', '', $current_url ) : str_replace( 'http://', '', $current_url );
    81 
    82                             if ( empty( $has_default_language_url ) && $lang_code === $default_slug ) {
    83                                 $current_url = preg_replace( $pattern, '', $current_url );
    84                             } else {
    85                                 $current_url = preg_replace( $pattern, '/' . $lang_code, $current_url );
    86                             }
    87 
    88                             $current_url = is_ssl() ? 'https://' . $current_url : 'http://' . $current_url;
    89                         } else {
    90                             if ( dirname( $_SERVER['PHP_SELF'] ) === '\\' || dirname( $_SERVER['PHP_SELF'] ) === '/' ) {
    91                                 $current_url = str_replace( home_url(), home_url() . $lang_code . '/', $current_url );
    92                             } else {
    93                                 $current_url = str_replace( dirname( $_SERVER['PHP_SELF'] ), trailingslashit( dirname( $_SERVER['PHP_SELF'] ) ) . $lang_code, $current_url );
    94                             }
    95                         }
    96                         $switchable_languages[ $lang_code ] = $current_url;
    97                     } else {
    98                         if ( empty( $has_default_language_url ) && $lang_code === $default_slug ) {
    99                             $switchable_languages[ $lang_code ] = remove_query_arg( 'lang', $current_url );
    100                         } else {
    101                             $switchable_languages[ $lang_code ] = add_query_arg( 'lang', sanitize_key( $lang_code ) );
    102                         }
    103                     }
    104                 }
    105             }
    106         } // End if().
    107 
    108         if ( is_singular() ) {
    109             $current_id                = get_the_id();
    110             $monk_post_translations_id = get_post_meta( $current_id, '_monk_post_translations_id', true );
    111             $monk_total_translations   = get_option( 'monk_post_translations_' . $monk_post_translations_id, false );
    112 
    113             if ( get_post_meta( $current_id, '_monk_post_language', true ) ) {
    114                 $current_language = $monk_languages[ get_post_meta( $current_id, '_monk_post_language', true ) ]['slug'];
    115                 $current_locale   = get_post_meta( $current_id, '_monk_post_language', true );
    116             } else {
    117                 $current_language = $monk_languages[ $default_language ]['slug'];
    118                 $current_locale   = $default_language;
    119             }
    120 
    121             if ( is_array( $monk_total_translations ) ) {
    122                 foreach ( $monk_total_translations as $lang_code => $post_id ) {
    123                     if ( in_array( $lang_code, $active_languages, true ) || $monk_languages[ $lang_code ]['slug'] === $current_language ) {
    124                         $monk_translations[ $lang_code ] = $post_id;
    125                     }
    126                 }
    127             } else {
    128                 $monk_translations[ $current_locale ] = $current_id;
    129             }
    130 
    131             if ( $monk_translations ) {
    132                 foreach ( $monk_translations as $lang_code => $post_id ) {
    133                     if ( $monk_languages[ $lang_code ]['slug'] !== $current_language ) {
    134                         $switchable_languages[ $monk_languages[ $lang_code ]['slug'] ] = get_permalink( $post_id );
    135                     }
    136                 }
    137             } else {
    138                 $current_language                       = $monk_languages[ get_option( 'monk_default_language', false ) ]['slug'];
    139                 $monk_translations[ $current_language ] = $current_id;
    140                 foreach ( $monk_translations as $lang_code => $post_id ) {
    141                     if ( $lang_code !== $current_language ) {
    142                         $switchable_languages[ $lang_code ] = get_permalink( $post_id );
    143                     }
    144                 }
    145             }
    146         } // End if().
    147 
    148         if ( is_archive() && ( is_category() || is_tag() || is_tax() ) ) {
    149             $monk_term_translations_id = get_term_meta( get_queried_object_id(), '_monk_term_translations_id', true );
    150             $monk_total_translations   = get_option( 'monk_term_translations_' . $monk_term_translations_id, false );
    151 
    152             if ( get_term_meta( get_queried_object_id(), '_monk_term_language', true ) ) {
    153                 $current_language = $monk_languages[ get_term_meta( get_queried_object_id(), '_monk_term_language', true ) ]['slug'];
    154                 $current_locale   = get_term_meta( get_queried_object_id(), '_monk_term_language', true );
    155             } else {
    156                 $current_language = $monk_languages[ $default_language ]['slug'];
    157                 $current_locale   = $default_language;
    158             }
    159 
    160             if ( is_array( $monk_total_translations ) ) {
    161                 foreach ( $monk_total_translations as $lang_code => $term_id ) {
    162                     if ( in_array( $lang_code, $active_languages, true ) || $monk_languages[ $lang_code ]['slug'] === $current_language ) {
    163                         $monk_translations[ $lang_code ] = $term_id;
    164                     }
    165                 }
    166             } else {
    167                 $monk_translations[ $current_locale ] = get_the_id();
    168             }
    169 
    170             if ( $monk_translations ) {
    171                 foreach ( $monk_translations as $lang_code => $term_id ) {
    172                     if ( $monk_languages[ $lang_code ]['slug'] !== $current_language ) {
    173                         $switchable_languages[ $monk_languages[ $lang_code ]['slug'] ] = get_term_link( $term_id );
    174                     }
    175                 }
    176             } else {
    177                 $current_language                       = $monk_languages[ get_option( 'monk_default_language', false ) ]['slug'];
    178                 $monk_translations[ $current_language ] = get_queried_object_id();
    179 
    180                 foreach ( $monk_translations as $lang_code => $term_id ) {
    181                     if ( $lang_code !== $current_language ) {
    182                         $switchable_languages[ $lang_code ] = get_term_link( $term_id );
    183                     }
    184                 }
    185             }
    186         } // End if().
    18790
    18891        require plugin_dir_path( dirname( __FILE__ ) ) . 'widgets/partials/public-monk-language-switcher.php';
     
    228131    public function monk_language_customizer( $wp_customize ) {
    229132
    230         $wp_customize->add_section( 'monk_language_switcher' , array(
     133        $wp_customize->add_section( 'monk_language_switcher', array(
    231134            'title'    => __( 'Language Switcher', 'monk' ),
    232135            'priority' => 700,
  • monk/trunk/widgets/partials/public-monk-language-switcher.php

    r1734509 r1807041  
    1515
    1616foreach ( $monk_languages as $lang_code => $list ) {
    17     if ( $list['slug'] === $current_language ) {
    18         $current_language = $lang_code;
    19         $current_slug = $list['slug'];
     17    if ( in_array( $lang_code, $active_languages, true ) ) {
     18        if ( $list['slug'] === $current_language ) {
     19            $current_language = $lang_code;
     20            $current_slug     = $list['slug'];
     21        }
     22        $monk_languages_reverted[ $list['slug'] ] = $list;
    2023    }
    21     $monk_languages_reverted[ $list['slug'] ] = $list;
    2224}
    2325
     
    3638        </div>
    3739        <ul class="monk-language-dropdown">
    38             <?php if ( empty( $switchable_languages ) ) : ?>
     40            <?php if ( 1 > count( $switchable_languages ) ) : ?>
    3941                <li class="monk-lang">
    4042                    <option>
     
    4547                    </option>
    4648                </li>
    47             <?php else : ?> 
     49            <?php else : ?>
    4850                <?php foreach ( $switchable_languages as $code => $url ) : ?>
    4951                    <?php if ( $code !== $monk_languages[ $current_language ]['slug'] ) : ?>
Note: See TracChangeset for help on using the changeset viewer.