PHP开关和AJAX显示WordPress帖子

时间:2014-09-20 15:29:47

标签: php jquery ajax wordpress

我在WordPress页面上有一张世界地图。我想根据点击地图的哪个区域将特定帖子加载到页面上。我将此作为我网站的插件。这就是我现在所拥有的:

的index.php:

function get_post_data(){

  // Switch based on region
  switch($_REQUEST['region']) {
    //Asia
    case 'China':
    case 'Japan':
        class Post{
            function get_post(){
                global $more;
                $more = 0;
                query_posts('p=122');
                if(have_posts()) : while(have_posts()) : the_post();
                 the_title( '<h2>', '</h2>' ); 
                 the_post_thumbnail('medium'); 
                 the_content( '<p>', '</p>' ); 
                endwhile;
                endif;
                wp_reset_query();
            }
        }
      break;

    //Middle East
    case 'Pakistan':
    case 'Afghanistan':
        class Post{
            function get_post(){
                global $more;
                $more = 0;
                query_posts('p=123');
                if(have_posts()) : while(have_posts()) : the_post();
                 the_title( '<h2>', '</h2>' ); 
                 the_post_thumbnail('medium'); 
                 the_content( '<p>', '</p>' ); 
                endwhile;
                endif;
                wp_reset_query();
            }
        }
      break;
    //etc
  }

  $post = new Post();
  $post->get_post();
  echo json_encode($post);
  die();
}

add_action('wp_ajax_get_post_data', 'get_post_data');
add_action('wp_ajax_nopriv_get_post_data', 'get_post_data');
?>

start.js:

onRegionClick: function(element, code, region)
{
    $.ajax(get_data.ajaxurl, {
        data: {region: region, 'action': 'get_post_data'},
        dataType: 'json',
        success: function(response) {
            $("#post").html(response);
        }
    });

}

AJAX响应返回与我想要的帖子相关的所有标记,但它没有输出到#post div。所以我知道AJAX,交换机和地图设置正确。我只是不知道如何将WP帖子分配给变量,然后我可以用JSON输出。我认为它与get_the_content()有关,但我不确定如何正确使用它....

1 个答案:

答案 0 :(得分:1)

修改以下内容并应该有效:

  • Don't use query_posts。对于这种查询,get_posts()是好的。但是,当你只是拉一个帖子时,get_post()就足够了。

  • 您正在复制班级的声明并将其隐藏在交换机内。它应该转到根并将帖子ID传递给自定义方法get_post( $ID )

这将是这样的(未经测试):

class Post{
    function get_post( $ID ){
        $html = '';
        $post = get_post( $ID );
        if( $post ) {
            $html = $post->post_title;
            $html .= wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'full' );
            $html .= $post->post_content;
        }
        return $html;
    }
}

function get_post_data(){
    $post = new Post();
    $result = '';

    switch( $_REQUEST['region'] ) {

        case 'China':
        case 'Japan':
            $result = $post->get_post( 122 );
        break;

        case 'Pakistan':
        case 'Afghanistan':
            $result = $post->get_post( 123 );
        break;
    }

    echo json_encode($result);
    die();
}

add_action( 'wp_ajax_get_post_data', 'get_post_data' );
add_action( 'wp_ajax_nopriv_get_post_data', 'get_post_data' );