当前位置: 首页 > 面试题库 >

如何在Wordpress中加载Ajax

亢建木
2023-03-14
问题内容

我熟悉以普通方式在jQuery中使用ajax。
我已经玩了一段时间了,但是不了解Wordpress使其正常工作需要
什么… 我在这里所摘录的内容来自一些教程或文章。
这在 functions.php中 (在子主题中):

// code to load jquery - working fine

// code to load javascript file - working fine

// ENABLE AJAX :
function add_ajax()
{
   wp_localize_script(
    'function',
    'ajax_script',
    array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
}

$dirName = get_stylesheet_directory();  // use this to get child theme dir
require_once ($dirName."/ajax.php");

add_action("wp_ajax_nopriv_function1", "function1"); // function in ajax.php

add_action('template_redirect', 'add_ajax');

jQuery本身正在加载并正常工作。

我已经尝试过一些基本的ajax,如下所示:

jQuery(document).ready(function($){
    $('a.link').click(function(){
        $.ajax({
              url:     ajax_script.ajaxurl,
              data:    ({action  : 'function1'}),
              success: function(data){
                     $('#result').html(data);
              }
        });
        return false;
    });
});

除此之外,我不知道如何测试以确保它是否从一开始就正确地加载了……

在这里的任何帮助,将不胜感激。

编辑:
在萤火虫中此错误:

ReferenceError: ajax_script is not defined
       url:   ajax_script.ajaxurl,

问题答案:

根据您的要求,我已为您解答。

正如Hieu Nguyen在他的答案中建议的那样,您可以使用ajaxurl javascript变量来引用admin-
ajax.php文件。但是,此变量未在前端声明。通过在主题的header.html" target="_blank">php中放置以下内容,可以很容易地在前端声明它。

<script type="text/javascript">
    var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>";
</script>

如Wordpress AJAX文档中所述,您有两个不同的钩子-
wp_ajax_(action)和wp_ajax_nopriv_(action)。这些之间的区别是:

  • wp_ajax_(action):如果从管理面板内部进行ajax调用,则将触发此事件。
  • wp_ajax_nopriv_(action):如果从网站的前端进行ajax调用,则将触发此事件。

上面链接的文档中描述了其他所有内容。编码愉快!

PS这是一个 应该 起作用的示例。(我还没有测试)

前端

<script type="text/javascript">
    jQuery.ajax({
        url: ajaxurl,
        data: {
            action: 'my_action_name'
        },
        type: 'GET'
    });
</script>

后端

<?php
    function my_ajax_callback_function() {
        // Implement ajax function here
    }
    add_action( 'wp_ajax_my_action_name', 'my_ajax_callback_function' );    // If called from admin panel
    add_action( 'wp_ajax_nopriv_my_action_name', 'my_ajax_callback_function' );    // If called from front end
?>

更新 即使这是一个古老的答案,它似乎仍在引起人们的赞许-太好了!我认为这可能对某些人有用。

WordPress具有功能wp_localize_script。此函数将数据数组作为第三个参数,旨在进行转换,如下所示:

var translation = {
    success: "Success!",
    failure: "Failure!",
    error: "Error!",
    ...
};

因此,这只是将一个对象加载到HTML head标签中。可以通过以下方式利用:

后端

wp_localize_script( 'FrontEndAjax', 'ajax', array(
    'url' => admin_url( 'admin-ajax.php' )
) );

这种方法的优点是,它可以在主题和插件中使用,因为您无需将ajax URL变量硬编码到主题中。

现在,可以通过ajax.url而不是ajaxurl在前面的示例中简单地在前端访问URL 。



 类似资料:
  • 我在使用Wordpress时遇到的问题是希望将CodeIgniter功能合并到Wordpress主题文件中。例如,我的许多CodeIgniter视图文件中都包含了页眉和页脚。同样的页眉和页脚也需要包含在Wordpress主题中。 想法是加载CI实例并在Wordpress上使用它。任何帮助都将不胜感激! 我试过这个 https://github.com/falexandrou/Codeigniter

  • 问题内容: 我已经花了数小时阅读和尝试教程。我似乎找不到能解决问题的解决方案,我知道它应该很简单,但是我在AJAX方面苦苦挣扎。:( 我想从div中的链接加载发布内容。以下是我所拥有的。有人可以在JavaScript方面帮我吗?谢谢! 我想在div #loadAjaxHere中加载此代码 感谢您的帮助!! 问题答案: 好的,我认为经过长时间的反复试验,我已经解决了这一问题。 这似乎可行,但是如果这

  • 问题内容: 我想为我的WordPress博客创建一个自定义页面,该页面将在其中执行我的PHP代码,同时保留整个网站CSS /主题/设计的一部分。 PHP代码将使用第三方API(因此我需要包含其他PHP文件)。 我该如何完成? 注意:我没有与WordPress API交互的特定需求- 除了包括某些其他PHP库之外,我还需要在WordPress页面中包含的PHP代码中没有其他依赖项。因此,显然,任何不

  • 问题内容: 我浏览了旧的问题,并尝试了许多似乎可以做到的不同方法。我最接近的工作是在这里:如何在自定义WP_QueryAjax上实现分页 我已经尝试了一切,但没有用。页面上没有任何变化。如果您检查并单击“加载更多按钮”,则jQuery会执行“加载更多按钮”操作,因为它从更改为,即使对我来说,这似乎也不对。它并没有添加帖子,我想我缺少一些简单的东西,但是我一生都无法解决。 我的模板文件中的代码是:

  • 问题内容: 这是一个答案/解决方案,而不是一个问题,即使我尝试了我的开发环境,仍然可能存在一些错误。 我最近尝试在小部件/菜单中使用wp_editor,经过一番搜索,我没有找到想要的完整解决方案。 在按小时挖掘wp的代码后,我将在下面分享我的解决方案: 问题答案: 可能涉及黑客攻击,但是,我尝试将其最小化。 为了使wp_editor可以在动态html中工作(这意味着在不重新加载页面的情况下,js会

  • 我有一个xml文件,想要加载一些网页。如何这样做。