PHP开关和AJAX显示WordPress帖子


PHP switch and AJAX display WordPress post

我在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()有关,但我不确定如何正确使用它…。

修改以下内容,它应该可以工作:

  • 不要使用query_posts。对于这种查询,get_posts()是一个很好的查询。但由于您只发布了一个帖子,那么get_post()就足够了。

  • 您正在复制类的声明,并将其隐藏在开关中。它应该转到根目录并将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' );