php
  • jquery
  • ajax
  • wordpress
  • 2012-03-15 128 views 1 likes 
    1

    全部, 我在wordpress中的用户定义菜单中创建了一个侧面菜单。我碰到下面的代码菜单选项(因为我知道菜单ID用户想要显示的侧):使用AJAX显示页面内容

    $menu_items = wp_get_nav_menu_items($menu_id); 
    $menu_items = (array)$menu_items; 
    $output = '<div id="menu_options">'; 
    $output .= '<ol class="tabs">'; 
    foreach($menu_items as $menu){ 
        $output .= '<li><a href="'.$menu->title.'" class="menu_page_id" id="'.$menu->ID.'">'.$menu->title.'</a></li>'; 
    } 
    $output .= '</ol>'; 
    $output .= '</div>'; 
    $output .= '<div id="menu_content">This is content</div>'; 
    $output .= '<input type="hidden" value="'.$menu_id.'" id="menu_id">'; 
    
    return $output; 
    

    当其中一个选项卡,用户点击我调用AJAX调用尝试并获得网页内容与下面的代码:

    $('.menu_page_id').click(function(){ 
        event.preventDefault(); 
        page_id = $(this).attr("id"); 
        menu_id = $('#menu_id').val(); 
        action = "get_page_content"; 
        $.post(ajaxurl, { page_id: page_id, menu_id: menu_id, action: action }, function(results) { 
         results = results.substring(0, results.length - 1); 
         $("#menu_content").hide(); 
         $("#menu_content").html(results).fadeIn(); 
        }); 
    }); 
    

    这将调用下面的函数返回点击页面的内容:

    function get_page_content(){ 
        $page_id = mysql_real_escape_string($_POST['page_id']); 
        $menu_id = mysql_real_escape_string($_POST['menu_id']); 
    
        $menu_items = wp_get_nav_menu_items($menu_id); 
        $menu_items = (array)$menu_items; 
        foreach($menu_items as $menu){ 
         if($menu->ID == $page_id){ 
          echo $menu->post_content; 
         } 
        } 
    } 
    add_action('wp_ajax_get_page_content', 'get_page_content'); 
    add_action('wp_ajax_nopriv_get_page_content', 'get_page_content'); 
    

    这一切工作良好,并返回页面内容除了它只是转储结果出来,其实并不显示什么,我想用简码等,说我有在WordPress的页面上的以下内容:

    [frame_left]<img src="http://www.website.com/wp-content/uploads/2011/10/pic.jpg" alt="" width="300" height="240" />[/frame_left] 
    <h2 style="margin: 25px 0 0 0;">Person</h2> 
    <span class="small"><em>Title</em></span> 
    <p style="text-align: justify;">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris lacinia justo quis neque dapibus porta...</p> 
    [button link="http://www.google.com" text="Read More"] 
    [clear] 
    

    下面是究竟会从我的AJAX请求返回:

    [frame_left][/frame_left] Title Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris lacinia justo quis neque dapibus porta...[button link="http://www.google.com" text="Read More"] [clear] 
    

    有没有办法真正返回通过WordPress的页面内容,并将它正确显示简码,HTML等?

    感谢您的任何帮助,你可以摆脱这种情况!

    回答

    0

    请尝试以下。

    +0

    谢谢你。我会在哪里添加?我应该在第一个wp_get_nav_menu_items之后添加它吗? – user1048676 2012-03-15 05:16:15

    +0

    我会在之前添加它。如果您查看方法的[实现](http://core.trac.wordpress.org/browser/tags/3.3.1/wp-includes/nav-menu.php),您会看到它调用了apply_filters然后返回菜单项。因此,您必须在调用wp_get_nav_menu_items之前删除strip_tags过滤器。 – bsimic 2012-03-15 11:48:15

    0

    您可以尝试使用curl获取实际页面,然后插入到domdocument中,然后从容器div标记中获取内容。获得wp_get_nav_menu_items

    的remove_filter也可以应用于其他方法,以及当

    remove_filter('wp_get_nav_menu_items', 'strip_tags'); 
    

    这将删除该过滤器剥离HTML标签:

    相关问题