我有一个自定义分类下拉列表(custom_authors
) 登录时,将在注释表单中显示,以选择不同于登录作者的作者。
add_action( \'comment_form_logged_in_after\', \'taxonomy_dropdown\' );
add_action( \'comment_form_after_fields\', \'taxonomy_dropdown\' );
function taxonomy_dropdown() {
wp_dropdown_categories( array(
\'name\' => \'alt_comment_user\',
\'taxonomy\' => \'custom_authors\',
\'hide_empty\' => false
));
}
以下函数应保存所选值(
name
和
id
) 但我没能成功。
add_filter(\'preprocess_comment\', \'save_user_settings\' );
function save_user_settings($input) {
if(current_user_can(\'moderate_comments\') && isset($_POST[\'alt_comment_user\'])){
$user = get_user_by(\'id\', (int)$_POST[\'alt_comment_user\']);
$my_fields = array(
\'comment_author\' => $user->name,
\'user_ID\' => $user->ID,
);
// escape for db input
foreach($my_fields as &$field)
$field = $GLOBALS[\'wpdb\']->escape($field);
$input = $my_fields + $input;
}
return $input;
}
我得到的输出名为“匿名”,作为注释作者。
有人能帮助我如何从分类法下拉列表中获得正确的值吗?我想我必须改变尤其是这一行get_user_by(\'id\', (int)$_POST[\'alt_comment_user\']);
到get_term_by 但我不知道怎么…
最合适的回答,由SO网友:Daniel 整理而成
get_user_by()
接收用户数据,而不是分类术语。由于您没有处理真实的用户数据,因此必须使用get_term_by()
接收术语名称。您可以这样使用它:
$username = get_term_by( \'id\', (int) $_POST[\'alt_comment_user\'], \'custom_authors\' );
固定代码:
function taxonomy_dropdown() {
wp_dropdown_categories( array(
\'name\' => \'alt_comment_user\',
\'taxonomy\' => \'custom_authors\',
\'hide_empty\' => false
));
}
add_action( \'comment_form_logged_in_after\', \'taxonomy_dropdown\' );
add_action( \'comment_form_after_fields\', \'taxonomy_dropdown\' );
function save_user_settings( $input ) {
global $wpdb;
if( current_user_can( \'moderate_comments\' ) && isset( $_POST[\'alt_comment_user\'] ) ) {
$username = get_term_by( \'id\', (int) $_POST[\'alt_comment_user\'], \'custom_authors\' );
$my_fields = array(
\'comment_author\' => $wpdb->escape( $username->name ),
\'user_ID\' => 0,
);
$input = $my_fields + $input;
}
return $input;
}
add_filter( \'preprocess_comment\', \'save_user_settings\' );