2010-11-07 116 views
3

事先,我确实在wordpress支持论坛上提过这个问题,但他们并不是很有帮助。我希望在这里有人能够帮助我。在functions.php中查询函数?

好的,我是一个完全的新手,当谈到Wordpress插件架构时,对我一无所知。我有一个jQuery代码,用于检查用户何时接近页面底部。但这不是问题。这个jQuery将发送一个AJAX请求,并给出一些关于当用户接近页面底部时加载的细节。代码看起来有点像这样的时刻:

$("<div>").load('?ajax=y&offset=something', function() { 

    $(".empty-div").append($(this)); 

    setTimeout(function(){ console.log('after', $(document).height()); }, 0); 
    setTimeout(function(){ console.log('after', $(window).height()); }, 0); 


}); 

我的主要问题是,我不知道该怎么查询或如何去在functions.php中发送信息到PHP函数。例如,我在此刻这是我的PHP函数(直到它的工作):

function get_posts_page() { 


if(isset($_GET['offset'])) { 
    echo"Hello!"; 
} 

} 

我知道WordPress的有add_action和所有的,但我不知道我会申请作为行动可以使PHP接收Javascript正在发送的数据。有没有一个URL可以解析所有功能?感谢您提前提供任何帮助。那么如何从Javascript中的数据获取函数function.php中的PHP函数,在我的主题目录中?

回答

3

我刚刚制作了一段视频,向您展示如何在WordPress中使用add_action请求。你可以watch it here

这里是我的javascript

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script> 
<script> 

$('#branding img').click(function() { 

    $.post('<?php bloginfo('siteurl') ?>/wp-admin/admin-ajax.php', { 
    action: 'my_unique_action', 
    offset: 5 
    }, function(data) { 
    $('#content').prepend('<p>' + data + '</p>'); 
    }); 

}); 


</script> 

而且我在functions.php使用PHP的

// Make sure it runs when the user is logged in, 
// and when they are not. 
add_action('wp_ajax_my_unique_action', 'get_offset'); 
add_action('wp_ajax_nopriv_my_unique_action', 'get_offset'); 

function get_offset() { 
    if(isset($_POST['offset'])) { 
    echo 'Your ajax request was successful. Here was your offset: <strong>' . $_POST['offset'] . '</strong>'; 
    } 

    die; 
} 

参考:http://codex.wordpress.org/AJAX_in_Plugins

+0

干得好,谢谢:) – Johnny 2010-11-08 22:55:35

-1

你正试图从Javascript调用PHP函数,对吗?

您需要一些页面上的某些逻辑,其中调用get_posts_page()。要么你可以创建一个新的页面getPostsPage.php?offset=或者你可以把一些逻辑functions.php,像

 
if(isset($_GET['function']) { 
    switch($_GET['function']) { 
     case 'get_posts_page': 
      get_posts_page(); 
    } 
} 

但是,建议前一种方法;您不希望某人能够修改function参数并以恶意方式访问deleteAllPosts()

因此:

 
// getPostsPage.php 
require PATH . 'functions.php'; 
get_posts_page(); //checks $_GET['offset'] 

而且记得要优雅地失败(不公开的错误消息),如果“抵消”没有设置,或什么的。

+0

见@Baylor Rae的答案,因为它是做AJAX的标准方式WordPress,滚动你自己需要你处理太多的东西(如安全性),如果你以标准方式来做,它们是自动的。 – MikeSchinkel 2010-11-07 21:35:03