Make get_permalink() work outside the Loop using filters

I made an example plugin based on Milo’s answer to show how you can use ajax to get a post and display it with colorbox.

example.php:

<?php
/*
Plugin Name: example
*/

function example_ajax_get_post() {

    $url = $_POST['url'];
    $post = get_post(url_to_postid($url));

    ?>
    <h2><?php print $post->post_title; ?></h2>
    <div><?php print $post->post_content; ?></div>
    <?php

    die();

}// end function

add_action('wp_ajax_get_post', 'example_ajax_get_post');

function example_init() {

    wp_register_style('colorbox-style', plugins_url() . '/example/css/colorbox.css');
    wp_enqueue_style('colorbox-style');

    wp_enqueue_script( 'ajax', plugin_dir_url( __FILE__ ) . 'js/ajax.js', array( 'jquery' ) );
    wp_localize_script( 'ajax', 'ajaxurl', admin_url( 'admin-ajax.php' )  );

    wp_enqueue_script('jquery');

    wp_register_script('colorbox-script', plugins_url() . '/example/js/jquery.colorbox-min.js');
    wp_enqueue_script('colorbox-script');


}// end function

add_action('init', 'example_init');

function example_footer() {
?>
<script>
(function($) {

    $(document).ready(function() {

        $('.post .entry-title a').click(function(e) {

            e.preventDefault();

            var href = $(this).attr('href');

            var data = {
                action : 'get_post',
                url : href
            };

            $.post(ajaxurl, data, function(data) {
                $.colorbox({ html : data });
            });

        });

    });

})(jQuery);
</script>
<?php
}// end function

add_action('wp_footer', 'example_footer');

/* EOF */