允许Wordpress插件输入字段输出HTML

时间:2018-05-13 22:14:22

标签: php wordpress module escaping

我使用的是多功能主题,它有许多开箱即用的模块,如按钮,CTA等。问题是,对于一个实例,我想在按钮的文本字段中添加标签:< / p>

enter image description here

在我的网站上呈现: enter image description here

我一直想知道是否有办法修改模块的php以允许HTML而不是逃避它?我尝试过使用wp_kses以及我用Google搜索过的许多其他功能,但似乎没有任何帮助。这是来自button.php的代码,与我的观点相关:

    function render( $attrs, $content = null, $render_slug ) {
    $button_url        = $this->props['button_url'];
    $button_rel        = $this->props['button_rel'];
    $button_text       = $this->props['button_text'];
    $background_layout = $this->props['background_layout'];
    $url_new_window    = $this->props['url_new_window'];
    $custom_icon       = $this->props['button_icon'];
    $button_custom     = $this->props['custom_button'];
    $button_alignment  = $this->get_button_alignment();

    // Nothing to output if neither Button Text nor Button URL defined
    $button_url = trim( $button_url );

    if ( '' === $button_text && '' === $button_url ) {
        return '';
    }

    // Module classnames
    $this->add_classname( "et_pb_bg_layout_{$background_layout}" );

    // Render Button
    $button = $this->render_button( array(
        'button_id'        => $this->module_id( false ),
        'button_classname' => explode( ' ', $this->module_classname( $render_slug ) ),
        'button_custom'    => $button_custom,
        'button_rel'       => $button_rel,
        'button_text'      => $button_text,
        'button_url'       => $button_url,
        'custom_icon'      => $custom_icon,
        'has_wrapper'      => false,
        'url_new_window'   => $url_new_window,
    ) );

    // Render module output
    $output = sprintf(
        '<div class="et_pb_button_module_wrapper et_pb_module%2$s">
            %1$s
        </div>',
        $button,
        sprintf( ' et_pb_button_alignment_%1$s', esc_attr( $button_alignment ) )
    );

    return $output;
}

我猜这些是重要的行,如何修改它们以使其工作:

'button_text'      => $button_text,
$button_text       = $this->props['button_text'];

2 个答案:

答案 0 :(得分:1)

这就是将HTML标记转换为文本的原因:

// Render button
return sprintf( '%7$s<a%9$s class="%5$s" href="%1$s"%3$s%4$s%6$s>%2$s</a>%8$s',
    esc_url( $args['button_url'] ),
    esc_html( $args['button_text'] ),
    ( 'on' === $args['url_new_window'] ? ' target="_blank"' : '' ),
    et_esc_previously( $data_icon ),
    esc_attr( implode( ' ', array_unique( $button_classname ) ) ), // #5
    et_esc_previously( $this->get_rel_attributes( $args['button_rel'] ) ),
    $args['has_wrapper'] ? '<div class="et_pb_button_wrapper">' : '',
    $args['has_wrapper'] ? '</div>' : '',
    '' !== $args['button_id'] ? sprintf( ' id="%1$s"', esc_attr( $args['button_id'] ) ) : ''
);

esc_html( $args['button_text'] )是罪魁祸首。将其更改为$args['button_text'],您就可以了。

答案 1 :(得分:0)

什么是HTML元素?如果它是buttoninput (type=submit),则无法向其添加HTML,您必须使用a标记制作自定义按钮。