• Решено alexpike

    (@alexpike)


    День добрый. Может кто поможет.
    Пытаюсь создать выпадающий список авторов с помощью wp_dropdown_users.
    В принципе получается. Вот так вызываю в индексе:
    <form action=»<?php bloginfo(‘url’); ?>/authors/» method=»get»>
    <?php
    $select = wp_dropdown_users(‘show_option_none=Select authors&order=ASC’);
    $select = preg_replace(«#<select([^>]*)>#», «<select$1 onchange=’return this.form.submit()’>», $select);
    echo $select;
    ?><noscript><input type=»submit» value=»View» /></noscript></form>.

    Есть одна проблема и один вопрос.
    Проблема состоит в том, что переход осуществляется на страницу автора по id, т.е. в адресной страке появляется /?user=44, а необходимо чтобы /authorname. как это осущетсвтить? Если имя я сделал как выводить, то как избавиться от ‘?user=’ так и не понял. Помогите пожалуйста. Вот сама функция:

    function wp_dropdown_users( $args = » ) {
    global $wpdb;
    $defaults = array(
    ‘show_option_all’ => », ‘show_option_none’ => »,
    ‘orderby’ => ‘display_name’, ‘order’ => ‘ASC’,
    ‘include’ => », ‘user_level’ => 3, ‘exclude’ => », ‘multi’ => 0,
    ‘show’ => ‘display_name’, ‘echo’ => 1,
    ‘selected’ => 0, ‘name’ => ‘user’, ‘class’ => »
    );

    $defaults[‘selected’] = is_author() ? get_query_var( ‘author’ ) : 0;

    $r = wp_parse_args( $args, $defaults );
    extract( $r, EXTR_SKIP );

    $query = «SELECT * FROM $wpdb->users»;

    $query_where = array();

    if ( is_array($include) )
    $include = join(‘,’, $include);
    $include = preg_replace(‘/[^0-9,]/’, », $include); // (int)
    if ( $include )
    $query_where[] = «ID IN ($include)»;

    if ( is_array($exclude) )
    $exclude = join(‘,’, $exclude);
    $exclude = preg_replace(‘/[^0-9,]/’, », $exclude); // (int)
    if ( $exclude )
    $query_where[] = «ID NOT IN ($exclude)»;

    if ( $query_where )
    $query .= » WHERE » . join(‘ AND’, $query_where);

    $query .= » ORDER BY $orderby $order»;

    $users = $wpdb->get_results( $query );

    $output = »;
    if ( !empty($users) ) {
    $id = $multi ? «» : «id=’$name'»;

    $output = «<select name=’$name’ $id class=’$class’>\n»;

    if ( $show_option_all )
    $output .= «\t<option value=’0′>$show_option_all</option>\n»;

    if ( $show_option_none )
    $output .= «\t<option value=’-1′>$show_option_none</option>\n»;

    foreach ( (array) $users as $user ) {
    $user->ID = (int) $user->ID;
    $_selected = $user->ID == $selected ? » selected=’selected'» : »;
    $display = !empty($user->$show) ? $user->$show : ‘(‘. $user->user_login . ‘)’;
    $output .= «\t<option value=’$user->ID’$_selected>» . esc_html($display) . «</option>\n»;
    }

    $output .= «</select>»;
    }

    $output = apply_filters(‘wp_dropdown_users’, $output);

    if ( $echo )
    echo $output;

    return $output;
    }

    Заранее спасибо.

    ps возможно ли в выпадающий список включать только авторов с определенным user_level? Cкажем тут: $select = wp_dropdown_users(‘show_option_none=Select authors&order=ASC&user_level=3’);

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Попробуйте так:

    <?php
    $users = get_users_of_blog();
    if ( !empty($users) ) {
    	$output = "<select onchange='location.href=\"/author/\"+this.options[this.selectedIndex].value'>\n";
    	$output .= "\t<option value='-1'>Select authors</option>\n";
    	foreach ( $users as $user ) {
    		setup_userdata($user->user_id);
    		if ( $user_level == 3 ) {
    			$output .= "\t<option value='$user->user_login'>" . wp_specialchars($user->display_name) . "</option>\n";
    		}
    	}
    	$output .= "</select>";
    	echo $output;
    }
    ?>

    Cпасибо!!!! вроде все хорошо!!! Величайше вам признателен!

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Тема «Dropdown Users» закрыта для новых ответов.