Làm cách nào để thêm Tùy chọn Blog tùy chỉnh vào mẫu thiết lập blog mới?


17

Có vẻ như một yêu cầu đủ đơn giản, nhưng tôi đang vật lộn:

  1. Tôi muốn thêm một trường tùy chọn vào "Thêm trang web mới" .
    Một tùy chọn văn bản đơn giản là tốt. Làm thế nào để tôi làm điều này?

  2. Tôi cần lưu tùy chọn blog tùy chỉnh này khi trang web được tạo.

    Tôi biết tôi có thể sử dụng hook 'wpmu_new_blog', vượt qua $metabiến với các tùy chọn được cung cấp, nhưng tôi tự hỏi liệu có cách nào để thực hiện tất cả điều này trong một bước để tôi không phải thực hiện truy vấn DB khác hay tệ hơn nữa , ghi đè / thay thế toàn bộ quá trình tạo trang web?

Ghi chú:

Tôi đang sử dụng WP 3.3.1 với thiết lập MultiSite. Tôi đang viết một plugin liệt kê tất cả các Trang web phù hợp với giá trị trường tùy chỉnh đã chỉ định (hãy gọi nó là "loại").

Ngoài ra, tôi là một nhà phát triển PHP có kinh nghiệm nhưng tôi vẫn còn khá mới đối với việc hack WordPress, vì vậy, giả sử tôi chưa quen thuộc với tất cả các hàm và móc nối WP khác nhau.

Câu trả lời:


9

Tham gia hai câu trả lời (*), tôi đã thực hiện một plugin để thêm tùy chọn meta tùy chỉnh khi đăng ký một trang web mới (mặt trước và mặt sau) và hiển thị giá trị của nó trong một cột trong màn hình Trang web.

Danh mục nhiều trang

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây ...

(*) tham chiếu mã

1 - WordPress + Multisite: Làm cách nào để thêm tùy chọn blog tùy chỉnh vào Thêm biểu mẫu trang web mới trong Quản trị mạng? , bởi @dennisg

2 - Multisite: Làm cách nào để thêm Tùy chọn Blog tùy chỉnh vào mẫu thiết lập blog mới? , bởi @tbuteler

Đã add_action('wpmu_new_blog', 'add_new_blog_field');được hợp nhất từ ​​hai câu trả lời.

Tôi đã sử dụng mã cột ID trong multisite của mình và cũng đã thêm cột Danh mục trong plugin.

[cập nhật]

Đã cố gắng để làm cho cột Danh mục có thể sắp xếp, nhưng dường như gần như không thể giải quyết ...

Xem câu hỏi / câu trả lời này: Bộ lọc 'request' và 'parse_query' không bắn trong các trang web.php cũng như link-manager.php

[cập nhật 2]

Tôi đã làm lại plugin và bây giờ các danh mục có thể sắp xếp. Phiên bản đầu tiên của plugin là Gist now (liên kết được cập nhật ở đầu) và phiên bản mới vẫn ở trong GitHub.


+1 Này, điều này thật tuyệt, brasofilo! Tôi mong được thử cái này :)
Brian Lacy

8

Quá trình đăng ký Multisite không phải là một điều dễ dàng để điều chỉnh. Nó có nhiều móc để chơi, không giống như các quy trình khác, nhưng dường như chúng không kết hợp quá tốt với các tùy chỉnh nặng nề, vì vậy tôi hiểu sự thất vọng của bạn.

Nếu tôi hiểu chính xác, sẽ không phức tạp để đạt được những gì bạn muốn, mặc dù đó không thể là giải pháp một bước mà không ghi đè nhiều hành vi mặc định của WordPress, chủ yếu là vì đăng ký (tức là khi người dùng của bạn sẽ gửi thông tin tùy chỉnh) và kích hoạt ( tức là khi blog mới thực sự sẽ được tạo ra) xảy ra riêng biệt.

Đây là một mã rất thô mà bạn sẽ cần để bắt đầu. Hy vọng rằng nó sẽ giúp bạn đi đúng hướng:

// Add text field on blog signup form
add_action('signup_blogform', 'add_extra_field_on_blog_signup');
function add_extra_field_on_blog_signup() { ?>
    <label>An extra field</label>
    <input type="text" name="extra_field" value="" />
<?php
}

// Append the submitted value of our custom input into the meta array that is stored while the user doesn't activate
add_filter('add_signup_meta', 'append_extra_field_as_meta');
function append_extra_field_as_meta($meta) {
    if(isset($_REQUEST['extra_field'])) {
        $meta['extra_field'] = $_REQUEST['extra_field'];
    }
    return $meta;
}

// When the new site is finally created (user has followed the activation link provided via e-mail), add a row to the options table with the value he submitted during signup
add_action('wpmu_new_blog', 'process_extra_field_on_blog_signup', 10, 6);
function process_extra_field_on_blog_signup($blog_id, $user_id, $domain, $path, $site_id, $meta) {
    update_blog_option($blog_id, 'extra_field', $meta['extra_field']);
}

Ghi nhớ:

  1. Nếu bạn muốn lọc đầu vào thông qua plugin, tôi thực sự khuyên bạn nên sử dụng đầu vào được chọn để khóa các tùy chọn được cung cấp;
  2. Vì một số trường được yêu cầu và thông qua xác thực trong quá trình đăng ký (ký tự tối thiểu, ký tự không được phép cho tên trang web, tên trong danh sách đen, v.v.), tôi khuyên bạn nên kiểm tra trường bổ sung của bạn trên toàn cầu $ _REQUEST khi nhập giá trị của đầu vào vào đầu tiên chức năng, để người dùng không bị mất dữ liệu đầu vào của mình trong trường hợp anh ta gửi lại để sửa giá trị của các trường mặc định của WordPress;
  3. Rõ ràng bạn có thể thay thế ý tưởng của chức năng cuối cùng bằng bất cứ điều gì phù hợp nhất với trình cắm của bạn, nhưng giá trị của trường sẽ có sẵn từ bên trong chức năng cuối cùng đó, sẽ giúp bạn theo cách của mình.

Trên lưu ý cuối cùng, nếu bạn muốn xử lý tất cả các giá trị 'Extra_field' từ tất cả các blog hiện có sau này, tôi sẽ khuyên bạn nên lưu trữ thông tin trên một bảng; có thể sử dụng update_site_optionthay vì update_blog_optiontrên chức năng cuối cùng đó, làm mất blog_id, không bắt buộc trong trường hợp đó.

Dù sao, hãy cho chúng tôi biết làm thế nào nó đi, và chúc may mắn!


Câu trả lời hữu ích tuyệt vời, rất nhiều thông tin tôi có thể sử dụng tốt ở đây :) Tôi chỉ trao giải Câu trả lời hay nhất cho brasofilo vì bạn đã nhận được tiền thưởng, và cả hai đều là câu trả lời tuyệt vời.
Brian Lacy

Câu trả lời tuyệt vời ở đây, cảm ơn bạn. Bất kỳ ý tưởng tại sao trường bổ sung của tôi được thêm vào tùy chọn trang web nếu tôi không để update_blog_option () chạy? Tôi lặp lại các giá trị bên trong process_extra_field_on_blog_signup () và exit () và nó đã hoạt động, Extra_filed đã được thêm vào các tùy chọn. Nhưng khi tôi chỉ để nó chạy qua mà không thoát () thì Extra_field KHÔNG được thêm vào wp_xx_options.
thatryan

@thatryan, thật lạ ... Hoặc là một cái gì đó đang xóa các giá trị khỏi cơ sở dữ liệu (không có khả năng) hoặc chúng không được thêm vào. Hãy thử chạy thêm một số bài kiểm tra và thoải mái đăng câu hỏi nếu bạn gặp khó khăn khi tìm hiểu. Hãy nhớ rằng câu trả lời này có lẽ dành cho WordPress 3.5 hoặc sớm hơn, vì vậy họ có thể đã thay đổi điều gì đó trong các phiên bản mới hơn ...
Tomas Buteler

-1

nếu bạn nhìn vào mã site-new.php, bạn sẽ nhận được câu trả lời của mình - và đó là không!

Không có điều kiện kiểm tra để xem nếu có bất cứ điều gì có thể được thêm vào biểu mẫu. Tuy nhiên, tôi đã nghiên cứu tệp và tin rằng bạn sẽ phải thêm thủ công trường nhập này vào site-new.php và chuyển giá trị dưới dạng meta trong mảng sang hàm wpmu_create_blog mà bạn sẽ tìm thấy ở đâu đó gần dòng 77. KHÔNG KIỂM TRA nhưng đọc về những gì chức năng làm nó có thể là những gì bạn đang tìm kiếm.

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.