如何让Widget标题接受php?

时间:2013-03-11 作者:user1721135

我试图让widget接受php,但不使用插件。

到目前为止,我已经为widget\\u文本启用了php,但无法将其用于widget\\u标题。

我在函数中使用以下代码。php:

add_filter(\'widget_text\',\'execute_php\',100);
function execute_php($html){
     if(strpos($html,"<"."?php")!==false){
          ob_start();
          eval("?".">".$html);
          $html=ob_get_contents();
          ob_end_clean();
     }
     return $html;
}
我需要做什么才能在标题中启用php?

2 个回复
最合适的回答,由SO网友:brasofilo 整理而成

您可以使用过滤器widget_title 和一个“虚拟”短代码。当然,作为One Trick Pony 指出,“为什么”(和“什么”)对于找到合适的解决方案至关重要。。。

假设小部件标题为Title [php] More Title:

add_filter( \'widget_title\', \'pseudo_php_wpse_90360\', 10, 3 );

function pseudo_php_wpse_90360( $title, $instance, $id_base )
{
    if( FALSE === strpos( $title, \'[php]\' ) )
        return $title;

    $break_it = explode( \'[php]\', $title );

    $title = $break_it[0] . \'hello world\' . $break_it[1];

    return $title;
}
输出为Title hello world More Title.

SO网友:onetrickpony

add_filter(\'widget_title\', function($title_option, $all_options, $widget_id){

  // modify $title_option as you wish

  return $title_option;

}, 10, 3);
请注意,许多第三方插件没有在其小部件上应用此过滤器,因此这可能并不总是可行的。

创建一个新插件并将此代码放入其中,无需任何eval 在这里与您的代码相同widget_text.

如果您坚持允许从小部件设置中输入PHP代码,至少将其保存在内部。php文件,而不是数据库(如果有人未经授权访问您的数据库怎么办?)。那么你可以require / include 他们

结束