0
我想要一個自定義字段能夠從列表中選擇多個用戶。WordPress的:自定義字段選擇多個用戶
我已經可以選擇多個作者的插件,但這是針對發佈商網站的,我想標記具有其他角色的用戶(例如編輯者) 。
到目前爲止,我只得到一個結果。
/**
* Create the metabox
* @link https://developer.wordpress.org/reference/functions/add_meta_box/
*/
function _namespace_create_metabox() {
// Can only be used on a single post type (ie. page or post or a custom post type).
// Must be repeated for each post type you want the metabox to appear on.
add_meta_box(
'_namespace_metabox', // Metabox ID
'Some Metabox', // Title to display
'_namespace_render_metabox', // Function to call that contains the metabox content
'product', // Post type to display metabox on
'normal', // Where to put it (normal = main colum, side = sidebar, etc.)
'default' // Priority relative to other metaboxes
);
}
add_action('add_meta_boxes', '_namespace_create_metabox');
/**
* Render the metabox markup
* This is the function called in `_namespace_create_metabox()`
*/
function _namespace_render_metabox() {
// Variables
global $post; // Get the current post data
$details = $post->_namespace; // Get the saved values
// query array
$args = array('role' => 'author');
$users = get_users($args);
if(empty($users))
return;
echo'<select name="_namespace_custom_metabox" id="_namespace_custom_metabox" multiple="mulitiple" >';
foreach($users as $user){
echo '<option value="'.$user->data->user_login.'">'.$user->data->display_name.'</option>';
}
echo'</select>';
echo $details;
echo '<br>';
print_r($details);
// Security field
// This validates that submission came from the
// actual dashboard and not the front end or
// a remote server.
wp_nonce_field('_namespace_form_metabox_nonce', '_namespace_form_metabox_process');
}
/**
* Save the metabox
* @param Number $post_id The post ID
* @param Array $post The post data
*/
function _namespace_save_metabox($post_id, $post) {
// Verify that our security field exists. If not, bail.
if (!isset($_POST['_namespace_form_metabox_process'])) return;
// Verify data came from edit/dashboard screen
if (!wp_verify_nonce($_POST['_namespace_form_metabox_process'], '_namespace_form_metabox_nonce')) {
return $post->ID;
}
// Verify user has permission to edit post
if (!current_user_can('edit_post', $post->ID)) {
return $post->ID;
}
// Check that our custom fields are being passed along
// This is the `name` value array. We can grab all
// of the fields and their values at once.
if (!isset($_POST['_namespace_custom_metabox'])) {
return $post->ID;
}
/**
* Sanitize the submitted data
* This keeps malicious code out of our database.
* `wp_filter_post_kses` strips our dangerous server values
* and allows through anything you can include a post.
*/
$sanitized = wp_filter_post_kses($_POST['_namespace_custom_metabox']);
// Save our submissions to the database
update_post_meta($post->ID, '_namespace', $sanitized);
}
add_action('save_post', '_namespace_save_metabox', 1, 2);
/**
* Save events data to revisions
* @param Number $post_id The post ID
*/
function _namespace_save_revisions($post_id) {
// Check if it's a revision
$parent_id = wp_is_post_revision($post_id);
// If is revision
if ($parent_id) {
// Get the saved data
$parent = get_post($parent_id);
$details = $post->_namespace;
// If data exists and is an array, add to revision
if (!empty($details)) {
add_metadata('post', $post_id, '_namespace', $details);
}
}
}
add_action('save_post', '_namespace_save_revisions');
/**
* Restore events data with post revisions
* @param Number $post_id The post ID
* @param Number $revision_id The revision ID
*/
function _namespace_restore_revisions($post_id, $revision_id) {
// Variables
$post = get_post($post_id); // The post
$revision = get_post($revision_id); // The revision
$details = $post->_namespace; // The historic version
// Replace our saved data with the old version
update_post_meta($post_id, '_namespace', $details);
}
add_action('wp_restore_post_revision', '_namespace_restore_revisions', 10, 2);
/**
* Get the data to display on the revisions page
* @param Array $fields The fields
* @return Array The fields
*/
function _namespace_get_revisions_fields($fields) {
// Set a title
$fields['_namespace'] = 'Some Item';
return $fields;
}
add_filter('_wp_post_revision_fields', '_namespace_get_revisions_fields');
/**
* Display the data on the revisions page
* @param String|Array $value The field value
* @param Array $field The field
*/
function _namespace_display_revisions_fields($value, $field) {
global $revision;
return get_metadata('post', $revision->ID, $field, true);
}
add_filter('_wp_post_revision_field_my_meta', '_namespace_display_revisions_fields', 10, 2);
任何幫助,將不勝感激。
由於@misha
我得到了它與這個
add_action('admin_menu', 'editor_metabox');
add_action('save_post', 'editor_save_metaboxdata', 10, 2);
function editor_metabox() {
add_meta_box('editor_select2', 'Editor(s)', 'editor_display_metabox', 'product', 'normal', 'default');
}
function editor_display_metabox($post_object) {
$html = '';
$appended_tags = get_post_meta($post_object->ID, 'en_editor',true);
$args = array(
'role' => 'author'
);
if($tags = get_users($args)) {
$html .= '<p><label for="en_editor">Editor(s):</label><br /><select id="en_editor" name="en_editor[]" multiple="multiple" style="width:99%;max-width:25em;" >';
foreach($tags as $tag) {
$selected = (is_array($appended_tags) && in_array($tag->user_login, $appended_tags)) ? ' selected="selected"' : '';
$html .= '<option value="'.$tag->data->user_login.'"' . $selected . '>'.$tag->data->display_name.'</option>';
}
$html .= '<select></p>';
}
echo $html;
foreach ($appended_tags as $appended_tags){
$user = get_user_by('login', $appended_tags);
echo $user->display_name;
echo '<br>';
wp_nonce_field('en_editor_form_metabox_nonce', 'en_editor_form_metabox_process');
}
}
function editor_save_metaboxdata($post_id, $post) {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id;
// check permissions
if ('product' == $_POST['post_type']) {
if (!current_user_can('edit_page', $post_id))
return $post_id;
} elseif (!current_user_can('edit_post', $post_id)) {
return $post_id;
}
if ($post->post_type == 'product') {
if(isset($_POST['en_editor']))
update_post_meta($post_id, 'en_editor', $_POST['en_editor']);
else
delete_post_meta($post_id, 'en_editor');
}
return $post_id;
}
我在你指出的地方添加了方括號,現在函數不會回顯任何東西。 我需要在多個地方添加[]嗎? –
請注意,$ _POST ['_ namespace_custom_metabox']現在是數組。 –
米沙 - 你能指點我一個類似的例子嗎?我很難找到任何在線。 –