PluginProbe
Polylang / trunk
Polylang vtrunk
3.8.9 3.8.8 3.8.7 3.8.6 3.8.5 3.8.4 3.8.3 2.7 2.7.0.1 2.7.1 2.7.2 2.7.3 2.7.4 2.8 2.8.1 2.8.2 2.8.3 2.8.4 2.9 2.9.1 2.9.2 3.0 3.0.1 3.0.2 3.0.3 All 233 releases
← All changes | src/admin/admin-base.php +59 -18 3.8.4 → trunk View file →
@@ -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.