Thêm hộp meta thẻ WordPress mặc định vào Hồ sơ người dùng


8

Tôi đã thiết lập hồ sơ người dùng của mình để cho phép phân loại tùy chỉnh theo hướng dẫn này .

Lý tưởng nhất là tôi muốn sử dụng hộp meta Thẻ mặc định từ màn hình Bài đăng, vì vậy người dùng có thể dễ dàng thêm các thuật ngữ mới và tìm các thuật ngữ thường được sử dụng. Tôi hiện đang sử dụng danh sách hộp kiểm, nhưng việc này có thể kéo dài rất lâu vì chúng ta sẽ có một số nguyên tắc phân loại. Tôi có thể bằng cách nào đó sử dụng post_tags_meta_box()? Tôi đã xem xét add_meta_box()nhưng điều đó không làm việc 'user'.


2
+1 cho liên kết đó ... không biết bạn có thể thêm các nguyên tắc phân loại cho người dùng!
Michael Lewis

Bạn có thể thực sự cho thấy những gì bạn đã cố gắng? Tôi có nghĩa là "hiển thị với mã của bạn không hoạt động".
kaiser

@kaiser Mã duy nhất tôi thực sự đã thử là add_meta_box () nhưng nó chỉ có thể được sử dụng trên các loại bài đăng, không phải đối tượng người dùng.
epschmidt

Là một sidenote, các nguyên tắc phân loại có thể được thêm vào bất cứ thứ gì có ID, bao gồm cả nhận xét, người dùng, bài đăng hoặc thậm chí chính các nguyên tắc phân loại. Điều này bởi vì các thuật ngữ phân loại liên quan đến ID nhưng không đưa ra bất kỳ giả định nào về những gì ID đó thể hiện ngoài định dạng dữ liệu. Chính các chức năng trên cùng tạo ra những giả định đó
Tom J Nowell

Câu trả lời:


1

Thật không may, tôi muốn nói câu trả lời là không.

Bạn có thể chiếm quyền điều khiển (sao chép + dán) mã từ post_categories_meta_box()và cố gắng điều chỉnh nó cho người dùng, tuy nhiên bạn sẽ mất nhiều thời gian hơn để cố gắng kết nối lại tất cả các phần. Tôi khá chắc chắn rằng các hộp meta bài đăng sử dụng ajax để lưu và thêm các thuật ngữ mới, vì vậy bạn cũng phải chiếm quyền điều khiển một số javascript và sửa đổi điều đó.

Tôi nghĩ rằng đặt cược tốt nhất của bạn là tiếp tục con đường bạn đang đi. Bạn có thể thêm thuộc tính overflow:scroll;css vào thùng chứa hộp kiểm của mình để nó không quá dài.

Tôi đã đảo ngược các hộp meta bài cho mặt trước một vài tháng trước, và nó không quá khó. Tôi sẽ không đề nghị thử sử dụng lại các chức năng đánh dấu và php từ lõi. Thay vào đó, sử dụng chúng như một hướng dẫn nếu bạn gặp khó khăn.


Tôi đã đi xuống con đường cố gắng kéo mã từ hộp Tag trong post_tags_meta_box () từ lõi và thêm nó vào hồ sơ người dùng. Nhưng bạn nói đúng, có một số nội dung javascript và ajax đang diễn ra mà tôi cần sao chép cũng sẽ khiến điều này trở nên phức tạp hơn tôi cần. Tôi nghĩ rằng tôi sẽ chỉ tạo một loại bài đăng tùy chỉnh 'Thành viên' và xuất bản một bài đăng khi người dùng được đăng ký và sử dụng các nguyên tắc phân loại thay thế.
epschmidt

1

Câu trả lời ngắn gọn để chỉ phác thảo những gì cần phải được thực hiện:

  1. WP sử dụng javascript để thêm tất cả các phép thuật vào các hộp meta (kéo và thả, gấp, v.v.) -> Bạn sẽ cần wp_enqueue_script( 'posts' );(hoặc tuy nhiên xử lý tập lệnh đã được gọi).
  2. Bạn sẽ cần các móc cho phép đăng ký các hộp meta.
  3. Có MarkUp cụ thể (chủ yếu là các thùng chứa và những thứ tương tự) cần được hiển thị trên màn hình hồ sơ người dùng.

1

Mã này làm việc cho tôi. Nó sử dụng phân loại tùy chỉnh 'vị trí' và 'gợi ý' javascript. Bạn cần mở rộng nó để hỗ trợ nhiều lựa chọn hạn .

Thêm trường tùy chỉnh vào màn hình chỉnh sửa người dùng và lưu trữ siêu dữ liệu khi người dùng / quản trị viên cập nhật hồ sơ

// for account owner
add_action('show_user_profile', 'add_custom_user_profile_fields');
add_action('personal_options_update', 'save_custom_user_profile_fields');

// for admins
add_action('edit_user_profile', 'add_custom_user_profile_fields');
add_action('edit_user_profile_update', 'save_custom_user_profile_fields');

function add_custom_user_profile_fields($user) {
    printf(
    '
<h3>%1$s</h3>
<table class="form-table">
<tr>
<th><label for="location">%2$s</label></th>
<td>
  <input type="text" name="location" id="location" value="%3$s" class="regular-text" />
  <br /><span class="description">%4$s</span>
</td>
</tr>
</table>
',      __('Extra Profile Information', 'locale'),
        __('Location', 'locale'),
        esc_attr(get_user_meta($user->ID, 'location', true)),
        __('Start typing location name.', 'locale')
    );
}

function save_custom_user_profile_fields($user_id) {
    if (!current_user_can('edit_user', $user_id))
        return FALSE;

    $location_name = ( isset($_POST['location']) ) ? $_POST['location'] : '';

    // use your taxonomy name instead of 'locations'
    $location = get_term_by('name', $location_name, 'locations');

    // human readable value and id
    update_user_meta($user_id, 'location', $location_name);
    update_user_meta($user_id, 'location_id', $location->term_id);
}

Enqueue đề xuất javascript chỉ cho màn hình chỉnh sửa người dùng (giả sử bạn sử dụng phần này trong chủ đề tùy chỉnh)

function admin_scripts($hook) {
    $screen = get_current_screen();
    if ('user-edit' == $screen->id) {
    wp_enqueue_script(
        'user-edit-tag',
        get_stylesheet_directory_uri() . '/js/usermeta.js',
        array('suggest'),
        '20140509',
        true
    );
    }
}

usermeta.js

jQuery(document).ready(function($) {
   // use 'tax=your_taxonomy_name' instead of 'tax=locations'
   $('#location').suggest(ajaxurl+"?action=ajax-tag-search&tax=locations",{
        multiple:false,
        multipleSep: ","
    });
});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.