我使用的插件只向特定的用户角色显示内容。此内容由一个快捷码标记包围,使其对其他用户角色不可见。现在,我想调用该受限内容中的其他短代码。
我知道我需要设置插件的短代码,以便它们使用do_shortcode()
, 但文件太多了,我不知道该在哪里做。我试过的所有地方都没有改变。有什么建议吗?
这是我找到的代码块。我想这就是我需要编辑的内容。你觉得怎么样?更改此项:
return stripslashes($message);
更改为:
return stripslashes(do_shortcode($message));
// Show the level based protected shortcode message
function do_levelprotected_shortcode($atts, $content = null, $code = "") {
global $M_options;
// Set up the level shortcodes here
$shortcodes = apply_filters(\'membership_level_shortcodes\', array() );
$notshortcodes = apply_filters(\'membership_not_level_shortcodes\', array() );
$code = strtolower( $code );
if( substr( $code, 0, 4 ) !== "not-" ) {
if(!empty($shortcodes)) {
// search positive shortcodes first
$id = array_search( $code, $shortcodes );
if($id !== false) {
// we have found a level so we need to check if it has a custom protected message, otherwise we\'ll just output the default main on
$level = new M_Level( $id );
$message = $level->get_meta( \'level_protectedcontent\' );
if(!empty($message)) {
return stripslashes($message);
}
}
}
} else {
if(!empty($notshortcodes)) {
// search positive shortcodes first
$id = array_search( $code, $notshortcodes );
if($id !== false) {
// we have found a level so we need to check if it has a custom protected message, otherwise we\'ll just output the default main on
$level = new M_Level( $id );
$message = $level->get_meta( \'level_protectedcontent\' );
if(!empty($message)) {
return stripslashes($message);
}
}
}
}
编者注:我删除了所有指向(封闭源代码)插件的链接,因为它们与实际问题的相关性与插件源代码的可访问性一样:零
SO网友:mrwweb
tl;博士
查找短代码的注册位置查找快捷码输出函数为过滤器祈祷作为bug报告
Remember: All of the functions below are made up. The point of the first two steps is finding the right values to plug into the snippets.
查找短代码的注册位置
使用记事本++或Sublime Text 2(我个人最喜欢的)之类的程序,可以一次搜索多个文件。然后搜索以下内容的一些变体,其中“member”是您正在使用的短代码:
add_shortcode( \'member\'
add_shortcode(\'member\'
add_shortcode( "member"
add_shortcode("member"
查找短码输出函数,其中一个可能会引导您找到如下代码行:
add_shortcode( \'member\', \'member_shortcode\' );
那么你需要找到
"member_shortcode"
作用看看附近的街道
add_shortcode
函数以查看是否看到它。如果没有,请搜索:
function member_shorcode(
祈祷有一个过滤器,然后这就是真理的时刻。您一直在祈祷短代码为短代码输出提供一个过滤器。这样你就可以做这样的事情:
function recursive_member_shortcode( $content ) {
return do_shortcode( $content );
}
add_filter( \'member_shortcode_filter\', \'recursive_member_shortcode\', 9999 );
如果没有过滤器,你唯一的选择就是破解插件文件本身,这是个坏消息。
作为一个bug进行报告,老实说,已经说过以上所有内容,对我来说这似乎是一个bug,我会将其报告给WPMU。但考虑到我在他们的支持和代码质量方面的经验,我不会抱太大希望。