Як додати користувацькі параметри блогу до нової форми налаштування блогу?


17

Здається, це досить проста вимога, але я борюся:

  1. Я хочу додати поле опцій до "Додати новий сайт" .
    Простий варіант тексту - це добре. Як це зробити?

  2. Мені потрібно зберегти цей користувацький варіант блогу під час створення сайту.

    Я знаю, що можу використовувати гачок 'wpmu_new_blog', який передає $metaзмінну з наданими параметрами, але мені цікаво, чи є спосіб зробити це все за один крок, щоб мені не довелося виконувати інший запит БД, або ще гірше , замінити / замінити весь процес створення сайту?

Примітки:

Я використовую WP 3.3.1 з установкою MultiSite. Я пишу плагін, у якому перераховані всі сайти, які відповідають вказаному спеціальному значенню поля (назвемо його "тип").

Крім того, я досвідчений розробник PHP, але я все ще відносно новий для злому WordPress, тому, будь ласка, припустіть, що я ще не дуже знайомий з усіма різними функціями та гачками WP.

Відповіді:


9

З’єднавши два відповіді (*), я зробив плагін, щоб додати користувацьку мета-опцію під час реєстрації нового сайту (передній і задній кінець) та відобразити його значення у стовпці на екрані Сайтів.

Багатомісні категорії

введіть тут опис зображення введіть тут опис зображення ...

(*) посилання на код

1 - WordPress + Multisite: Як додати користувацькі параметри блогу, щоб додати нову форму сайту на Мережевому адміністраторі? , автор @dennisg

2 - Мультисайт: Як додати користувацькі параметри блогу до нової форми налаштування блогу? , автор @tbuteler

Це add_action('wpmu_new_blog', 'add_new_blog_field');було об'єднано з двох відповідей.

Я вже використовував ідентифікаційний стовпець з кодом у своєму багатосторонньому веб-сайті, а також додав стовпець Категорія у плагін.

[оновлення]

Спробував зробити стовпчик категорії сортуванням, але здається майже нерозв’язним ...

Дивіться це запитання / відповідь: "Запит" і "parse_query" фільтрів не спрацьовує в sites.php, ні посилання-менеджер.php

[оновлення 2]

Я переробив плагін і тепер категорії можна сортувати. Перша версія плагіна - це Gist зараз (посилання оновлено на початку), а нова версія залишається в GitHub.


+1 Гей, це чудово, брасофіло! Я з нетерпінням чекаю спробувати це :)
Брайан Лейсі

8

Процес реєстрації на багатосторонніх веб-сайтах - це непроста настройка. На відміну від інших процесів, у нього є багато гачків, але вони, здається, не надто добре поєднуються для важких налаштувань, тому я розумію ваше розчарування.

Якщо я правильно розумію, досягти того, що ви хочете, не так вже й складно, хоча це не може бути одноетапним рішенням, не перекриваючи велику частину поведінки WordPress за замовчуванням, головним чином через те, що реєстрація (тобто коли ваш користувач подасть користувацьку інформацію) та активація ( тобто коли новий блог буде фактично створений) відбуватимуться окремо.

Ось дуже приблизний код, який вам знадобиться для початку. Сподіваємось, це спрямовує вас у правильному напрямку:

// 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']);
}

Мати на увазі:

  1. Якщо ви хочете відфільтрувати вхід через плагін, я настійно рекомендую використовувати вхід вибору, щоб заблокувати надані параметри;
  2. Оскільки деякі поля потрібні та проходять валідацію під час реєстрації (мінімальні символи, заборонені символи для імені сайту, імена в чорному списку тощо), я б запропонував перевірити ваше додаткове поле у ​​глобальному $ _REQUEST при заповненні значення вхідних даних на першому функцію, щоб користувач не втрачав свої дані, якщо його відправляють назад, щоб виправити значення полів за замовчуванням WordPress;
  3. Очевидно, ви можете замінити ідею останньої функції на те, що найкраще підходить для вашого плагіна, але значення поля тепер буде доступне в межах тієї останньої функції, яка повинна допомогти вам на шляху.

На завершення, якщо ви хочете згодом обробити всі значення "extra_field" з усіх існуючих блогів, я настійно пропоную зберігати інформацію в одній таблиці; можливо, використовувати update_site_optionзамість update_blog_optionцієї останньої функції, втрачаючи blog_id, що в цьому випадку не потрібно.

У будь-якому випадку, повідомте нам, як це йде, і удачі!


Чудова корисна відповідь, багато інформації, яку я можу корисно використати тут :) Я нагороджую найкращим відповіддю брасофіло лише за те, що ви вже отримали нагороду, і обидва чудові відповіді.
Брайан Лейсі

Тут чудова відповідь, дякую. Будь-яка ідея, чому моє додаткове поле додається до параметрів сайту, якщо я не даю запустити update_blog_option ()? Я відлучив значення всередині process_extra_field_on_blog_signup () та exit (), і це спрацювало, extra_filed було додано до параметрів. Але коли я просто дозволю йому пройти без виходу (), то extra_field НЕ додається до wp_xx_options.
тетрян

@thatryan, це дивно ... Або щось видаляє значення з бази даних (мабуть), або вони взагалі не додаються. Спробуйте запустити ще кілька тестів і не соромтесь залишити запитання, якщо у вас виникли проблеми з його з'ясуванням. Майте на увазі, що ця відповідь, ймовірно,
стосувалася

-1

якщо ви подивитеся на сайт new.php-коду, ви вже отримали б свою відповідь - і це ні!

Немає умов, щоб перевірити, чи можна щось додати до форми. Однак я вивчив файл і вважаю, що вам доведеться вручну додати це поле введення в site-new.php і передати значення як мета в масиві до функції wpmu_create_blog, яку ви знайдете десь біля рядка 77. НЕ ВКАЗАНО, але читайте залежно від того, яку функцію вона виконує, може бути те, що ви шукаєте.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.