Respuestas de foro creadas

Viendo 15 respuestas - 1 de 15 (de 55 total)
  • inigonz

    (@inigonz)

    Buenas,

    Al final lo solucione con código, porque con el plugin tenia que decirle en otra pagina el orden de los terms de cada cpt, y no me gusto mucho, ya que no soy quien mete el contenido y las personas encargadas de ello se pueden volver locos.

    Seguí buscando por internet y vi que la función register_taxonomy tiene un argumento «sort», que mantiene el orden de insercion de los terms en el cpt, como no me funcionaba estuve buscando el porque, y vi que había un bug pero se soluciona añadiendo en los argumentos ‘orderby’ => ‘term_order’, quedaria de esta manera para que funcione:

    register_taxonomy( 'wptests_tax', 'post', array(
    	'sort' => true,
    	'args' => array(
    		'orderby' => 'term_order',
    	),
    ) );

    Lo único que el nombre de la taxonomía me ha cambiado de servicios por etiquetas.

    Saludos

    inigonz

    (@inigonz)

    Buenas Alvaro,

    Leí la descripción del plugin pero ya veo que no entendí bien lo que ponía o en que estaría pensando. Muchas gracias.

    Buenas Alvaro, muchas gracias por tu respuesta.

    No se si es a lo que te refieres, pero por ejemplo tengo un proyecto que le añado 3 terms no jerárquicos, primero añado programación, luego diseño y luego estudio. Cuando le das a actualizar o guardar el proyecto, el te ordena alfabéticamente los terms, pero yo quiero que me los muestre por orden en los que he añadido, es decir, programación, luego diseño y luego estudio. En la vista del proyecto seria lo mismo, que los muestre en el orden que los he añadido. Sabéis si se puede hacer?

    Gracias

    inigonz

    (@inigonz)

    Muchas gracias Pablo por tu respuesta, opino lo mismo que tu.

    inigonz

    (@inigonz)

    Buenas,

    Como era diferente tipo de taxonomía, he creado otro debate, entonces los pongo juntos y cierro este o como hago?

    Gracias

    ok, perfecto. Muchísimas gracias.

    Un saludo

    A mi sin ello me está funcionando correctamente, pero era por saber, no vaya a ser que se me este escapando algo.

    Muchas gracias, un saludo

    Muchas gracias por la respuesta Almendron.
    Acabo de comprender que esa función te crea como un bloque para esos campos, columna izquierda con el label de la función y columna derecha con los campos que se añaden en el callback.
    Es necesario poner la función? si no la pones afecta a algo?

    Gracias

    Buenas,

    Mírate esto en el codex: https://codex.wordpress.org/Class_Reference/wpdb

    Espero que te sirva, yo cuando he necesitado llamar a tablas de la bbdd lo he hecho así, ya sean tablas del wp o tablas propias.

    Saludos

    Buenas Dackar,

    Que error te da?
    La parte de seguridad la hago en el plugin, y está copiada en el ultimo comentario, y lo otro que necesitas, es el cpt para ver como llamo a los caps del cpt proyecto, no se que mas puede faltar.

    Lo otro que comento, es con el plugin options-framework, para crear un theme options, desde ahí genero una página-options donde me muestra las taxonomías de mi cpt proyecto, con los usuarios registrados, voy marcando que taxonomías puede editar cada usuario.

    Algo así había pensado pero como no lo he utilizado nunca… me pongo con ello.

    Muchas gracias por la respuesta

    Buenas,

    He visto este código, a ver si te sirve:

    
    $args = array(
        'post_type' => 'post',
        'post_status' => 'publish',
        'orderby' => 'date',
        'order' => 'DESC',
    
        // Using the date_query to filter posts from last week
        'date_query' => array(
            array(
                'after' => '1 week ago'
            )
        )
    ); 
    

    Url: https://wordpress.stackexchange.com/questions/99265/display-posts-of-the-last-7-days

    Buenas,

    Primero tienes una regla css que te bloquea el display none

    @media screen and (min-width: 621px)
    style.css?ver=1.4.5:922
    #wpforo-wrap #wpforo-menu .wpf-menu {
        display: block!important;
    }

    Deberías poner !important en tu código para que tengo prioridad sobre lo demás.
    Pero acabo de ver que ocultado ese menu, tampoco te vas a librar del error que se visualiza, ya que el texto ese no esta dentro de ese elemento contenedor.

    Tienes que buscar en el plugin, la frase esa (< class=»menu-mobilenav-container»>), y comentarla

    Buenas de nuevo,

    Ya lo he conseguido, ha costado pero bueno, funciona que es lo importante.

    
    // CPT PROYECTO
    $pr_labels = array(
    	'name' => __( 'Proyectos' ),
    	'singular_name' => __( 'Proyecto' ),
    	'add_new' => __( 'Añadir nuevo' ),
    	'add_new_item' => __( 'Añadir nuevo Proyecto' ),
    	'edit_item' => __( 'Editar Proyecto' ),
    	'new_item' => __( 'Nuevo Proyecto' ),
    	'view_item' => __( 'Ver Proyecto' ),
    	'search_items' => __( 'Buscar Proyecto' ),
    	'not_found' => __( 'No se encontraron Proyectos' ),
    	'not_found_in_trash' => __( 'No se encontraron Proyectos en la papelera' )
    );
    
    $pr_args = array(
    	'labels' => $pr_labels,
    	'public' => true,
    	'publicly_queryable' => true,
    	'show_ui' => true,
    	'show_in_menu'	=> true,
    	'show_in_nav_menus' => true,
    	'menu_position ' => 20,
    	'supports' => array( 'title', 'editor', 'thumbnail', 'page-attributes', 'post-formats', 'revisions', 'author' ),
    	'capability_type' => 'proyecto',
    	'capabilities' => array(
    	        'edit_post' => 'edit_proyecto',
    	        'read_post' => 'read_proyecto',
    		'delete_post' => 'delete_proyecto',
    		'edit_posts' => 'edit_proyectos',
    		'edit_others_posts' => 'edit_others_proyectos',
    		'publish_posts'	=> 'publish_proyectos',
                    'edit_publish_posts' => 'edit_publish_proyectos',
    		'read_private_posts' => 'read_private_proyectos',
    		'create_posts' => 'edit_proyectos',
    		'delete_posts' => 'delete_proyectos',
    		'delete_others_posts' => 'delete_others_proyectos',
    	),
    	'map_meta_cap' => true,
    	'hierarchical'	=> false,
    	'has_archive' => true,
    		'rewrite' => array(
    		'slug'	=> 'proyecto',
    	),
    	'menu_icon' => 'dashicons-screenoptions'
    );
    
    $pr_args = apply_filters( 'proyecto_args', $pr_args );
    register_post_type( 'proyecto', $pr_args );
    

    Y en el plugin

    
    // ACTIVACION / DESACTIVACION PLUGIN: CREACION / ELIMINACION DE ROLES - CAPS
    class CustomEditorRole {
    	private static $role = 'rol12';
    	private $role_label;
    
    	function __construct() {
    		// here we need a real, loaded, text domain
    		$this->role_label = __( 'Rol12' );
    	}
    
    	function addRole() {
    		global $wp_roles;
    
    		if ( ! $wp_roles instanceof WP_Roles ) {
    			$wp_roles = new WP_Roles;
    		}
    
    		// Crear Rol para los Recas
    		$caps = array(
    			'read' => true,
    			'upload_files' => true,
    			'edit_theme_options' => true,
    				
    		);
    
    		// Añadir caps CTP y TAX al rol
    		$caps['edit_proyecto'] 	= TRUE;
    		$caps['publish_proyecto'] = TRUE;
    		$caps['delete_proyecto'] = TRUE;
    
    		// Custom cap
    		$caps['edit_same_tax_posts'] 	= TRUE;
    
    		// Create new role with custom caps
    		add_role( self::$role, $this->role_label, $caps );
    	}
    
    	function removeRole() {
    		global $wp_roles;
    
    		if ( ! $wp_roles instanceof WP_Roles ) {
    			$wp_roles = new WP_Roles;
    		}
    
    		remove_role(self::$role);
    	}
    }
    
    register_activation_hook( __FILE__, array( new CustomEditorRole, 'addRole' ) );
    register_deactivation_hook( __FILE__, array( new CustomEditorRole, 'removeRole' ) );
    
    // PERMISOS DE LECTURA / ESCRITURA PARA LOS POST PROPIOS / OTROS / MISMA CATEGORIA
    class CustomEditorCaps {
    	function manageCaps( $allcaps, $caps, $args, $user ) {
    		if ( ! $this->shouldManage( $args[0], $user ) ) {
    			return $allcaps;
    		}
    
    		// Are we saving?
    		$action = filter_input( INPUT_POST, 'action', FILTER_SANITIZE_STRING );
    		$method = strtoupper( filter_var($_SERVER['REQUEST_METHOD'], FILTER_SANITIZE_STRING ) );
    
    		if ( $method !== 'POST' ) { // not saving
    			global $pagenow;
    
    			// we are interested only on post list and post edit screens
    			if ( is_admin() && in_array( $pagenow, array( 'post.php', 'post-new.php', 'edit.php' ), TRUE ) ) {
    				$screen_id 	= $pagenow === 'edit.php' ? 'edit-pproyecto' : 'proyecto';
    				$allcaps 	= $this->maybeAllow( $args, $allcaps, $user, $screen_id );
    			}
    		} elseif ( $action === 'editpost' ) { // saving and right action
    			$allcaps = $this->maybeAllowOnSave( $args, $allcaps, $user );
    		}
    
    		return $allcaps; // always return: it's a filter
    	}
    
    	function lockPendingStatus( $data, $postarr ) {
                    return $data; // always return: it's a filter
    	}
    
    	function allowPreview( $posts, $query ) {
    		if ( is_admin() || ! $query->is_main_query() || empty( $posts ) || ! $query->is_single || $posts[0]->post_type !== 'proyecto' ) {
    			return $posts; // return first argument: it's a filter
    		}
    
    		$status = get_post_status( $posts[0] );
    		$post_status_obj = get_post_status_object( $status );
    			
    		if ( ! $post_status_obj->public && current_user_can('edit_same_tax_posts') ) {
    			// post is pending and our user has our special role
    			// allow preview
    			global $wp_post_statuses;
    			$wp_post_statuses[$status]->public = TRUE;
    		}
    
    		return $posts; // return first argument: it's a filter
    	}
    
    	private function maybeAllow( $args, $allcaps, $user, $screen ) {
    		if ( $args[0] === 'edit_others_proyectos' ) {
    			// if filtering 'edit_others_posts' we have no access to single post data
    			// allow cap only on post list screen and before querying posts
    			$allcaps['edit_others_proyectos'] = ! did_action('pre_get_posts') && $screen === 'edit-proyecto';
    
    			return $allcaps;
    		}
    
    		$post = get_post( $args[2] );
    		$permisos = of_get_option( $user->ID . 'permisos' );
    		$terms 	= get_the_terms( $post, 'mercado' );
    		$termId = '';
    		$termParent = '';
    
    		if ( $terms ) {
    			foreach ( $terms as $term ) {
    				$termId = $term->term_id;
    				$termParent = $term->parent;
    
    				if ( $termParent != 0 ) {
    					$term_parent = get_term_top_most_parent( $termId, 'mercado' );
    					$termId = $term_parent['parent'];
    				}
    
    				if ( $permisos[$termId] == 1 ) {
    					$allcaps['edit_others_proyectos'] 	 = TRUE;
    					$allcaps['edit_published_proyectos'] = TRUE;
    				}
    			}
    		}
    
    		return $allcaps; // always return: it's a filter
    	}
    
    	private function maybeAllowOnSave( $args, $allcaps, $user ) {
    		$data = $this->getPostedData();
    
    		if ( $data['post_type'] !== 'proyecto' || (int) $data['post_ID'] <= 0 ) {
    			return $allcaps;
    		}
    
    		$post = get_post( $data['post_ID'] );
    		$permisos = of_get_option( $user->ID . 'permisos' );
    		$terms = get_the_terms( $post, 'mercado' );
    		$termId = '';
    		$termParent = '';
    
    		if ( $terms ) {
    			foreach ( $terms as $term ) {
    				$termId = $term->term_id;
    				$termParent = $term->parent;
    
    				if ( $termParent != 0 ) {
    					$term_parent = get_term_top_most_parent( $termId, 'mercado' );
    					$termId = $term_parent['parent'];
    				}
    
    				if ( $permisos[$termId] == 1 ) {
    					// if post is pending and will stay pending allow editing
    					$allcaps['edit_others_proyectos'] 	 = true;
    					$allcaps['edit_published_proyectos'] = true;
    				}
    			}
    		}			
    
    		return $allcaps;
    	}
    
    	private function shouldManage( $cap, $user ) {
    		return is_admin() && in_array( $cap, array( 'edit_others_proyectos', 'edit_published_proyectos', 'edit_proyecto', 'edit_post', ), TRUE ) && ! $user->has_cap( 'delete_others_proyectos' ) && $user->has_cap( 'edit_same_tax_posts' ) && ! defined( 'DOING_AJAX' ); // does not affect ajax
    	}
    
    	private function getPostedData() {
    		return filter_input_array( INPUT_POST, array( 'post_type' => FILTER_SANITIZE_STRING, 'post_ID' => FILTER_SANITIZE_NUMBER_INT, 'original_post_status' => FILTER_SANITIZE_STRING, 'post_status' => FILTER_SANITIZE_STRING, ) );
    	}
    
    }
    
    $cap_manager = new CustomEditorCaps;
    add_filter( 'user_has_cap', array( $cap_manager, 'manageCaps' ), PHP_INT_MAX, 4 );
    add_filter( 'posts_results', array( $cap_manager, 'allowPreview' ), 10, 2 );
    add_filter( 'wp_insert_post_data', array( $cap_manager, 'lockPendingStatus' ), 10, 2 );
    

    Lo de los permisos genero en el options del options-framework unos checkbox con los terms para cada usuario, y así compruebo si el id de ese usuario tiene permisos para ese term

    Saludos

    Buenas de nuevo,

    Codigo con roles especiales

    He encontrado el link de arriba, donde explican como dar permisos especiales a los usuarios, basándose en el rol de author.
    Los autores solo pueden editar en estos casos:

    Los post de otros – si están pendiente de revisión
    Los suyos propios – si están pendiente de revisión o borrador
    Si estan publicados ya no pueden editarlos

    Lo he probado y funciona perfectamente, ahora solo tengo que modificarlo para que se adapte a lo que yo necesito.

    Un saludo

Viendo 15 respuestas - 1 de 15 (de 55 total)