基于Shortcode属性剥离自定义字段标签的Shortcode

时间:2019-12-10 11:59:27

标签: php wordpress shortcode wordpress-shortcode

问题背景

我创建了一组自定义字段,例如person-given-nameperson-last-nameperson-job-title。这些自定义字段包含html。我想在网页上的特定位置以纯文本形式显示其内容。自定义字段由名为Toolset Types的插件创建,并且该插件具有内置功能来显示自定义字段的内容:types_render_field( "custom-field-slug", array());

为了有效地做到这一点,我想创建一个带有属性的简码,借此,当我在属性中添加字段名称时,strip_tags将应用于该自定义字段,而return自定义字段的纯文本内容。

初始功能

以下功能仅适用于一个字段。

function add_person_data() {
    if( function_exists( 'types_render_field' ) ){
        $input = types_render_field( "person-job-title", array());
        $a = strip_tags($input);
    return $a;      
    }
}
    add_shortcode( 'add-person-data', 'add_person_data');

更新的功能

我试图将函数扩展为具有shortcode属性,在这里我可以指定要在其上应用strip_tags并显示的自定义字段。

该函数未在php-error.log中给出错误,但没有return任何值。这是我使用的[add-person-data field="givenname"]的简码。

function add_person_data($atts) {
    $atts = shortcode_atts(
        array(
            'field' => '',
        ),
        $atts
    );

    if( function_exists( 'types_render_field' ) ){

        $person_info = array_filter( array (
                    'givenname'       => types_render_field( "person-given-name", array () ),
                    'familyname'      => types_render_field( "person-family-name", array () ),
                    'jobtitle'      => types_render_field( "person-honorific-suffix", array () ),
                    ) );
        foreach ( $person_info as $prop => $value ) {
                    $a = strip_tags($person_info['field']);                 
                    }                   
        return $a;
    }
}
    add_shortcode( 'add-person-data', 'add_person_data');

有人可以指出我所犯的错误,以便我修复代码吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

请尝试使用以下代码:

function add_person_data($atts) {
    $atts = shortcode_atts(
        array(
            'field' => 'givenname', 
        ),
        $atts
    );

    $a = '';

    if( function_exists( 'types_render_field' ) ){

        $person_info = array_filter( array (
            'givenname'       => types_render_field( "person-given-name", array () ),
            'familyname'      => types_render_field( "person-family-name", array () ),
            'jobtitle'      => types_render_field( "person-honorific-suffix", array () ),
        ) );
        $a = $person_info[$atts['field']];
        $b = strip_tags($a);
        return $b;
    }
}
add_shortcode( 'add-person-data', 'add_person_data');