innanzitutto non capisco perchè rendi globale $p se poi ti serve la variabile $email e perchè lo fai al di fuori della funzione.

comunque

Codice PHP:
    function extract_email$attr$email null ){
    global 
$email;
    
//Estraggo gli attributi passati
    
extractshortcode_atts( array( 'class' => 'extract_email' ), $attr));

    
//Controllo che esista del contenuto inserito
    
if( $email ){
    
//Creo la box
    
$p "<p class=" $class ">" $email "</p>";
    }
    return 
$p;
    } 
e quando ci sta l'altra funzione devi renderla globale anche li

Codice PHP:
    function altra_funzione(){
    global 
$email;
    echo 
$email;
    } 
oppure

Codice PHP:
    add_shortcode("email""extract_email");
    function 
extract_email$attr$email null ){
    
define("EMAIL"$email);
    
//Estraggo gli attributi passati
    
extractshortcode_atts( array( 'class' => 'extract_email' ), $attr));

    
//Controllo che esista del contenuto inserito
    
if( $email ){
    
//Creo la box
    
$p "<p class=" $class ">" $email "</p>";
    }
    return 
$p;
    }
    echo 
EMAIL