| @@ -248,9 +248,9 @@ | ||
| 248 | 248 | * 2 => true if loaded even if languages have not been defined yet, false otherwise |
| 249 | 249 | * 3 => true if loaded in footer |
| 250 | 250 | */ |
| 251 | 251 | $scripts = array( |
| 252 | - 'widgets' => array( array( 'widgets' ), array( 'jquery' ), false, false ), | |
| 252 | + 'widgets' => array( array( 'widgets' ), array(), false, true ), | |
| 253 | 253 | ); |
| 254 | 254 | |
| 255 | 255 | $block_screens = array( 'widgets', 'site-editor' ); |
| 256 | 256 | |
| @@ -286,10 +286,9 @@ | ||
| 286 | 286 | } |
| 287 | 287 | } |
| 288 | 288 | } |
| 289 | 289 | |
| 290 | - wp_register_style( 'polylang_admin', plugins_url( "/css/build/admin{$suffix}.css", POLYLANG_ROOT_FILE ), array( 'wp-jquery-ui-dialog' ), POLYLANG_VERSION ); | |
| 291 | - wp_enqueue_style( 'polylang_dialog', plugins_url( "/css/build/dialog{$suffix}.css", POLYLANG_ROOT_FILE ), array( 'polylang_admin' ), POLYLANG_VERSION ); | |
| 290 | + pll_enqueue_style( 'admin', array( 'wp-jquery-ui-dialog' ) ); | |
| 292 | 291 | |
| 293 | 292 | $this->add_inline_scripts(); |
| 294 | 293 | } |
| 295 | 294 | |
| @@ -330,9 +329,9 @@ | ||
| 330 | 329 | * @return void |
| 331 | 330 | */ |
| 332 | 331 | private function add_inline_scripts() { |
| 333 | 332 | if ( wp_script_is( 'pll_block-editor', 'enqueued' ) ) { |
| 334 | - $default_lang_script = 'const pllDefaultLanguage = "' . $this->options['default_lang'] . '";'; | |
| 333 | + $default_lang_script = sprintf( 'const pllDefaultLanguage = %s;', wp_json_encode( $this->options['default_lang'] ) ); | |
| 335 | 334 | wp_add_inline_script( |
| 336 | 335 | 'pll_block-editor', |
| 337 | 336 | $default_lang_script, |
| 338 | 337 | 'before' |
| @@ -550,9 +549,9 @@ | ||
| 550 | 549 | $wp_admin_bar->add_menu( |
| 551 | 550 | array( |
| 552 | 551 | 'id' => 'languages', |
| 553 | 552 | 'title' => $selected->flag . $title, |
| 554 | - 'href' => esc_url( add_query_arg( 'lang', $selected->slug, remove_query_arg( 'paged' ) ) ), | |
| 553 | + 'href' => esc_url( $this->get_admin_bar_menu_url( $selected ) ), | |
| 555 | 554 | 'meta' => array( |
| 556 | 555 | 'title' => __( 'Filters content by language', 'polylang' ), |
| 557 | 556 | 'class' => 'all' === $selected->slug ? '' : 'pll-filtered-languages', |
| 558 | 557 | ), |
| @@ -567,10 +566,10 @@ | ||
| 567 | 566 | $wp_admin_bar->add_menu( |
| 568 | 567 | array( |
| 569 | 568 | 'parent' => 'languages', |
| 570 | 569 | 'id' => $lang->slug, |
| 571 | - 'title' => $lang->flag . esc_html( $lang->name ), | |
| 572 | - 'href' => esc_url( add_query_arg( 'lang', $lang->slug, remove_query_arg( 'paged' ) ) ), | |
| 570 | + 'title' => sprintf( '%s %s', 'all' === $lang->slug ? $lang->flag : $lang->get_admin_flag( 'aria-hidden' ), esc_html( $lang->name ) ), | |
| 571 | + 'href' => esc_url( $this->get_admin_bar_menu_url( $lang ) ), | |
| 573 | 572 | 'meta' => 'all' === $lang->slug ? array() : array( 'lang' => esc_attr( $lang->get_locale( 'display' ) ) ), |
| 574 | 573 | ) |
| 575 | 574 | ); |
| 576 | 575 | } |
| @@ -576,8 +575,58 @@ | ||
| 576 | 575 | } |
| 577 | 576 | } |
| 578 | 577 | |
| 579 | 578 | /** |
| 579 | + * Returns the admin language filter url for a given language. | |
| 580 | + * | |
| 581 | + * @since 3.9 | |
| 582 | + * | |
| 583 | + * @param object $language The language or an object for all languages. | |
| 584 | + * @return string | |
| 585 | + * | |
| 586 | + * @phpstan-param object{'slug': string} $language | |
| 587 | + */ | |
| 588 | + protected function get_admin_bar_menu_url( $language ): string { | |
| 589 | + global $pagenow, $post_type; | |
| 590 | + | |
| 591 | + $url = add_query_arg( 'lang', $language->slug, remove_query_arg( 'paged' ) ); | |
| 592 | + | |
| 593 | + if ( 'edit.php' !== $pagenow || ! $language instanceof PLL_Language ) { | |
| 594 | + return $url; | |
| 595 | + } | |
| 596 | + | |
| 597 | + // Attempt to translate the category (taxonomy) filter if present. | |
| 598 | + if ( ! $post_type ) { | |
| 599 | + return $url; | |
| 600 | + } | |
| 601 | + | |
| 602 | + foreach ( get_object_taxonomies( $post_type, 'objects' ) as $tax ) { | |
| 603 | + if ( ! $this->model->is_translated_taxonomy( $tax->name ) ) { | |
| 604 | + continue; | |
| 605 | + } | |
| 606 | + | |
| 607 | + $query_var = (string) $tax->query_var; | |
| 608 | + $qv = get_query_var( $query_var ); | |
| 609 | + if ( empty( $qv ) || ! is_string( $qv ) ) { | |
| 610 | + continue; | |
| 611 | + } | |
| 612 | + | |
| 613 | + $qv = $this->model->term->get_by( 'slug', $qv, $language, $tax->name ); | |
| 614 | + | |
| 615 | + if ( ! empty( $qv ) ) { | |
| 616 | + $url = add_query_arg( $query_var, $qv, remove_query_arg( $query_var, $url ) ); | |
| 617 | + } | |
| 618 | + | |
| 619 | + // For categories, we translated 'category_name'. We must remove 'cat' to avoid conflicts. | |
| 620 | + if ( 'category' === $tax->name ) { | |
| 621 | + $url = remove_query_arg( 'cat', $url ); | |
| 622 | + } | |
| 623 | + } | |
| 624 | + | |
| 625 | + return $url; | |
| 626 | + } | |
| 627 | + | |
| 628 | + /** | |
| 580 | 629 | * Remove the customize submenu when using a block theme. |
| 581 | 630 | * |
| 582 | 631 | * WordPress removes the Customizer menu if a block theme is activated and no other plugins interact with it. |
| 583 | 632 | * As Polylang interacts with the Customizer, we have to delete this menu ourselves in the case of a block theme, |
| @@ -604,9 +653,9 @@ | ||
| 604 | 653 | } |
| 605 | 654 | |
| 606 | 655 | /** |
| 607 | 656 | * Tells if the Polylang's admin bar menu should be hidden for the current page. |
| 608 | - * Conventionally, it should be hidden on edition pages. | |
| 657 | + * Conventionally, it should be hidden on edition pages, term edit pages and Site Editor pages. | |
| 609 | 658 | * |
| 610 | 659 | * @since 3.8 |
| 611 | 660 | * |
| 612 | 661 | * @return bool |
| @@ -611,19 +660,11 @@ | ||
| 611 | 660 | * |
| 612 | 661 | * @return bool |
| 613 | 662 | */ |
| 614 | 663 | public function should_hide_admin_bar_menu(): bool { |
| 615 | - global $pagenow, $typenow, $taxnow; | |
| 664 | + global $pagenow; | |
| 616 | 665 | |
| 617 | - if ( in_array( $pagenow, array( 'post.php', 'post-new.php' ), true ) ) { | |
| 618 | - return ! empty( $typenow ); | |
| 619 | - } | |
| 620 | - | |
| 621 | - if ( 'term.php' === $pagenow ) { | |
| 622 | - return ! empty( $taxnow ); | |
| 623 | - } | |
| 624 | - | |
| 625 | - return false; | |
| 666 | + return in_array( $pagenow, array( 'post.php', 'post-new.php', 'site-editor.php', 'term.php' ), true ); | |
| 626 | 667 | } |
| 627 | 668 | |
| 628 | 669 | /** |
| 629 | 670 | * Returns the ID of a Polylang's settings screen. |