php - personalizados - WordPress: tipo de publicación personalizada, función personalizada, capacidad personalizada
mostrar campos personalizados wordpress (2)
Estoy atrapado en un problema al asignar capacidad personalizada con tipo de publicación personalizado a una función personalizada.
El problema es que quiero eliminar la opción Agregar nuevo ( no con un hack de CSS o deshaciendo el elemento del menú ) de mi tipo de publicación personalizada. Ya he encontrado respuestas que sugieren muchas soluciones, pero ninguna de ellas funciona a la perfección.
Lo más cercano a lo que quiero es esto:
register_post_type( ''custom_post_type_name'', array(
''capability_type'' => ''post'',
''capabilities'' => array(
''create_posts'' => ''do_not_allow'', // false < WP 4.5, credit @Ewout
),
''map_meta_cap'' => true, // Set to `false`, if users are not allowed to edit/delete existing posts
));
Este código elimina el enlace Agregar nuevo, pero asigna la barra de publicación predeterminada para las capacidades. Tenga en cuenta la línea 2 del código anterior. Si lo cambio a mi slug de tipo de publicación personalizada, deja de funcionar y ni siquiera puedo acceder a la página de publicaciones.
Una cosa a tener en cuenta es que estoy trabajando con una función personalizada, que solo tiene capacidad de lectura por defecto.
Si también asigno la función edit_posts , entonces se logra mi objetivo, pero luego el usuario también puede acceder a publicaciones y comentarios, lo que no quiero.
Woocommerce está haciendo esto. Me sumerjo en el código woocommerce y agrego esta línea donde registra sus productos y pedidos.
''capabilities'' => array( ''create_posts'' => ''do_not_allow'' ),
Y todo funciona como yo quiero. He explorado el código de woocommerce todo el día pero no puedo encontrar cómo lo está haciendo. ¿Puede alguien más ayudarme con otros ojos? :)
Muy apreciado. Gracias..
Ya te menciono que nos das poco más detalles sobre el plan que quieres hacer?
Aquí está la solución que creo que sería útil para usted.
Si quiere usar map_meta_cap => true
, necesitará cambiar también el map_meta_cap => true
con su propio tipo, vea más https://codex.wordpress.org/Function_Reference/register_post_type#capability_type
Pero si establece su propio valor de capability_type
, necesitará agregar la capacidad al rol de usuario que desee agregar.
aquí hay un ejemplo completo.
if ( !class_exists( ''WPSE64458_CPT_Register'' ) ) {
class WPSE64458_CPT_Register {
function __construct() {
add_action( ''init'', array( $this, ''wpse64458_register_post_types'' ), 5 );
add_action( ''admin_init'', array( $this, ''wpse64458_add_caps'' ), 5 );
add_filter( ''register_post_type_args'', array( $this, ''wpse64458_modify_cpt_registry'' ) , 10, 2 );
}
/**
* Register core post types.
*/
public function wpse64458_register_post_types() {
if ( ! is_blog_installed() || post_type_exists( ''member'' ) ) {
return;
}
register_post_type( ''member'',
apply_filters( ''wpse64458_callb_post_type_member'',
array(
''labels'' => array(
''name'' => __( ''Members'', ''seoleader'' ),
''singular_name'' => __( ''Member'', ''seoleader'' ),
''all_items'' => __( ''All Members'', ''seoleader'' ),
''menu_name'' => _x( ''Members'', ''Admin menu name'', ''seoleader'' ),
''add_new'' => __( ''Add New'', ''seoleader'' ),
''add_new_item'' => __( ''Add new member'', ''seoleader'' ),
''edit'' => __( ''Edit'', ''seoleader'' ),
''edit_item'' => __( ''Edit member'', ''seoleader'' ),
''new_item'' => __( ''New member'', ''seoleader'' ),
''view'' => __( ''View member'', ''seoleader'' ),
''view_item'' => __( ''View member'', ''seoleader'' ),
''search_items'' => __( ''Search members'', ''seoleader'' ),
''not_found'' => __( ''No members found'', ''seoleader'' ),
''not_found_in_trash'' => __( ''No members found in trash'', ''seoleader'' ),
''parent'' => __( ''Parent member'', ''seoleader'' ),
''featured_image'' => __( ''Member image'', ''seoleader'' ),
''set_featured_image'' => __( ''Set member image'', ''seoleader'' ),
''remove_featured_image'' => __( ''Remove member image'', ''seoleader'' ),
''use_featured_image'' => __( ''Use as member image'', ''seoleader'' ),
''insert_into_item'' => __( ''Insert into member'', ''seoleader'' ),
''uploaded_to_this_item'' => __( ''Uploaded to this member'', ''seoleader'' ),
''filter_items_list'' => __( ''Filter members'', ''seoleader'' ),
''items_list_navigation'' => __( ''Members navigation'', ''seoleader'' ),
''items_list'' => __( ''Members list'', ''seoleader'' ),
),
''public'' => true,
''show_ui'' => true,
''capability_type'' => ''member'',
''map_meta_cap'' => true,
''menu_icon'' => ''dashicons-groups'',
''publicly_queryable'' => true,
''exclude_from_search'' => false,
''hierarchical'' => false, // Hierarchical causes memory issues - WP loads all records!
''rewrite'' => array( ''slug'' => ''member'' ),
''query_var'' => true,
''supports'' => array( ''title'', ''editor'', ''thumbnail'', ''excerpt'' ),
''has_archive'' => ''members'',
''show_in_nav_menus'' => true,
''show_in_rest'' => true,
)
)
);
} // end of wpse64458_register_post_types
/**
* Get capabilities.
*
* @return array
*/
private function wpse64458_set_caps() {
$capabilities = array();
$capability_types = array( ''member'' );
foreach ( $capability_types as $capability_type ) {
$capabilities[ $capability_type ] = array(
// Post type
"edit_{$capability_type}",
"read_{$capability_type}",
"delete_{$capability_type}",
"edit_{$capability_type}s",
"edit_others_{$capability_type}s",
"publish_{$capability_type}s",
"read_private_{$capability_type}s",
"delete_{$capability_type}s",
"delete_private_{$capability_type}s",
"delete_published_{$capability_type}s",
"delete_others_{$capability_type}s",
"edit_private_{$capability_type}s",
"edit_published_{$capability_type}s",
// Terms
// "manage_{$capability_type}_terms",
// "edit_{$capability_type}_terms",
// "delete_{$capability_type}_terms",
// "assign_{$capability_type}_terms",
);
}
return $capabilities;
}
/*
Add Capability
*/
public function wpse64458_add_caps(){
global $wp_roles;
if ( ! class_exists( ''WP_Roles'' ) ) {
return;
}
if ( ! isset( $wp_roles ) ) {
$wp_roles = new WP_Roles();
}
$capabilities = $this->wpse64458_set_caps();
foreach ( $capabilities as $cap_group ) {
foreach ( $cap_group as $cap ) {
$wp_roles->add_cap( ''editor'', $cap );
$wp_roles->add_cap( ''administrator'', $cap );
}
}
}
public function wpse64458_modify_cpt_registry( $args, $post_type ){
// Do not filter any other post type
if ( ''member'' !== $post_type ) {
// Give other post_types their original arguments
return $args;
}
if( current_user_can(''editor'') ) {
$args[''capabilities''][''create_posts''] = false;
}
// Give the custom-css-js post type it''s arguments
return $args;
}
}
}
luego herede la class
con el new WPSE64458_CPT_Register();
Con este ejemplo, deshabilito la función de editor para agregar nuevas funciones de publicación de miembros. modifique lo que quiera, o puede hacer esto otros también. pero mencionaste anteriormente que ya trataste de seguir WooCommerce, en realidad también lo hacen de esta manera,
Espero que tenga sentido para ti.
HappyCodding!
Puede restringir la función de usuario específica a la publicación personalizada mediante la secuencia de comandos siguiente:
Agregar rol personalizado
add_action(''init'',''add_my_custom_role'');
function add_my_custom_role() {
add_role(''my_custom_role'',
''Custom Role'',
array(
''read'' => true,
''edit_posts'' => false,
''delete_posts'' => false,
''publish_posts'' => false,
''upload_files'' => false,
''publish_posts'' => false,
''create_posts'' => false,
)
);
}
Registrarse publicación personalizada
add_action( ''init'', ''my_custom_post_type'');
function my_custom_post_type() {
$args = array(
''label'' => __( ''Custom post'', ''custom-text-domain'' ),
''description'' => __( ''Custom post'', ''custom-text-domain'' ),
''labels'' => $labels,
''supports'' => array( ''title'', ''comments'', ''revisions'', ),
''hierarchical'' => false,
''public'' => true,
''show_ui'' => true,
''rewrite'' => $rewrite,
''capability_type'' => array(''custom_post'',''custom_post''),
''map_meta_cap'' => true, // Set to `false`, if users are not allowed to edit/delete existing posts
);
register_post_type( ''custom_post'', $args );
}
Permitir que las capacidades del usuario se publiquen en función de los roles
add_action(''admin_init'',''custom_post_add_role_caps'',999);
function custom_post_add_role_caps() {
// Add the roles you''d like to administer the custom post types
$roles = array(''my_custom_role'',''editor'');
// Loop through each role and assign capabilities
foreach($roles as $the_role) {
$role = get_role($the_role);
$role->add_cap( ''read'' );
$role->add_cap( ''read_custom_post'');
$role->add_cap( ''read_private_custom_post'' );
$role->add_cap( ''edit_custom_post'' );
$role->add_cap( ''edit_custom_post'' );
$role->add_cap( ''edit_others_custom_post'' );
$role->add_cap( ''edit_published_custom_post'' );
$role->add_cap( ''publish_custom_post'' );
$role->add_cap( ''delete_others_custom_post'' );
$role->add_cap( ''delete_private_custom_post'' );
$role->add_cap( ''delete_published_custom_post'' );
}
}
Espero que esto te ayude, para obtener más ayuda por favor visita
https://codex.wordpress.org/Function_Reference/register_post_type
y