使用筛选器使get_permarink()在循环之外工作

时间:2012-11-17 作者:Anshul

我正在开发一个插件,在循环外的灯箱中显示wordpress帖子。我注意到一些修改帖子内容的插件(如类似Facebook的按钮插件)使用get_permalink() 函数检索帖子URL。当post正常打开时(single.php),插件工作正常。当在灯箱中打开post(在环路外)时,插件无法工作,因为get_permalink() 插件中没有返回任何内容。然而,如果我能以某种方式应用过滤器并返回get_permalink($post_ID) 相反,我可以完成这项工作。我不知道如何正确地钩住它以获得永久链接。我试过了,但这只会让它进入一个无限循环:

add_filter(\'post_link\',\'cg_post_permalink\');
function cg_post_permalink(){ return get_permalink($post_ID); }
我看到了post_link 是get\\u permalink函数的挂钩

PS-请不要建议使用iframe,因为它有自己的一系列复杂情况。:)

2 个回复
SO网友:Taurayi

我根据米洛的回答制作了一个示例插件,以展示如何使用ajax获取帖子并使用colorbox显示。

实例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 */

SO网友:Milo

首先,我建议阅读AJAX in Plugins 在法典中,包括底部链接的示例。根据WordPress的配置方式,您执行AJAX请求的方式有几个潜在的失败点。

其次,将请求的帖子ID与AJAX请求一起传递,然后通过WP_Query. 然后,您可以运行循环来输出帖子内容,而函数在循环之外不工作的问题就不再是问题了。

也看到this answer 我给出了一个与AJAX相关的问题,该问题展示了通过AJAX加载帖子的完整工作示例。

结束

相关推荐

Travel Blog Plugins

今年晚些时候,我将使用Wordpress创建一个关于我旅行的博客。我希望该博客具有以下功能我的帖子将被地理定位一张包含帖子位置的地图,可以单击地图上的各个点到达帖子</我正在寻找最好/最合适的插件。谢谢,艾尔。