如何阻止带有撇号的自定义字段破坏我的代码

时间:2016-11-03 作者:pressword

我的php文件中有这段代码,它创建了一个从名为speaker\\u file\\u label的字段标记的按钮,并根据speker\\u file\\u url中输入的url链接到pdf文件。字段由ACF创建

    echo do_shortcode(  "[av_button label=\'".get_sub_field(\'speaker_file_label\')."\' link=\'manually,".get_sub_field (\'speaker_file_url\')."\' link_target=\'_blank\' size=\'medium\' position=\'left\' color=\'theme-color\']" ).\'<br>\';
当有人只是输入文本时,这种方法非常有效。然而,如果他们说“joe’s files”(没有引号)之类的话,那么短代码就会断开,标签就会变成“click”

如何使wordpress不将撇号解释为代码的一部分?

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

您可以应用内容筛选器:

    echo do_shortcode(  "[av_button label=\'".apply_filters(\'the_content\',(get_sub_field(\'speaker_file_label\'))."\' link=\'manually,".get_sub_field (\'speaker_file_url\')."\' link_target=\'_blank\' size=\'medium\' position=\'left\' color=\'theme-color\']" ).\'<br>\';
以上添加的pp标记<p></p>

尝试以下操作:

    echo do_shortcode(  "[av_button label=\'".wptexturize( get_sub_field(\'speaker_file_label\'))."\' link=\'manually,".get_sub_field (\'speaker_file_url\')."\' link_target=\'_blank\' size=\'medium\' position=\'left\' color=\'theme-color\']" ).\'<br>\';

SO网友:Nabil Kadimi

包装用户输入esc_html().

使用您的示例:

    echo do_shortcode( "[av_button 
        label=\'" . esc_html( get_sub_field( \'speaker_file_label\' ) ) . "\' 
        link=\'manually," . esc_html( get_sub_field ( \'speaker_file_url\' ) )."\' 
        link_target=\'_blank\'
        size=\'medium\' position=\'left\' color=\'theme-color\']" ).\'<br>\';
您可以使其更具可读性:

$shortcode = sprintf( "[av_button label=\'%1$s\' link=\'manually,%2$s\' link_target=\'_blank\' size=\'medium\' position=\'left\' color=\'theme-color\']"
    , esc_html( get_sub_field( \'speaker_file_label\' ) )
    , esc_html( get_sub_field( \'speaker_file_url\' ) )
);

echo do_shortcode( $shortcode ) . \'<br>\';

SO网友:socki03

有两种方法可以解决这个问题,即从一开始就反转引号(将所有双引号(“)替换为单引号(\'),反之亦然。

echo do_shortcode(  \'[av_button label="\' . get_sub_field(\'speaker_file_label\') . \'" link="manually,\' . get_sub_field (\'speaker_file_url\') . \'" link_target="_blank" size="medium" position="left" color="theme-color"]\' ).\'<br>\';
但如果人们使用双引号(“”),那么这不会停止,因此您可以通过使用addslashes

echo do_shortcode(  \'[av_button label="\' . addslashes( get_sub_field(\'speaker_file_label\') ) . \'" link="manually,\' . addslashes( get_sub_field (\'speaker_file_url\') ) . \'" link_target="_blank" size="medium" position="left" color="theme-color"]\' ) . \'<br>\';
这应该可以解决大多数问题,如果您不希望人们使用双引号,那么第一个问题可能会解决所有问题。我也没有测试过,所以让我知道他们是否为你工作。

SO网友:Mr SKT

你可以写;&#39;"E;而不是\' (单引号)在文本字段中。

相关推荐

如何让`wp-list-table`显示我在Custom-Post中的`Custom-Fields`

一切都好吗<我需要wp-list-table 也要显示custom-fields 在每个custom-post 我有,但我不知道如何做到这一点,在这幅图中,它显示了带有字段的表格:Title, Author and Publication Date: 我想要的是能够选择custom-fields 将出现,例如以下示例Title, Carta, Naipe, Author, and Date of Publication: