2015-10-05 86 views
1

我正在寫一個WordPress插件,獲得HTML內容WordPress插件 - 獲得無衝突

我發現2種方式來獲得最終輸出的輸出內容:

// first way 

function __myplugin_callback($buffer) { 
    return $buffer; 
} 

function __myplugin_buffer_start() { ob_start("callback"); } 

function __myplugin__buffer_end() { ob_end_flush(); } 

add_action('wp_head', 'buffer_start'); 
add_action('wp_footer', 'buffer_end'); 

,當我只有工作我的插件活躍,當我有更多的插件活躍,如搜索引擎優化Yoast,我得到插件和我之間的衝突無法正常工作。

// second way 
ob_start(); 

add_action('shutdown', function() { 
$final = ''; 
$levels = ob_get_level(); 

for ($i = 0; $i < $levels; $i++) 
{ 
    $final .= ob_get_clean(); 
} 

echo apply_filters('final_output', $final); 
}, 0); 

// call the filter 

add_filter('final_output', function($output) 
{ 
    return str_replace(.., .., $output); 
}); 

這工作比第一種方式更好,但我也有像Visual Composer的

有一種安全的方式,以獲得最終的HTML輸出,而不與其他插件衝突插件衝突?

回答

0

輸出緩衝似乎是一個奇怪的方式來做到這一點。除非我失去了一些東西,你應該能夠使用file_get_contents()

$page_content = file_get_contents($_SERVER['REQUEST_URI']); 
+0

嘿,謝謝,這是好的,但如果我想改變它? –

+0

你可以用'$ page_content'變量中存儲的內容來做任何你想做的事情。 – rnevius

+0

我的意思是改變WordPress的輸出 –

0

我做了這一點,我認爲這是獲取和改變輸出插件不衝突的最佳途徑。

function myplugin_output_start() 
{ 
    ob_start("myplugin_output_parse"); 
} 

add_action("registered_taxonomy", "myplugin_output_start", 0); 

function myplugin_output_parse($output) 
{ 
    if(ob_get_level() > 1) { 
     return $output; 
    } 

    // statements... 

    return $output; 
}