Я пытаюсь понять, как подключиться к /wp-admin/users.php
странице управления, чтобы создать настраиваемые столбцы для отображения количества сообщений, которые пользователи имеют для настраиваемых типов сообщений на WPHonors.com.
Я создал для этого trac-тикет, но @nacin объяснил, почему вместо этого плагин должен делать больше работы.
Мне не удалось найти способ манипулировать выводом таблицы пользователей, поэтому я могу добавить настраиваемые столбцы для количества сообщений CPT для каждого пользователя. И это может иметь какое-то отношение к вопросу, который задал @nacin, на что будет ссылаться число сообщений. Текущее количество постов, которое есть у пользователя, ссылается на страницу управления постами, показывая все посты для этого пользователя ( /wp-admin/edit.php?author=%author_id%
).
Если бы я где-то связал это, это было бы:
/wp-admin/edit.php?post_type=%post_type%&author=%author_id%
Если бы это было вообще возможно, я думаю. Но мне даже не обязательно связывать это с чем-либо. В основном я хочу просто показать количество сообщений CPT для каждого человека, наличие 600
пользователей и общее количество 300+
сообщений для 4
настраиваемых типов сообщений. Только администраторы могут отправлять 'post'
сообщения, поэтому этот столбец на странице пользователя бесполезен.
Вот расширение учебного ответа Майка. Я добавил ссылки на перечисленные типы, чтобы вы могли щелкнуть по одной из них и перейти прямо к списку всех сообщений этого типа для этого автора, что потребовало дополнительной переменной для
$counts
и некоторого дополнительного вывода для$custom_column[]
Ну, это легко. Все, что вам нужно было сделать, это сказать, что он использует «manage_{$type}_columns» и «manage_{$type}_custom_column», где $type = users, и я мог бы понять остальное оттуда. У меня было ощущение, что да, но я проверил и не увидел пользователей. В остальном достаточно легко. Я ценю огромные усилия, которые вы приложили к этому, и я обязательно буду голосовать за вас на WPHonors (так как я уже это сделал) goo.gl/CrSi Большое спасибо 😀
@jaredwilli — Да, конечно. Но цель WordPress Answers — давать ответы не только тем, кто спрашивает первым. Вот почему я пишу подробно, даже если вам может понадобиться только немного информации, другим может быть совершенно новый подход. Пытаюсь помочь обоим. О, и спасибо за приятные комментарии на сайте (а может быть, я смогу изменить это фото? 🙂
Да, именно поэтому я не помешал тебе просто сказать мне крючок, который мне нужно было использовать. Я знаю, что я буду не единственным, кто найдет в этом необходимость, так что все хорошо.
О, извините, конечно, я буду. Меня отвлек пользовательский тип сообщения, который я делаю для сайта магазина, который я создаю. Я не думаю, что вы нашли способ связать количество сообщений со страницей edit.php, показывающей сообщения для их авторов? Вероятно, мне нужно встроить это в мой CPT.
@jaredwilli — Ах, да, но похоже @somatic сделал это за вас, верно?
Здорово!
get_posts_by_author_sql( $column, true, $user_id );
должен построить оператор where.@ sorich87 —
get_posts_by_author_sql()
а? Это новое для меня; Спасибо! Но я только что проверил ваш код и не думаю, что он делает то, что он ожидает. Вашget_posts_by_author_sql()
вызов всегда возвращает'1=0
‘, и он хотел получить список подсчетов по типам сообщений для пользователя; если я неправильно понимаю, что этот код этого не делает. Может быть, вы можете это исправить?Да, я неправильно понял вопрос. Мой код добавит только один столбец для одного пользовательского типа сообщений. Просто замените
post_type
на имя типа сообщения. Например:get_posts_by_author_sql( 'book', true, $user_id );
для типа сообщения под названием «книга». Проверено, и это работает.PS: Также проголосовал за вас на WPHonors. Вы определенно это заслужили!
Мне еще предстоит проверить это, но похоже, что это сработает, просто может не иметь всех функций, которые я ищу, но их все еще легко добавить. Спасибо 🙂
@sorich87 — Круто!
Предполагая, что я понял вопрос, вам нужно подключиться к двум крючкам, связанным с заголовками столбцов и значением столбцов для страниц управления администратором. Они есть
'manage_{$type}_columns'
и'manage_{$type}_custom_column'
где в вашем прецеденте{$type}
находитсяusers
.'manage_users_columns'
Крючок _Этот первый простой, он позволяет указать заголовки столбцов и, следовательно, доступные столбцы. WordPress жестко кодирует значение столбца «Сообщения», поэтому, поскольку вы хотите изменить его, мы просто удалим его,
unset()
а затем добавим новый столбец с тем же заголовком, но вместо этого имеет идентификатор'custom_posts'
:'manage_users_custom_column'
Крючок _Затем вам нужно использовать
'manage_users_custom_column'
хук, который вызывается только для нестандартных столбцов. Мы тестируем$column_name=='custom_posts'
, чтобы сделать наш код надежным на случай, если в будущем мы добавим новые пользовательские столбцы, а затем мы получаем счетчики типов пользовательских сообщений из написанной мной функции, о_yoursite_get_author_post_type_counts()
которой я расскажу далее. Затем я поэкспериментировал с несколькими способами форматирования, но решил, что<table>
наиболее подходящим является HTML (поскольку это таблица данных). Если таблица не работает для вас, я предполагаю, что вы сможете довольно легко создать другую разметку:Получение количества сообщений по типу сообщения для каждого пользователя/автора
Наконец, есть поиск количества сообщений по типу сообщения по автору/пользователю. Обычно я стараюсь придерживаться использования
WP_Query()
при выполнении запросов к сообщениям, но этот запрос потребовал бы использования стольких других хуков, что мне казалось проще быть «непослушным» и делать все в одном.Я пропустил любой пост
$post->post_type
is'revision'
или'nav_menu_item'
but оставил в'attachments'
. Возможно, вам будет лучше явно включить нужные вам типы сообщений, а не исключать те несколько, которые сделал я.Я также отфильтровал
$post->post_status
только для'publish'
и'pending'
. Если вы хотите также включить'future'
и'private'
/или'draft'
вам потребуется внести изменения в код.Для каждой загрузки страницы я вызываю эту
_yoursite_get_author_post_type_counts()
функцию только один раз, а затем сохраняю ее в статическую переменную, а не вызываю для каждого пользователя. Я храню в массиве, проиндексированном по идентификаторам автора/пользователя, содержащем массив с именем типа сообщения в элементе'label'
и, конечно же, количество в одноименном элементе:Результирующий пользовательский интерфейс
А вот как это выглядит применительно к моей тестовой установке WordPress 3.0.1:
(источник: mikeschinkel.com )
Скачать полный код
Вы можете скачать полный код с Gist :
Вы можете скопировать этот код в файл вашей темы
functions.php
или сохранить файл в плагине, в зависимости от того, что вы выберете.Надеюсь это поможет!
Ниже приведен вариант ответа sorich87, так как я не мог заставить его работать, и я хотел автоматически поддерживать несколько типов:
Я читал
get_posts_by_author_sql()
и как он должен построить оператор WHERE для вас, но результаты, которые я получил, всегда были «1 = 0». Так что я просто выписал остальную часть инструкции SQL, так какget_posts_by_author_sql()
вам не нужно писать два бита: тип сообщения и автора:Это работает так же хорошо и добавит столько столбцов, сколько вы хотите, но каждый из них использует горизонтальное пространство, тогда как учебник Майка добавит один столбец для пользовательских типов сообщений, а затем перечислит их в виде таблицы в этой строке. Та же информация, другая визуализация. Метод Майка, вероятно, лучше подходит для большого количества типов, так как он создает сжатый вертикальный список (и отображает элемент счета только в том случае, если он не пуст), в то время как метод sorich87 хорош для меньшего количества, так как в горизонтальной колонке доступно только ограниченное пространство.
Не забывайте, что вы можете добавить в запрос «post_status=publish», чтобы возвращать только опубликованные элементы, так как пример в настоящее время возвращает все сообщения…
Следующее добавит его: