允许在自定义元框中使用IFRAME

时间:2014-09-20 作者:nimsrules

我已经创建了一个名为“Location Map”的自定义元框,并希望为客户端提供一个功能,只需复制粘贴位置的google Map的iframe嵌入代码,即可将其直接显示在前端。该值无法存储。下面是保存元框的代码。

/* Save the meta box\'s post metadata. */
function kk_save_location_map( $post_id, $post ) {

    /* Verify the nonce before proceeding. */
    if ( !isset( $_POST[\'location_map_nonce\'] ) || !wp_verify_nonce( $_POST[\'location_map_nonce\'], basename( __FILE__ ) ) )
        return $post_id;

    /* Get the post type object. */
    $post_type = get_post_type_object( $post->post_type );

    /* Check if the current user has permission to edit the post. */
    if ( !current_user_can( $post_type->cap->edit_post, $post_id ) )
        return $post_id;

    /* Get the posted data and sanitize it for use as an HTML class. */
    $new_meta_value = ( isset( $_POST[\'location-map\'] ) ? ( $_POST[\'location-map\'] ) : \'\' );

    /* Get the meta key. */
    $meta_key = \'location-map\';

    /* Get the meta value of the custom field key. */
    $meta_value = esc_textarea(get_post_meta( $post_id, $meta_key, true ));

    /* If a new meta value was added and there was no previous value, add it. */
    if ( $new_meta_value && \'\' == $meta_value )
        add_post_meta( $post_id, $meta_key, $new_meta_value, true );

    /* If the new meta value does not match the old value, update it. */
    elseif ( $new_meta_value && $new_meta_value != $meta_value )
        update_post_meta( $post_id, $meta_key, $new_meta_value );

    /* If there is no new meta value but an old value exists, delete it. */
    elseif ( \'\' == $new_meta_value && $meta_value )
        delete_post_meta( $post_id, $meta_key, $meta_value );
}
我试过了esc_html, esc_attr, esc_textarea, wp_kses 如果没有成功的话。

3 个回复
最合适的回答,由SO网友:Tomás Cot 整理而成

我尝试了你的代码,它可以工作:

我改变了wp_verify_nonce 功能,因为这对我不起作用。我添加了一个操作,而不是它所具有的操作。现在,要使其工作,您必须创建一个nonce字段,其中包含这样的代码,当然,如果需要,您可以更改名称。

//this goes in the function that generates the metabox    
wp_nonce_field( \'location_map_nonce_action\', \'location_map_nonce\' );
这是保存值的函数的最终代码。

function kk_save_location_map( $post_id, $post ) {



    /* Verify the nonce before proceeding. */
    if ( !isset( $_POST[\'location_map_nonce\'] ) || !wp_verify_nonce( $_POST[\'location_map_nonce\'], \'location_map_nonce_action\' ) ){
            return $post_id;
     }

    /* Get the post type object. */
    $post_type = get_post_type_object( $post->post_type );

    /* Check if the current user has permission to edit the post. */
    if ( !current_user_can( $post_type->cap->edit_post, $post_id ) ){

        return $post_id;
    }

    /* Get the posted data and sanitize it for use as an HTML class. */
    $new_meta_value = ( isset( $_POST[\'location-map\'] ) ? ( $_POST[\'location-map\'] ) : \'\' );

    /* Get the meta key. */
    $meta_key = \'location-map\';

    /* Get the meta value of the custom field key. */
    $meta_value = esc_textarea(get_post_meta( $post_id, $meta_key, true ));

    /* If a new meta value was added and there was no previous value, add it. */
    if ( $new_meta_value && \'\' == $meta_value ){

        add_post_meta( $post_id, $meta_key, $new_meta_value, true );
    }
    /* If the new meta value does not match the old value, update it. */
    elseif ( $new_meta_value && $new_meta_value != $meta_value ){

        update_post_meta( $post_id, $meta_key, $new_meta_value );
    }
    /* If there is no new meta value but an old value exists, delete it. */
    elseif ( \'\' == $new_meta_value && $meta_value ){

        delete_post_meta( $post_id, $meta_key, $meta_value );
    }   

}

add_action( \'save_post\', \'kk_save_location_map\', 10, 2 );

SO网友:Garrison Terrusa

如果问题是iframe标记,您可以制作一个过滤器,让它们去掉iframe标记。

<?php 

function my_custom_filter ( $filter_output ) {
    $meta_value = get_post_meta( get_the_ID(), \'location-map\', true);
    $filter_output = str_replace( \'{{ location-map }}\', \'<iframe \' . $meta_value[\'location-map\'] . \'></iframe>\', $filter_output );

    return $filter_output;
}

SO网友:nimsrules

所以,在搞乱了我的整个functions.php, 我找到了真正的问题所在。显示元框的功能不正确

BEFORE

function kk_custom_meta_box2( $object, $box ) { ?>

<?php wp_nonce_field( \'location_map_nonce_action\', \'location_map_nonce\' ); ?>

<p>
    <label for="location-map"><?php _e( "Enter the location\'s map using Google map\'s embed function<br>", \'ac\' ); ?></label>
    <textarea class="widefat" type="text" name="location-map" id="location-map">
        <?php echo esc_html(get_post_meta( $object->ID, \'location-map\', true )); ?>
    </textarea>
</p>
<?php }

AFTER

function kk_custom_meta_box2( $object, $box ) { ?>

<?php wp_nonce_field( \'location_map_nonce_action\', \'location_map_nonce\' ); ?>

<p>
    <label for="location-map"><?php _e( "Enter the location\'s map using Google map\'s embed function<br>", \'ac\' ); ?></label>
    <textarea class="widefat" type="text" name="location-map" id="location-map">
        <?php echo get_post_meta( $object->ID, \'location-map\', true ); ?>
    </textarea>
</p>
<?php }
我只需要移除esc_html 以使更新函数不会弄乱它。

结束

相关推荐

动态复制自定义帖子类型中的自定义Metabox

我正在Wordpress中构建一个自定义帖子类型,用于在客户博客上编写和显示BuzzFeed风格的测验。在自定义帖子类型中,有一个自定义元框,表示每个问题和选择,另一个表示潜在的最终结果。因此,第一个元框由一个数字输入类型(用于分配ID)、一个文本字段(用于输入问题)和另一个字段(用于输入图像)组成。对作者来说,这是他们测验中的第一个问题。如果他们要输入多个问题,则需要选择按钮以添加另一组字段。我不确定如何生成该字段并确保保存任何添加的字段。我不想求助于插件或插件库,因为学习如何做和解决它一样重要。