簡體   English   中英

Ckeditor / PHP中的wordpress樣式簡碼

[英]wordpress style shortcodes in Ckeditor / PHP

我建立了一個自定義CMS。 最近,我添加了動態創建頁面的功能。 我將CKEditor用於這些頁面的內容。 我還想運行一些php函數,這些函數可能包含在mysql中存儲的頁面內容中。 我不想將實際的PHP代碼存儲在數據庫中,而可能是函數名稱。 例如,在我存儲在數據庫中的頁面中。

<?php //begin output
hello world!
check out this latest news article.
news($type, $id);
//end output 
?>

如果在輸出中找到了不使用EVAL的現有功能,最好的查找和執行方法是什么? 我一直在考慮wordpress樣式的短代碼。 也許[[news(latest,71]]?然后有一個函數來查找和執行這些函數(如果它們存在於我的functions.php文件中)。我不確定如何做到這一點的最佳方法。答案,但更多的是針對此類情況的最佳實踐,尤其是最安全的方法。

我通過挖掘並找到此線程找到了解決方案如何在PHP中創建Wordpress shortcode樣式的函數

我可以在CKEditor中傳遞這樣的短代碼

[[utube 1 video_id]]

然后,在呈現代碼的頁面中:

print shortcodify($page_content);

使用此功能:

function shortcodify($string){
    return preg_replace_callback('#\[\[(.*?)\]\]#', function ($matches) {
    $whitespace_explode = explode(" ", $matches[1]);
    $fnName = array_shift($whitespace_explode);
    return function_exists($fnName) ? call_user_func_array($fnName,$whitespace_explode) : $matches[0];
    }, $string);
    }

如果函數名稱存在(utube),它將觸發該函數。 我目前唯一的問題與我在編輯器中放置[[shortcode]]的位置無關,它總是首先執行。 例如,在CKEditor中,我輸入:

Hello world! Check out my latest video
[[utube 1 video_id]]

它將始終將文本置於視頻下方,而不是其在文檔中的位置。 我需要想辦法讓短代碼按其放置順序執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM