php
  • jquery
  • ajax
  • wordpress
  • 2012-03-15 127 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標籤:

    相關問題