Plugin for WordPress and Foundation Reveal
L15, L26, L31-60: Inconsistent indentation levels.
L4-43: Consider indenting this block.
L04: I don't see the point in storing the ID rather than the jQuery object itself. Instead of var id = "#" + post_id;, go ahead and store the object: var $id = $("#" + post_id);. Modify the references as appropriate on L11 and L33.
L13: Your code for appending the modal is nice in terms of the builder pattern, but it might be better just as:

var modal = $("&lt;div class='reveal-modal' id='" + post_id + "'&gt;&lt;/div&gt;").appendTo("body")

L14: There's no point in declaring the ajaxURL variable. Instead, just go ahead and use { ... url: MyAjax.ajaxurl, ... } on L17,
L20: The jQuery API documentation on .html() notes a specific case in which it's important to use .empty().html(). I don't believe this applies in your case; you don't need the call to .empty() since .html() will effectively empty the container first.
L21: Since jQuery 1.7, .on() is preferred.
L58-59: This part is at best senseless and wrong, and at worst unintuitive and potentially deceptive. By extracting the ID attribute and using it as a selector, you're effectively matching against the ID without the #. This either means that it doesn't do what you think it does, in which case you should use:

jQuery(this).closest("div").foundation("reveal", "close");


or you for some reason have a construct like &lt;div id='span'&gt; and you really mean to match all span elements instead of #span. In that case, I strongly suggest you restructure your HTML to be more semantically sensible, and to leave a comment explicitly detailing that that's your intention.