Per ora ho risolto così:

Nella funzione "select_categoria" ho tolto la condizione
codice:
if(get_post_meta( get_the_ID(), '_wp_page_template', TRUE ) == 'categoria.php')
in questo modo il box è sempre presente in ogni pagina ma nascosto di default (vedere css e jquery sotto)

codice:
function select_categoria_data() {
        ?>
    <style>#id_categoria{display:none}</style>
        <?php
        //COSTRUISCO LA SELECT
        ?>
        <script type="text/javascript">
            jQuery(document).ready(function() {
                var template = jQuery('#page_template :selected').val();
                if(template == 'categoria.php')
                  jQuery('#id_categoria').show();
                
                jQuery('#page_template').bind('change', function (){
                    var template = jQuery('#page_template :selected').val();
                    if(template == 'categoria.php')
                        jQuery('#id_categoria').show();
                    else
                        jQuery('#id_categoria').hide(); 
                });
            });
        </script>
        <?php
}
Ovviamente se qualcuno conosce il modo "giusto" per ottenere questo risultato mi faccia sapere!