Polylang + ACF - группа полей на первой странице не отображается на переведенных страницах - PullRequest
0 голосов
/ 04 июня 2019

Я только что установил Polylang (бесплатная версия), и у меня есть группа полей, которая должна отображаться на титульная страница .

В админке, поля отображаются правильно на главной странице основного языка, но не на переведенной главной странице.

Я искал, чтобы увидеть, что может пойти не так, и это, очевидно, из-за ACF , то естьтолько проверяя, находимся ли мы на первой странице с get_option('page_on_front').

И кажется, что polylang не фильтрует значение, чтобы установить правую главную страницу.

Так что я нашел это mu-plugin :

<?php

class ACF_Page_Type_Polylang {

  // Whether we hooked page_on_front
  private $filtered = false;

  public function __construct() {

      add_filter( 'acf/location/rule_match/page_type', array( $this, 'hook_page_on_front' ) );
  }

  public function hook_page_on_front( $match ) {

      if ( ! $this->filtered ) {
          add_filter( 'option_page_on_front', array( $this, 'translate_page_on_front' ) );
          // Prevent second hooking
          $this->filtered = true;
      }

      return $match;
  }

  public function translate_page_on_front( $value ) {

      if ( function_exists( 'pll_get_post' ) ) {
          $value = pll_get_post( $value );
      }

      return $value;
  }
}

new ACF_Page_Type_Polylang();

, но это не решает проблему, и я не знаю почему, код кажется правильным.

Если я только приму эту часть:

add_filter( 'option_page_on_front', array( $this, 'translate_page_on_front' ) );

и преобразовать его в:

add_filter( 'option_page_on_front',function() { return '346' });

( 346 - переведенный идентификатор главной страницы)

корректно фильтрует параметрpage_on_front и мои поля отображаются правильно.

Можете ли вы помочь мне заставить работать плагин mu?

1 Ответ

0 голосов
/ 04 июня 2019

Я нашел способ заставить это работать, но я не знаю, правильный ли это путь ... подскажите, пожалуйста?

<?php

class ACF_Page_Type_Polylang {

  // Whether we hooked page_on_front
  private $filtered = false;

  public function __construct() {

      add_filter( 'acf/location/rule_match/page_type', array( $this, 'hook_page_on_front' ) );
  }

  public function hook_page_on_front( $match ) {

      // Abort if polylang not activated
      if ( !function_exists( 'pll_get_post' ) ) {
         return $match;
      }

      // Get the main language front page 
      $front_page = (int) get_option('page_on_front');

      // Get the translated page of the curent language
      $translated_page = pll_get_post($front_page);

      // Check if it's the same as the current page and set match to true if so
      if($translated_page === get_the_id()) {
        $match = true;
      }

      return $match;
  }
}

new ACF_Page_Type_Polylang();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...