Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /*
- Plugin Name: pll_filter for Polylang
- Description: Obsolete since the feature has been included in Polylang v0.9
- */
- class pll_filter {
- function __construct() {
- // FIXME will be useless since everything will go in admin-filters.php
- if (!is_admin())
- return;
- add_filter('terms_clauses', array(&$this, 'terms_clauses'), 10, 3);
- add_filter('comments_clauses', array(&$this, 'comments_clauses'), 10, 2);
- add_action('admin_bar_menu', array(&$this, 'admin_bar_menu'), 100); // 100 determines the position
- add_action('admin_init', array(&$this, 'admin_init'));
- // FIXME enlever parse_query (remplacé par celui-ci) et restrict_manage_posts dans admin-filters.php
- add_filter('parse_query',array(&$this,'parse_query'));
- }
- // filter tag cloud and list table in 'tags' screen
- function terms_clauses($clauses, $taxonomies, $args) {
- // FIXME remplacer $polylang par $this
- global $polylang;
- if (function_exists('get_current_screen'))
- $screen = get_current_screen();
- // only on the 'Tags' or 'Categories' screen
- // and the 'Posts' or 'Pages' screen for the quick edit
- if (!isset($screen) || !in_array($screen->base, array('edit-tags', 'edit')) || isset($_GET['action']))
- return $clauses;
- // FIXME this complex test allows not to filter the 'get_terms_not_translated'
- // maybe it's more robust to add a new arg to the function in polylang and to test it
- if ($screen->base == 'edit-tags' && !isset($args['page']) && $args['fields'] != 'count' && !isset($args['class']) && !$args['hide_empty'])
- return $clauses;
- // parent drowdown already filtered in polylang
- if (isset($args['class']))
- return $clauses;
- // when adding a new translation. FIXME : filtrer ou non ? -> filtrer contredit le filtre général
- // FIXME add ajax to manage tag cloud and list table when changing language ?
- // already done for parent dropdown list
- if (isset($_GET['new_lang']) && $_GET['new_lang'])
- $lang = $polylang->get_language($_GET['new_lang']);
- elseif (isset($_GET['lang']) && $_GET['lang']) {
- if ($_GET['lang'] != 'all')
- $lang = $polylang->get_language($_GET['lang']);
- }
- elseif ($lg = get_user_meta(get_current_user_id(), 'pll_filter_content', true))
- $lang = $polylang->get_language($lg);
- return isset($lang) ? $polylang->_terms_clauses($clauses, $lang) : $clauses;
- }
- // filters comments by language
- function comments_clauses($clauses, $query) {
- // FIXME remplacer $polylang par $this
- global $polylang;
- if (isset($_GET['lang']) && $_GET['lang']) {
- if ($_GET['lang'] != 'all')
- $lang = $polylang->get_language($_GET['lang']);
- }
- elseif ($lg = get_user_meta(get_current_user_id(), 'pll_filter_content', true))
- $lang = $polylang->get_language($lg);
- if (isset($lang))
- $clauses = $this->_comments_clauses($clauses, $lang);
- return $clauses;
- }
- // FIXME fonction comments_clauses de core.php doit appeler _comments_clauses qui doit passer dans base.php
- function _comments_clauses($clauses, $lang) {
- global $wpdb;
- // if this clause is not already added by WP
- if (!strpos($clauses['join'], '.ID'))
- $clauses['join'] .= " JOIN $wpdb->posts ON $wpdb->posts.ID = $wpdb->comments.comment_post_ID";
- $clauses['join'] .= " INNER JOIN $wpdb->term_relationships AS pll_tr ON pll_tr.object_id = ID";
- $clauses['where'] .= $wpdb->prepare(" AND pll_tr.term_taxonomy_id = %d", $lang->term_taxonomy_id);
- return $clauses;
- }
- // adds the languages in admin bar
- function admin_bar_menu($wp_admin_bar) {
- if (function_exists('get_current_screen'))
- $screen = get_current_screen();
- /*
- // only on relevant admin panels
- if (!isset($screen) || !in_array($screen->base, array('edit', 'upload', 'edit-comments', 'edit-tags')) || ($screen->base == 'edit-tags' && isset($_GET['action'])))
- return;
- */
- global $polylang;
- $url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
- $selected = isset($_GET['lang']) && $_GET['lang'] ? $_GET['lang'] :
- (($lg = get_user_meta(get_current_user_id(), 'pll_filter_content', true)) ? $lg : 'all');
- $wp_admin_bar->add_menu(array(
- 'id' => 'languages',
- 'title' => __('Languages', 'polylang'),
- 'meta' => array('title' => __('Filters content by language', 'polylang')),
- ));
- $wp_admin_bar->add_menu(array(
- 'parent' => 'languages',
- 'id' => 'all',
- 'title' => sprintf('<input name="all" type="radio" value="1" %s /> %s',
- $selected == 'all' ? 'checked="checked"' : '', __('Show all languages', 'polylang')),
- 'href' => add_query_arg('lang', 'all', $url),
- ));
- foreach ($polylang->get_languages_list() as $lang) {
- $wp_admin_bar->add_menu(array(
- 'parent' => 'languages',
- 'id' => $lang->slug,
- 'title' => sprintf('<input name="%s" type="radio" value="1" %s /> %s',
- $lang->slug, $selected == $lang->slug ? 'checked="checked"' : '', $lang->name),
- 'href' => add_query_arg('lang', $lang->slug, $url),
- ));
- }
- }
- // set user meta when choosing to filter content by language
- function admin_init() {
- if (isset($_GET['lang']) && $_GET['lang'])
- update_user_meta(get_current_user_id(), 'pll_filter_content', $_GET['lang'] == 'all' ? '' : $_GET['lang']);
- }
- // filters posts, pages and media by language
- function parse_query($query) {
- $qvars = &$query->query_vars;
- // do not filter post types such nav_menu_item for example
- if (in_array($qvars['post_type'], array('nav_menu_item','attachment')))
- return;
- if (!isset($qvars['lang']) && $lg = get_user_meta(get_current_user_id(), 'pll_filter_content', true))
- $qvars['lang'] = $lg;
- if (isset($qvars['lang']) && $qvars['lang'] == 'all')
- unset ($qvars['lang']);
- }
- }
- new pll_filter();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement