Limitar categorias para autores
-
Olá.
Pessoal, estou precisando de uma ajudinha por favor =DQuero limitar as categorias que cada autor pode realizar postagens, alguem sabe um plugin que me ajude ?
encontrei o “Userextra.php” porem está com erro ao tentar utilizar, teoricamente, segundo sua descrição, ele faria o que preciso.
"Ele atribui categorias especificas para cada autor para evitar a confusão de posts. O plugin limita o autor a publicar apenas nas categorias que lhe é permitido."
Obrigado
Visualizando 1 resposta (de um total de 1)
-
Achei uma revisão do User-Cats Manager feita pelo HerrB. Se quiser, baixa o plugin normalmente e antes de ativar, substitua o código no user-cats-manager.php pelo código abaixo.
<?php /* Plugin Name: User-Cats Manager Plugin URI: http://dgmike.wordpress.com/user-cats-manager Description: Provides to admin users a way to select what categorie determined users can write. Version 2.3 has been fixed "quick & dirty" for WP >= 2.9.x as original author doesn't seem to work on the plugin anymore. Version: 2.3 Modified: 2010-01-08: HerrB Author: DGmike/HerrB Author URI: http://dgmike.wordpress.com */ // Bugfix WP < 2.9.x //require_once(ABSPATH . 'wp-includes/streams.php'); // Bugfix WP >= 2.9.x // FileReader (wp-includes/streams.php) doesn't exist in WP 2.9.x anymore // POMO_FileReader in wp-includes/pomo/streams.php would work, but doesn't provide length attribute. // POMO_CachedFileReader may work, but seems to provide unneccessary overhead class FileReader { var $_pos; var $_fd; var $_length; function FileReader($filename) { if (file_exists($filename)) { $this->_length=filesize($filename); $this->_pos = 0; $this->_fd = fopen($filename,'rb'); if (!$this->_fd) { $this->error = 3; // Cannot read file, probably permissions return false; } } else { $this->error = 2; // File doesn't exist return false; } } function read($bytes) { if ($bytes) { fseek($this->_fd, $this->_pos); // PHP 5.1.1 does not read more than 8192 bytes in one fread() // the discussions at PHP Bugs suggest it's the intended behaviour while ($bytes > 0) { $chunk = fread($this->_fd, $bytes); $data .= $chunk; $bytes -= strlen($chunk); } $this->_pos = ftell($this->_fd); return $data; } else return ''; } function seekto($pos) { fseek($this->_fd, $pos); $this->_pos = ftell($this->_fd); return $this->_pos; } function currentpos() { return $this->_pos; } function length() { return $this->_length; } function close() { fclose($this->_fd); } } // FileReader class UserCatsManager { static $wpdb; static $info; public static function init() { global $wpdb; UserCatsManager::$wpdb = $wpdb; //Outros mapeamentos UserCatsManager::$info['plugin_fpath'] = dirname(__FILE__); add_action ('admin_menu', array('UserCatsManager','options')); add_action ('load-post.php', array('UserCatsManager','loadpost')); add_filter ('get_terms', array ('UserCatsManager', 'filterCats'), 0); add_filter ('category_save_pre', array('UserCatsManager', 'categorySavePre')); // this filter is used when publishing a post } static function install (){ if ( is_null(UserCatsManager::$wpdb) ) UserCatsManager::init(); UserCatsManager::$wpdb->query (sprintf(' CREATE TABLE %suser_cats_manager ( <code>user_id</code> INT NOT NULL, <code>term_id</code> INT NOT NULL, PRIMARY KEY (<code>user_id</code>, <code>term_id</code>) ) ', UserCatsManager::$wpdb->prefix)); } static function uninstall () { if ( is_null(UserCatsManager::$wpdb) ) UserCatsManager::init(); UserCatsManager::$wpdb->query (sprintf (' DROP TABLE %suser_cats_manager ', UserCatsManager::$wpdb->prefix)); } static function options () { add_options_page (__('Categories and Users'), 'Categories And Users', 10, __FILE__, array('UserCatsManager','optionsMenu')); } static function optionsMenu ($nick = '') { if ($_POST['user']) $nick = $_POST['user']; if ( is_null(UserCatsManager::$wpdb) ) UserCatsManager::init(); if ($nick) $nick = UserCatsManager::$wpdb->get_results(sprintf('SELECT * FROM %susers WHERE ID=\'%s\'', UserCatsManager::$wpdb->prefix, $nick)); $tplObj = new FileReader(UserCatsManager::$info['plugin_fpath'] . '/options.html'); $tpl = $tplObj->read($tplObj->length()); $items = array ( '{LEGEND}' => __('Choose the categories that the user can use'), '{LEGEND_BM}' => __('Choose the categories of bookmarks that the user can use'), '{ACTION}' => $_SERVER['REQUEST_URI'], '{ALL_CATS}' => UserCatsManager::allCats($nick[0]->ID), '{ALL_CATS_BM}' => UserCatsManager::allCatsBm($nick[0]->ID), '{USERS}' => UserCatsManager::allUsersSelect(), '{NICK}' => $nick[0]->ID, '{SELECT_USER}' => __('Select the user <small>(admin users have all access)</small>'), '{EDITING}' => __('Editing user ') . $nick[0]->user_nicename, '{EDIT}' => __('edit'), '{SAVE}' => __('Save'), '{SAVED}' => __(''), '{MESSAGE_DEFAULT_CATS}' => __('If the user does not choose a category, wordpress puts the default category on post and/or bookmark. Tip: give your user the privileges on the default category. To edit the default category, go to <strong>Writing Settings</strong>.') ); if ($_POST['nick']) { UserCatsManager::save($_POST['nick'], (array) $_POST['categoria']); $items['{SAVED}'] = __('<div id="message" class="updated fade"><p>The changes has been taked</p></div>'); } $tpl = str_replace("\n", '\n', $tpl); if ($nick == '') $tpl = preg_replace("/{POST}.*{\/POST}/", '', $tpl); $tpl = str_replace('\n', "\n", $tpl); $tpl = preg_replace("/{\/?POST}/", '', $tpl); foreach ($items as $key=>$value) $tpl = str_replace ($key, $value, $tpl); print $tpl; } static function getCats($n=0, $user='', $type='category'){ if ($_POST) $user = $_POST['user']; if ( is_null(UserCatsManager::$wpdb) ) UserCatsManager::init(); $wpdb = UserCatsManager::$wpdb; $sqlCats = 'SELECT %sterms.term_id, slug, name FROM %sterms NATURAL JOIN %sterm_taxonomy WHERE taxonomy = \'%s\' AND parent = \'%s\''; $cats = $wpdb->get_results(sprintf($sqlCats, $wpdb->prefix, $wpdb->prefix, $wpdb->prefix, $type, $n), ARRAY_N); $base = '%s<li class="popular-category"><label for="ck_%s"><input id="ck_%s" type="checkbox" name="categoria[]" value="%s"%s /> %s%s</label></li>'; $return = array (); if (count($cats)) { foreach ($cats as $cat){ $uniq = uniqid(); $isSelect = $wpdb->get_results(sprintf( 'SELECT * FROM %suser_cats_manager WHERE user_id = \'%s\' AND term_id = \'%s\'', $wpdb->prefix, $user, $cat[0] ) ); $checked = count($isSelect) ? ' checked="checked"' : ''; $default = in_array($cat[0], array(get_option('default_category'), get_option('default_link_category') )) ? __(' <strong>(default)</strong>') : ''; $return[] = sprintf ($base, "\n ", $uniq, $uniq, $cat[0], $checked, $cat[1], $default); if (count(UserCatsManager::getCats($cat[0]))) $return[] = "\n<ul>" . implode ('', UserCatsManager::getCats($cat[0], $user)) . "\n</ul>\n"; } } return $return; } static function allCats($user = '') { $return = UserCatsManager::getCats(0, $user); return '<ul>'.implode ('', $return).'</ul>'; } static function allCatsBm($user = '') { $return = UserCatsManager::getCats(0, $user, 'link_category'); return '<ul>'.implode ('', $return).'</ul>'; } static function allUsersSelect($user = '') { if ( is_null(UserCatsManager::$wpdb) ) UserCatsManager::init(); if ($_POST) $user = $_POST['user']; $wpdb = UserCatsManager::$wpdb; $res = $wpdb->get_results(sprintf('SELECT id, user_nicename FROM %susers', $wpdb->prefix)); $base = '<option value="%s"%s>%s</option>'; $return = ''; foreach ($res as $value) { $usr = new WP_User($value->id); if ((int) $usr->user_level === 10) continue; $selected = ( preg_match ('/\d+/', $user) && $user == $value->id) ? ' selected="selected"' : ''; $return .= sprintf($base, $value->id, $selected, $value->user_nicename); } return $return; } static function save ($user, $cats) { if ( is_null(UserCatsManager::$wpdb) ) UserCatsManager::init(); $wpdb = UserCatsManager::$wpdb; $wpdb->query(sprintf('DELETE FROM %suser_cats_manager WHERE user_id = \'%s\'', $wpdb->prefix, $user)); foreach ($cats as $cat) { $sql = sprintf('INSERT INTO %suser_cats_manager VALUES (\'%s\', \'%s\');', $wpdb->prefix, $user, $cat); $wpdb->query($sql); } } static function filterCats($cats) { if ( is_null(UserCatsManager::$wpdb) ) UserCatsManager::init(); $wpdb = UserCatsManager::$wpdb; $current_user = wp_get_current_user(); // Bugfix // Old: if ($current_user->user_level == 10) if ($current_user->user_level == 10 || !is_admin()) { return $cats; } if (gettype($cats) != 'array') return $cats; foreach ($cats as $key=>$cat) { $sql = sprintf('SELECT * FROM %suser_cats_manager WHERE user_id = \'%s\' AND term_id = \'%s\' ', $wpdb->prefix, $current_user->ID, $cat->term_id); $catH = $wpdb->get_results($sql); if (!count($catH)) unset ($cats[$key]); } return $cats; //$accepteds = $wpdb->get_results() } function categorySavePre($categories_checked) { // filter checked categories when a post is saved if ($current_user->user_level == 10 || !is_admin()) { return $categories_checked; } if ( is_null(UserCatsManager::$wpdb) ) UserCatsManager::init(); $wpdb = UserCatsManager::$wpdb; $current_user = wp_get_current_user(); $sql = sprintf('SELECT term_id FROM %suser_cats_manager WHERE user_id = \'%s\'', $wpdb->prefix, $current_user->ID); $oCategories = $wpdb->get_results($sql, 'ARRAY_N'); $aValidCategories = array(); foreach ($oCategories as $aCategory) { $aValidCategories[] = $aCategory[0]; } if (count($aValidCategories) == 0) { // There is no specifically allowed category for the user, allow every category return $categories_checked; } else { // Set the allowed categories as selected categories. Ignore specific selections. return $aValidCategories; } } static function set_current_user () { global $current_user; if ($current_user->user_level == 10) return; unset($current_user->allcaps['manage_categories']); } static function loadpost () { if ($_REQUEST['action'] != 'edit' && !isset($_REQUEST['post'])) return; global $current_user; if ($current_user->user_level == 10) return; if ( is_null(UserCatsManager::$wpdb) ) UserCatsManager::init(); $categories = UserCatsManager::$wpdb->get_results(sprintf( 'SELECT term_id FROM %suser_cats_manager WHERE user_id = \'%s\'', UserCatsManager::$wpdb->prefix, $current_user->ID ), 'ARRAY_N' ); $validCategories = array(); foreach ($categories as $cat) $validCategories[] = $cat[0]; $categories = wp_get_post_categories($_GET['post']); if ((bool) array_diff_assoc($categories, $validCategories) === true) { $_GET = array(); $_POST = array(); $_REQUEST = array(); } } } $ucmPluginFile = substr(strrchr(dirname(__FILE__),DIRECTORY_SEPARATOR),1).DIRECTORY_SEPARATOR.basename(__FILE__); register_activation_hook($ucmPluginFile,array('UserCatsManager','install')); register_deactivation_hook($ucmPluginFile,array('UserCatsManager','uninstall')); add_action('set_current_user', array('UserCatsManager','set_current_user')); add_filter('init', array('UserCatsManager','init')); ?>
Visualizando 1 resposta (de um total de 1)
- O tópico ‘Limitar categorias para autores’ está fechado para novas respostas.