Intereting Posts
Консультация для начинающих Помощь в многостраничной странице архива категорий Мигрировал сайт WordPress в AWS, но странная проблема Проблема регистрации пользователей в сети мультисайтов Получить список пользователей на основе некоторых условий Как получить количество дочерних категорий, принадлежащих определенной родительской категории? Пользовательская таксономия WP_Query для всех условий в таксономии? На какой точке (крючок) загружается значение_______по__и_по_па_ ()? Есть ли вредоносный код внутри моего сайта WordPress? Как обновить настраиваемое поле таксономии с помощью wp_update_term ()? WP HTTP XML-ответ HTML-кодирование и проблемы с отображением изображения Добавление категории / тегов / таксономии Поддержка изображений / мультимедиа Как изменить пост автора? Значение echo menu_order в моей теме редактирование массового сообщения ex-style

Как создать WordPress Authors

Я пытаюсь создать раскрывающийся список авторов WordPress, со ссылками на их страницу автора.

Вот мой текущий код:

<?php wp_dropdown_users(array('who'=>'authors')); ?> 

У меня есть аналогичный раскрывающийся список для моих архивов, который ниже (и работает).

 <select name="archive-dropdown" id="archives-dropdown--1" onchange="document.location.href=this.options[this.selectedIndex].value;"> <option value=""><?php echo esc_attr( __( 'Select Month' ) ); ?></option> <?php wp_get_archives( array( 'type' => 'monthly', 'format' => 'option','show_post_count' => 1 ) ); ?> </select> 

Прямо сейчас, авторы просто показывают в раскрывающемся списке, но они не ссылаются на их страницы. Я пробовал адаптировать код архива к моему авторскому коду, но я ничего не получаю. Вот что я пытался, но это не работает:

 <select name="author-dropdown" id="author-dropdown--1" onchange="document.location.href=this.options[this.selectedIndex].value;"> <option value=""><?php echo esc_attr( __( 'Select Author' ) ); ?></option> <?php wp_dropdown_users(array('who'=>'authors')); ?> </select> 

Я все еще довольно молод с моей кодировкой WordPress. Любое понимание было бы здорово! Я надеюсь, что смогу помочь другим, если это будет решено для моей ситуации.

Благодаря!

Я могу ошибаться, так как не знаю, как WordPress контролирует выпадающее меню, но похоже, что он может только возвращать имя автора, а не ссылку на их страницу.

Я проверил приведенный ниже код в среде сайта WordPress и работал, включая ссылку на страницу авторов.

  <select name="author-dropdown" id="author-dropdown--1" onchange="document.location.href=this.options[this.selectedIndex].value;"> <option value=""><?php echo esc_attr( __( 'Select Author' ) ); ?></option> <?php // loop through the users $users = get_users('role=author'); foreach ($users as $user) { if(count_user_posts( $user->id ) >0) { // We need to add our url to the authors page echo '<option value="'.get_author_posts_url( $user->id ).'">'; // Display name of the auther you could use another like nice_name echo $user->display_name; echo '</option>'; } } ?> </select> 

за работой

Добавлено обновление для того, чтобы убедиться, что у авторов есть сообщение, а затем добавлено администратору, не уверен, как объединить две роли, не выполняя дуэль foreach

 <select name="author-dropdown" id="author-dropdown--1" onchange="document.location.href=this.options[this.selectedIndex].value;"> <option value=""><?php echo esc_attr( __( 'Select Author' ) ); ?></option> <?php // loop through the users $users = get_users('role=author'); foreach ($users as $user) { // get user who have posts only if(count_user_posts( $user->id ) >0) { // We need to add our url to the authors page echo '<option value="'.get_author_posts_url( $user->id ).'">'; // Display name of the auther you could use another like nice_name echo $user->display_name; echo '</option>'; } } $users = get_users('role=administrator'); foreach ($users as $user) { // get user who have posts only if(count_user_posts( $user->id ) >0) { // We need to add our url to the authors page echo '<option value="'.get_author_posts_url( $user->id ).'">'; // Display name of the auther you could use another like nice_name echo $user->display_name; echo '</option>'; } } ?> </select> 

Более «способ WordPress» заключается в том, чтобы отфильтровать вывод функции wp_dropdown_users() вместо того, чтобы в основном воссоздать функцию.

В своей теме или плагине вы хотите добавить фильтр непосредственно перед вызовом wp_dropdown_users() и сразу же удалить его, чтобы предотвратить нежелательные побочные эффекты.

 add_filter( 'wp_dropdown_users', 'wpse_260893_dropdown_users' ); wp_dropdown_users( [ 'who' => 'authors' ] ); remove_filter( 'wp_dropdown_users', 'wpse_260893_dropdown_users' ); 

Затем вы можете разместить это в своем плагине или в функции functions.php.

 //* Filter the output of wp_dropdown_users() function to replace user id with posts url function wpse_260893_dropdown_users( $content ) { //* Find all cases where the option value is anything - (.*) $number_of_matches = preg_match_all( '/<option value=\'(.*)\'/', $content, $matches ); //* If there's no matches, return early if( false === $number_of_matches || 0 === $number_of_matches ){ return $content; } //* Get the author posts url for each of the matches found with preg_match_all() $posts_urls = array_map( function( $user_id ){ return get_author_posts_url( $user_id ); }, $matches[1] ); //* Replace the author ids with their corresponding author posts url return str_replace( $matches[1], $posts_urls, $content ); } 

Не забудьте добавить фильтр, в который вы хотите изменить вывод функции wp_dropdown_users() и сразу же удалить его после того, как он вам больше не понадобится, чтобы он ничего не влиял.