2013-08-29 172 views
3

我已經使用wp_editor創建了一個前端編輯器,它的功能與它應該一樣。Wordpress wp_editor短代碼問題

經過測試,我注意到它剝離了已插入內容的任何簡碼。我研究過這個問題,發現它是'ob_'(輸出緩衝),它正在刪除它們。如果我刪除了這個輸出緩衝,那麼這個簡碼顯示正常,但是它破壞了我爲編輯創建的功能。

我將如何保留下面使用的代碼,但修改它以確保顯示所有的短代碼?任何幫助/想法大爲讚賞,S.

if(!is_feed() && current_user_can('manage_network')) : 

function ps_add_post_editor($content) { 
global $post; 
$settings = array(
    'wpautop' => true, 
    'media_buttons' => false 
); 
    $content .= '<div id="content-edit-area" style="display:none;"><form action="" id="page-content-editor-panel" method="post"><span id="ajax_my_post_edit_nonce" class="hidden">' . wp_create_nonce('ajax_my_post_edit_nonce') . '</span>' . ps_get_wp_editor($post->post_content, 'textarea-' . $post->ID , $settings) . '<input type="submit" id="feesavebtn" value="Save" /></form><a href="#" id="cancelbtn">Cancel</a></div><br><br><div id="loadingmessage"><img src="'.get_template_directory_uri().'/images/loading.gif" /> saving...</div> 

    <style type="text/css"> 
     #textarea-'.$post->ID.'_ifr, #textarea-'.$post->ID.' { min-height:700px !important; } 
    </style> 

    <script type="text/javascript"> 
    jQuery(\'#page-content-editor-panel\').submit(function(){  
    var pageid = '.$post->ID.'; 
    var content; 
    var editor = tinyMCE.get(\'textarea-'.$post->ID.'\'); 
    if (editor) { 
     content = editor.getContent(); 
    } else { 
     content = jQuery(\'#textarea-'.$post->ID.'\').val(); 
    }  
    jQuery(\'#content-edit-area\').hide(); 
    jQuery(\'#loadingmessage\').show(); 
    jQuery.post(
     ajaxurl, 
     { 
      \'action\':\'add_foobar\', 
      \'nonce\':jQuery(\'#ajax_my_post_edit_nonce\').text(), 
      \'post_id\':pageid, 
      \'post_data\':content 
     }, 
     function(response){    
      window.location.reload(true); 
     } 
    ); 
    return false;   
    }); 
    </script>'; 

return $content; 
} 

function ps_get_wp_editor($content,$textarea,$settings) { 
ob_start(); 
wp_editor($content, $textarea, $settings); 
$edior_html_code = ob_get_contents(); 
ob_end_clean(); 
return $edior_html_code; 
} 
add_filter('the_content', 'ps_add_post_editor'); 

add_action('wp_ajax_add_foobar', 'prefix_ajax_add_foobar'); 
add_action('wp_ajax_nopriv_add_foobar', 'prefix_ajax_add_foobar'); 

function prefix_ajax_add_foobar() { 
if(wp_verify_nonce($_REQUEST['nonce'], 'ajax_my_post_edit_nonce'))   {  
    $myfee_post = array(); 
    $myfee_post['ID'] = $_POST['post_id']; 
    $myfee_post['post_content'] = $_POST['post_data']; 
    wp_update_post($myfee_post);  
    die("This page has now been updated."); 
} else {   
    die("Unable to process your request at this time."); 
} 
} 

endif; 
+0

我不知道你是否已經碰到過這一點,但它可能是模糊使用HTTPS ://github.com/jaredatch/Custom-Metaboxes-and-Fields-for-WordPress/issues/129。我對Ajax和這個'wp_editor'函數有很多問題沒有解決,而且信息非常稀少。 –

+0

我使用'wp_editor()'而不是'ps_get_wp_editor()'(沒有'ob_ *'東西)測試了你的代碼,它工作正常,短代碼沒有被去除。您是否嘗試禁用所有其他插件並使用TwentyTwelve主題? – brasofilo

回答

1

我不得不承認,我不是很確定你的目標是什麼,但對於它的價值,這似乎爲我工作:

remove_filter('the_content', 'do_shortcode', 11); 

function ps_get_wp_editor($content,$textarea,$settings = array()) { 
    ob_start(); 
    wp_editor($content, $textarea, $settings); 
    $editor_html_code = ob_get_contents(); 
    ob_end_clean(); 
    return $editor_html_code; 
} 

function ps_add_post_editor($content) { 
    global $post; 

    $post_content = $post->post_content; 
    $content = ps_get_wp_editor($post_content, 'ps-editor-' . $post->ID); 
    return $content; 
} 
add_filter('the_content', 'ps_add_post_editor'); 

function ps_eat_pants() { 
    return "eat pants has happened"; 
} 
add_shortcode('eat_pants', 'ps_eat_pants'); 

問題是,如果您想要編輯短代碼,因爲它在後端的編輯器中,您需要從'the_content'中刪除'do_shortcode'過濾器,以便它在顯示時不會運行前端。

我不得不承認,我不知道你發佈的代碼實際上是如何工作的,我假設它是打錯輸入或者是出於上下文。 =)

我的意思是,沒有點時,你實際上是給你的功能,所有必要的參數...

如果你解釋你更詳細地在做什麼,它可能會有所幫助,但我希望這有助於。

[編輯:哦,那「eat_pants」的事情僅僅是一個測試簡碼...]

+0

好的謝謝你的答覆 - 刪除短代碼過濾器確實解決了我的問題,但是當保存或取消編輯時,短代碼留作代碼而不是正在運行。 (我已經在上面添加了我的完整代碼)。 – ss888

+0

@ ss888噢,好吧,我認爲你必須找到一些條件,在此期間你可以刪除並重新添加該過濾器。你必須以某種方式重新添加過濾器,當你顯示的帖子,並且只有在添加編輯器時刪除它... Hrrm ...這可能會很棘手。我想知道,如果您只是在編輯器中添加編輯器時才能從the_content篩選器中刪除do_shortcode,但我現在有點難以理解。這很棘手,因爲「the_content」將始終在前端進行過濾,並且這是您要顯示內聯編輯器的位置... – ZroonStack

+0

aarrrrgggghhhhh !!!!感謝您的信息 - 似乎無法找到任何方式使這項工作!!!!! – ss888