WPML и Visual Composer (Post Grid)
Есть клевенький премиум плагин Visual Composer. Клиенты его особенно любят за то, что мышкой можно накликать себе удобную структуру страницы без помощи разработчика. А еще есть плагин монстрик WPML, чтобы можно было сделать мультиязычный сайт.
WPML работает таким образом, что на каждый язык одной и той же статьи создает в базе как бы новые посты, а при выводе выбирает какой из этих постов под какой язык показывать. Проблема, о которой я хочу рассказать в том, что Visual Composer при выводе записей в модуле Post Grid, не дает плагину WPML автоматом выводить записи под нужный язык и поэтому выводит все в кучу.
Допустим, есть у вас в блоге 2 записи «Коплю денег на дизайн как у Борисова» и «Учусь в школе блоггеров, скоро выпускаю видеокурс «Как зарабатывать, выпуская видеокурсы» » и у каждой из них есть версия еще и на английском, и на украинском. WPML создаст в базе данных 2*3=6 записей. И при этом Visual Composer будет выводить все 6 штук на каждом языке. А происходит это по одной простой причине — по дефолту VC (для модуля Post Grid) в своих циклах к WP не разрешает другим фильтрам что-то изменять.
Например, для Post Grid в файле
wp-content/plugins/js_composer/include/classes/shortcodes/vc-basic-grid.php аргументы к запросу выглядят так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$defaults = array( 'numberposts' => 5, 'offset' => 0, 'category' => 0, 'orderby' => 'date', 'order' => 'DESC', 'include' => array(), 'exclude' => array(), 'meta_key' => '', 'meta_value' => '', 'post_type' => 'post', 'suppress_filters' => apply_filters( 'vc_basic_grid_filter_query_suppress_filters', true ), 'public' => true ); |
Где suppress_filters означает как бы «откинуть все фильтры» (или на русском правильнее сказать «отбросить»?). Хотя дословно переводится как «подавлять». Короче говоря, смысл уловили?
Так вот, мы видим, что фильтр vc_basic_grid_filter_query_suppress_filters возвращает значение true. Чтобы это исправить и вернуть false, достаточно очень простенько где-то в файлике functions.php прописать следующее:
1 2 3 |
add_filter( 'vc_basic_grid_filter_query_suppress_filters', function(){ return false; }); |
Теперь WPML может применять свои фильтры к запросу, который делает Visual Composer и Post Grid будет выводить не 6 записей, а всего 2 на выбранном языке.
—
Честно говоря, я пока не нашел причин, почему стоит покупать WPML вместо свободного qTranslate X.