This option is stored in the wp_usermeta
table with the meta_key
name of metaboxhidden_nav-menus
.
If we hide all the boxes, this is the meta_value
of the option:
array(
"nav-menu-theme-locations",
"add-custom-links",
"add-post",
"add-page",
"add-portfolio",
"add-category",
"add-post_tag",
"add-post_format",
"add-location"
)
There is one CPT, portfolio
. If we wanted for it to be always visible every time the user visits the page (/wp-admin/nav-menus.php
), this code would do that:
add_filter( 'get_user_option_metaboxhidden_nav-menus', 'cpt_always_visible_wpse_87882', 10, 3 );
function cpt_always_visible_wpse_87882( $result, $option, $user )
{
if( in_array( 'add-portfolio', $result ) )
$result = array_diff( $result, array( 'add-portfolio' ) );
//$show_boxes = array( 'cpt1', 'cpt2', 'cpt3' );
//if( in_array( $show_boxes, $result ) )
// $result = array_diff( $result, $show_boxes );
return $result;
}
But this forces the CPT to be visible even if the user un-checks the Screen Option. In the next visit to the page, the box will be visible again.
To do it one time after user registration, the action hook user_register
should be used together with the function update_user_meta
.
To do it on a fresh install, a custom install.php
could be used. Maybe another technique is available, but not sure about it…