【问题标题】:How to add line breaks in a widget description in Wordpress?如何在 Wordpress 的小部件描述中添加换行符?
【发布时间】:2012-12-03 12:54:16
【问题描述】:

我想在 Wordpress 的小部件描述中添加换行符,以在管理面板中显示使用说明,如下所示:

To format the text use the tags:
<h3>Subtitle</h3>
<strong>Bold</strong>
[:pt]Text in Portuguese
[:en]Text in English
[:es]Text in Spanish

目前的想法是使用 ISO 8859-1 符号 (&amp;nbsp;) 添加空格,这不是最佳解决方案(描述为葡萄牙语):

register_sidebar( array(
    'name' => 'Widget',
    'id' => 'widget-user',
    'description' => "Para formatar o texto, utilize as tags: <h3>Subtítulo laranja</h3> &nbsp; <strong>Negrito</strong> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#91;:pt]Texto em português nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#91;:en]Texto em inglês &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#91;:es]Texto em espanhol &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (o que estiver escrito fora das tags de idioma irão aparecer para todos",
    'before_widget' => '<div class="widget-user"><div class="box">',
    'after_widget' => '</div></div>',
    'before_title' => '<h3 class="widget-title">',
    'after_title' => '</h3>',
));

不同于'before_widget'、'after_widget'、'before_title'和'after_title','description'不接受HTML。如果是这样,只需使用htmlspecialchars()之类的php函数将我不想转换为HTML的HTML转义就很容易解决。

我已经拼命尝试了这些但没有成功:

"description" => "This is a line <br> break test"    
"description" => "This is a line \n break test"    
"description" => "This is a line \r break test"
"description" => "This is a line \r\n break test"
"description" => htmlspecialchars("This is a line <br>break test")
htmlspecialchars("description") => "This is a line <br>break test"
"description" => htmlentities("This is a line <br>break test")
"description" => html_entity_decode("This is a line <br>break test")
"description" => nl2br("This is a line <br> break test")
nl2br("description") => nl2br("This is a line <br> break test")

那么,有什么想法吗?

【问题讨论】:

    标签: wordpress widget line-breaks


    【解决方案1】:

    从您的问题看来,您可能对小部件和侧边栏有些困惑——或者从您使用这两个术语的方式听起来可能就是这样。因此,如果我向您重申显而易见的事实,我深表歉意。

    侧边栏是您网站上可以显示小部件的动态部分。 小部件 是显示在一个或多个侧边栏中的单个项目。您引用的函数 register_sidebar() 用于创建侧边栏区域 - 设置 --> 外观菜单中的这些块之一,您可以将小部件拖到该区域。描述字段仅用于指示基本信息。关于该特定侧边栏的使用位置。例如,如果您注册了一个计划在标题中使用的侧边栏,则描述可能类似于“出现在导航菜单上方的标题中”。

    小部件也有提供信息的描述。关于如何填写他们的各种选项。这听起来像你正在尝试做的事情。所以问题是你想使用什么小部件?您可以在小部件代码中设置您正在谈论的描述。

    就侧边栏描述而言,Wordpress 使用函数 wp_sidebar_description($id) 来输出每个侧边栏的描述。该函数通过另一个 Wordpress 函数 esc_html() 运行描述文本,该函数通过几个检查运行它并删除任何可能存在问题的内容。

    您有机会更改默认输出。它所做的最后一件事是对文本应用过滤器 esc_html。因此,如果您想让&lt;br&gt; 实际用作换行符,您只需在主题的functions.php 文件中添加一个过滤器即可恢复该功能,如下所示:

    add_filter('esc_html', 'newLines');
    function newLines($desc){
    return htmlspecialchars_decode($desc);
    }
    

    这将基本上撤消 Wordpress 正在执行的操作,并按照您的预期输出任何 HTML 代码(粗体、斜体等)。

    应该在原始响应中指出,上述过滤器会影响 esc_html() 函数在您网站上使用的所有地方——您可能不希望这样!

    不幸的是,没有任何钩子或过滤器可以让您定位特定的侧边栏,但您可以使用以下方法将上面的过滤器限制为仅在管理页面上发生:

    function newLines($desc){
    global $pagenow;
    global $wp_registered_sidebars;
    if($pagenow == 'widgets.php'){
    return htmlspecialchars_decode($desc);
    }
    }
    add_filter('esc_html', 'newLines');
    

    【讨论】:

    • 伙计,你是个天才,你对 Wordpress 了解很多。我曾想象它有类似 esc_html 的东西,但我缺乏了解这一点的知识。我只需要将htmlspecialchars_decode 更改为nl2br 就可以只换行而不是错过显示所有html。您对侧边栏和小部件的解释也很棒,尽管您怀疑我混淆了错误的术语:)
    • 嗯,出现了新问题。我在管理面板中的所有页面现在都标记为(无标题)。
    【解决方案2】:

    在 wp-includes/widgets.php 中打开这个文件

    找到名为:wp_widget_description()的函数;在第 664 行

    用这个替换它

    函数 wp_widget_description($id) { if ( !is_scalar($id) ) 返回;

    global $wp_registered_widgets;
    
    if ( isset($wp_registered_widgets[$id]['description']) )
        return ( $wp_registered_widgets[$id]['description'] );
    

    }

    【讨论】:

      【解决方案3】:

      我找到了一种使用简码的方法。首先,我们需要在functions.php文件中添加一个函数

      function line_break_shortcode() {
          return '<br />';
      }
      
      add_shortcode( 'br', 'line_break_shortcode' );
      

      然后我们可以在任何需要休息的地方使用 [br]

      例如:

       Anti-counterfeiting [br] & [br] Online
      

      【讨论】:

        【解决方案4】:

        我不知道答案。但是,一种可能的解决方案是将其添加到小部件 form() 中,就在字段的上方或下方。如果您还需要容纳更多文本,可以使表单更宽(小部件构造函数中的第四个参数是一个接受“宽度”的数组)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-31
          • 2011-04-24
          • 2020-02-06
          • 2017-01-22
          • 1970-01-01
          相关资源
          最近更新 更多