| @@ -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 | |
| @@ -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,14 +566,64 @@ | ||
| 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 | + } | |
| 577 | + | |
| 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; | |
| 577 | 626 | } |
| 578 | 627 | |
| 579 | 628 | /** |
| 580 | 629 | * Remove the customize submenu when using a block theme. |