通过以下两个功能,我可以将名为“publications”的textarea自定义用户元字段添加到用户配置文件并保存/更新它:
add_action( \'show_user_profile\', \'extra_user_profile_fields\' );
add_action( \'edit_user_profile\', \'extra_user_profile_fields\' );
function extra_user_profile_fields( $user ) { ?>
<textarea rows="10" cols="450" name="publications" id="publications" class="regular-text" />
<?php echo esc_attr( get_the_author_meta( \'publications\', $user->ID ) ); ?></textarea>
<?php }
add_action( \'personal_options_update\', \'save_extra_user_profile_fields\' );
add_action( \'edit_user_profile_update\', \'save_extra_user_profile_fields\' );
function save_extra_user_profile_fields( $user_id ) {
if ( !current_user_can( \'edit_user\', $user_id ) ) { return false; }
update_user_meta( $user_id, \'publications\', $_POST[\'publications\'] );
}
使用下一个函数,我可以在用户页面上显示上面创建的字段中的元数据,并带有一个短代码
[USER_META user_id=2 meta="publications"]
:
add_shortcode(\'USER_META\', \'user_meta_shortcode_handler\');
function user_meta_shortcode_handler($atts,$content=null){
return esc_html(get_user_meta($atts[\'user_id\'], $atts[\'meta\'], true));
}
问题是,在文本区域中,我可以用简单的段落格式化文本,但当它显示在前端时,段落就会消失,我只看到简单的文本流。如何解决这个问题?
我有Wordpress 3.5,2012主题。
最合适的回答,由SO网友:Iurie 整理而成
最后,我采用了第二种解决方案:
/* Display the selected user meta data with a shortcode */
add_shortcode(\'user_meta\', \'user_meta_shortcode_handler\');
/* usage: [user_meta user_id=1] */
function user_meta_shortcode_handler($atts,$content=null){ ?>
<?php
echo \'<h3>Publications</h3>\';
echo wpautop(get_user_meta($atts[\'user_id\'], \'publications\', true));
?>
<?php
}
为了取得好的效果,段落之间应该用空行隔开。
EDIT: 我将代码更新为以下内容(第二种解决方案):
add_shortcode(\'user_meta\', \'user_meta_shortcode_handler\');
/* usage: [user_meta user_id=1] */
function user_meta_shortcode_handler($atts,$content=null){ ?>
<?php
$text = "";
//Explode the textareas rows to paragraphs
function explode_paragraphs($text) {
$text = explode("\\n", $text);
foreach($text as $str) { echo \'<p>\'.$str.\'</p>\'; }
}
$text = esc_html(get_user_meta($atts[\'user_id\'], \'publications\', true));
if(!empty($text)) { echo \'<h3>Publications</h3>\'; explode_paragraphs($text); }
?>
<?php
}
现在,为了获得好的结果,段落之间不应该用空行分隔。
SO网友:Muhammad Furqan
看看这两个函数esc_attr() 和esc_html()
替换此项:
add_shortcode(\'USER_META\', \'user_meta_shortcode_handler\');
function user_meta_shortcode_handler($atts,$content=null){
return esc_html(get_user_meta($atts[\'user_id\'], $atts[\'meta\'], true));
}
使用此选项:
add_shortcode(\'USER_META\', \'user_meta_shortcode_handler\');
function user_meta_shortcode_handler($atts,$content=null){
return esc_attr(get_user_meta($atts[\'user_id\'], $atts[\'meta\'], true));
}