यह मानते हुए कि मैं प्रश्न को समझ गया हूं, आपको जो करने की आवश्यकता है वह कॉलम हेडर से संबंधित दो हुक में है और एडमिन पेज के लिए कॉलम वैल्यू है। वे हैं 'manage_{$type}_columns'
और 'manage_{$type}_custom_column'
आपके उपयोग-मामले में कहां {$type}
है users
।
'manage_users_columns'
अंकुड़ा
यह पहला सरल है, यह आपको कॉलम हेडर और इसलिए उपलब्ध कॉलम निर्दिष्ट करता है। वर्डप्रेस "पोस्ट" कॉलम के मूल्य को हार्डकोड करता है, इसलिए जब से आप इसे बदलना चाहते हैं, हम बस इसे हटाने जा रहे हैं unset()
और फिर उसी शीर्षक के साथ एक नया कॉलम जोड़ें, लेकिन इसके बजाय इसके पहचानकर्ता हैं 'custom_posts'
:
add_action('manage_users_columns','yoursite_manage_users_columns');
function yoursite_manage_users_columns($column_headers) {
unset($column_headers['posts']);
$column_headers['custom_posts'] = 'Posts';
return $column_headers;
}
'manage_users_custom_column'
अंकुड़ा
आगे आपको 'manage_users_custom_column'
हुक का उपयोग करने की आवश्यकता है जो केवल गैर-मानक कॉलम के लिए बुलाया जाता है। हम $column_name=='custom_posts'
भविष्य में नए उपयोगकर्ता कॉलम जोड़ने के मामले में अपने कोड को मजबूत बनाने के लिए परीक्षण करते हैं और फिर हम उस फ़ंक्शन से उपयोगकर्ता पोस्ट प्रकार की संख्याएं लेते हैं _yoursite_get_author_post_type_counts()
जो मैंने लिखा था, जिसकी चर्चा मैं अगले में करूंगा। मैं तो इस प्रारूप के लिए कुछ तरीके के साथ खेला लेकिन फैसला किया एक HTML <table>
सबसे उपयुक्त था (क्योंकि यह है डेटा की एक तालिका) । यदि कोई तालिका आपके लिए काम नहीं करती है, तो मुझे लगता है कि आप बहुत आसानी से अलग मार्कअप उत्पन्न कर पाएंगे:
add_action('manage_users_custom_column','yoursite_manage_users_custom_column',10,3);
function yoursite_manage_users_custom_column($custom_column,$column_name,$user_id) {
if ($column_name=='custom_posts') {
$counts = _yoursite_get_author_post_type_counts();
$custom_column = array();
if (isset($counts[$user_id]) && is_array($counts[$user_id]))
foreach($counts[$user_id] as $count)
$custom_column[] = "\t<tr><th>{$count['label']}</th>" .
"<td>{$count['count']}</td></tr>";
$custom_column = implode("\n",$custom_column);
}
if (empty($custom_column))
$custom_column = "No Posts!";
else
$custom_column = "<table>\n{$custom_column}\n</table>";
return $custom_column;
}
प्रत्येक उपयोगकर्ता / लेखक के लिए पोस्ट प्रकार के हिसाब से पोस्ट काउंट प्राप्त करना
अंत में लेखक / उपयोगकर्ता द्वारा पोस्ट प्रकार से पोस्ट काउंट्स की पुनर्प्राप्ति है। आम तौर पर मैं WP_Query()
पोस्ट पर प्रश्नों को चलाते समय उपयोग करने के साथ छड़ी करने की कोशिश करता हूं, लेकिन इस क्वेरी को कई अन्य हुक का उपयोग करने की आवश्यकता होती है यह सिर्फ "शरारती" होना आसान लगता है और सभी को एक में करते हैं।
मैं के किसी भी पद छोड़ा गया $post->post_type
है 'revision'
या 'nav_menu_item'
लेकिन में छोड़ दिया 'attachments'
। हो सकता है कि आपने मेरे द्वारा किए गए पोस्ट को बाहर करने के बजाय स्पष्ट रूप से पोस्ट प्रकारों को शामिल करना बेहतर समझा हो।
मैं भी $post->post_status
केवल 'publish'
और के लिए फ़िल्टर किया गया 'pending'
। यदि आप भी शामिल करना चाहते हैं 'future'
, 'private'
और / या 'draft'
आपको कोड में परिवर्तन करने की आवश्यकता होगी।
प्रत्येक पृष्ठ लोड के लिए मैं केवल _yoursite_get_author_post_type_counts()
एक बार इस फ़ंक्शन को कॉल करता हूं और फिर प्रत्येक उपयोगकर्ता के लिए कॉल के बजाय एक स्थिर चर में संग्रहीत करता हूं । मैं लेखक / उपयोगकर्ता आईडी द्वारा अनुक्रमित सरणी में संग्रहीत करता हूं जिसमें तत्व में पोस्ट प्रकार नाम के साथ एक सरणी होती है 'label'
और निश्चित रूप से एक समान नाम वाले तत्व में गिनती होती है:
function _yoursite_get_author_post_type_counts() {
static $counts;
if (!isset($counts)) {
global $wpdb;
global $wp_post_types;
$sql = <<<SQL
SELECT
post_type,
post_author,
COUNT(*) AS post_count
FROM
{$wpdb->posts}
WHERE 1=1
AND post_type NOT IN ('revision','nav_menu_item')
AND post_status IN ('publish','pending')
GROUP BY
post_type,
post_author
SQL;
$posts = $wpdb->get_results($sql);
foreach($posts as $post) {
$post_type_object = $wp_post_types[$post_type = $post->post_type];
if (!empty($post_type_object->label))
$label = $post_type_object->label;
else if (!empty($post_type_object->labels->name))
$label = $post_type_object->labels->name;
else
$label = ucfirst(str_replace(array('-','_'),' ',$post_type));
if (!isset($counts[$post_author = $post->post_author]))
$counts[$post_author] = array();
$counts[$post_author][] = array(
'label' => $label,
'count' => $post->post_count,
);
}
}
return $counts;
}
परिणामी UI
और यह वही दिखता है जो वर्डप्रेस 3.0.1 के मेरे परीक्षण इंस्टॉल पर लागू होता है:
(स्रोत: mikeschinkel.com )
पूरा कोड डाउनलोड करें
आप Gist से पूरा कोड डाउनलोड कर सकते हैं :
आप इस कोड को अपनी थीम की functions.php
फ़ाइल में कॉपी कर सकते हैं या स्टोर में फ़ाइल को एक प्लगइन में शामिल कर सकते हैं, जो भी आप चुनते हैं।
उम्मीद है की यह मदद करेगा!