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
    extract( shortcode_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
    extract( shortcode_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;