【问题标题】:PHP switch and AJAX display WordPress postPHP 切换和 AJAX 显示 WordPress 帖子
【发布时间】:2014-09-21 02:08:40
【问题描述】:

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

【问题讨论】:

    标签: php jquery ajax wordpress


    【解决方案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' );
    

    【讨论】:

    • 哇,这比我尝试的更有意义......谢谢!现在运行良好!
    • Check this 来改进您的 Ajax 调用。此外,也许您可​​以在地图声明中分配帖子 ID,并且调用 Ajax 将被简化为单个 get_post() 而无需任何开关。
    • 我在使用这种方法时遇到了一个问题:我正在加载的帖子之一在内容之前总是有“数组”这个词。它只显示在一个上,我正在加载的其他 5 个帖子显示正常……知道为什么会这样吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多