如何在ajax调用中使用wordpress函数

时间:2012-05-29 22:05:37

标签: ajax wordpress function jquery

我想知道是否有办法在ajax调用中使用query_post()这样的函数?

假设我正在调用文件_inc / ajax.php

我想能够使用wordpress功能,但我不知道为什么。 有人可以帮助我吗?

非常感谢:)

3 个答案:

答案 0 :(得分:29)

WordPress提供了一个Ajax Url,你应该使用它和一个完整的Ajax API

您需要创建一个jQuery函数。

示例:

jQuery(document).ready(function($) {

    var data = {
        action: 'my_action',
        whatever: 1234
    };

    jQuery.post(ajaxurl, data, function(response) {
        alert('Got this from the server: ' + response);
    });
});

ajaxurl var始终在管理员端可用。如果您在前端使用它,则需要对其进行定义。

然后是一个PHP函数,您可以在其中运行查询。 PHP函数必须附加到wp_ajax_your_action操作。

示例:

add_action('wp_ajax_my_action', 'my_action_callback');

function my_action_callback() {
    global $wpdb; // this is how you get access to the database

    $whatever = intval( $_POST['whatever'] );

    $whatever += 10;

        echo $whatever;

    die(); // this is required to return a proper result
}

wp_ajax_your_action操作适用于管理员,如果您需要在前端使用该操作,则操作为wp_ajax_nopriv_your_action

答案 1 :(得分:1)

你必须在你的主题functions.php中创建你的功能 以下是使用ajax加载热门帖子的示例

function getPopularPosts()
{
    $popularpostdata = wpp_get_mostpopular_data();
    foreach($popularpostdata as $populardata)
        {
            $cur_id = $populardata->id;
            $cur_date = $populardata->post_date;
            $cur_date = date("F j, Y", strtotime($cur_date));
    ?>
    <article id="<?php echo $populardata->post_slug.'_mp';?>" data-attr-post-title="<?php echo $populardata->title; ?>" <?php post_class(); ?>>
      <p class="advt_disclosure"><?php echo advtdescloser(); ?></p>
      <?php 
        echo '<h6>'.getCategoryLink().'</h6>';
        $post_mp = get_post($cur_id);
      ?>
      <h1><?php echo $populardata->title;?></h1>
      <div class="entry-content">
        <div class="post-details"> <?php echo getAuthorData($post_mp->post_author,$cur_id,$populardata->title,$cur_date); ?> </div>
        <div class="collapsediv">
          <div class="row">
            <div class="col-sm-9 post_article">
              <?php
                    $content = $populardata->postcontent; //$content_post->post_content;
                    $content = apply_filters('the_content', $content);
                    $content = str_replace(']]>', ']]&gt;', $content);
                    echo $content;
                    wp_link_pages( array(
                        'before'      => '<div class="page-links"><span class="page-links-title">' . __( 'Pages:', 'twentyfifteen' ) . '</span>',
                        'after'       => '</div>',
                        'link_before' => '<span>',
                        'link_after'  => '</span>',
                        'pagelink'    => '<span class="screen-reader-text">' . __( 'Page', 'twentyfifteen' ) . ' </span>%',
                        'separator'   => '<span class="screen-reader-text">, </span>',
                    ) ); 
                ?>
              <p class="tags"> TAGS: <?php echo get_the_tag_list( '', __( ', ', 'twentyfifteen' ) )?></p>
            </div>
            <div class="col-sm-3 hot_deal"> <?php echo getAdvertisements(); ?> </div>
            <div class="col-sm-12 comment_section"> <?php echo getPostCommentsandSocialmediasharing($post_mp->post_author,$cur_id,$populardata->title); ?> </div>
          </div>
        </div>
      </div>
      <footer class="entry-footer">
        <?php //twentyfifteen_entry_meta(); ?>
        <?php //edit_post_link( __( 'Edit', 'twentyfifteen' ), '<span class="edit-link">', '</span>' ); ?>
      </footer>
      <div class="expander">
        <button class="expand" data-text-swap="Close article">expand article</button>
      </div>
    </article>
    <?php }
    exit();
}
add_action('wp_ajax_getPopularPosts', 'getPopularPosts');
add_action('wp_ajax_nopriv_getPopularPosts', 'getPopularPosts');`

And for call ajax you need to put some where in your themes footer.php

`$(".popular_posts").click(function(e) {
                    e.preventDefault();
                    if($('.popularposts').html().length==0)
                    {
                        $('.popularposts').html('<p class="text-center" style="margin-top:40px;"><img src="<?php echo get_home_url(); ?>/wp-content/themes/twentyfifteen/images/ajax-loader.gif"></p>');
                        $.ajax({
                            type: 'POST',
                            url: "<?php echo get_home_url(); ?>/wp-admin/admin-ajax.php",
                            data: {
                                action: 'getPopularPosts'
                            },
                            success: function( data ) {
                                $('.popularposts').html(data);
                            }
                        });
                    }
                });

答案 2 :(得分:0)

我强烈推荐使用JSON API插件:http://wordpress.org/extend/plugins/json-api/。它为最常见的WordPress功能提供RESTful接口,包括query_post,并允许您添加自己的操作。