获取自定义分类下拉列表的值

时间:2012-11-05 作者:user1706680

我有一个自定义分类下拉列表(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
     ));   
}
以下函数应保存所选值(nameid) 但我没能成功。

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 但我不知道怎么…

1 个回复
最合适的回答,由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\' );

结束

相关推荐