¿Cómo agregar opciones de blog personalizadas al nuevo formulario de configuración de blog?

17

Parece un requisito bastante simple, pero estoy luchando:

  1. Quiero agregar un campo de opción al "Agregar nuevo sitio" .
    Una opción de texto simple está bien. ¿Cómo hago esto?

  2. Necesito guardar esta opción de blog personalizada cuando se crea el sitio.

    Sé que puedo usar el enlace 'wpmu_new_blog', que pasa la $metavariable con las opciones proporcionadas, pero me pregunto si hay una manera de hacer todo esto en un solo paso para que no tenga que realizar otra consulta de base de datos, o peor aún , anular / reemplazar todo el proceso de creación del sitio?

Notas:

Estoy usando WP 3.3.1 con una configuración MultiSite. Estoy escribiendo un complemento que enumera todos los sitios que coinciden con el valor del campo personalizado especificado (llamémoslo "tipo").

Además, soy un desarrollador PHP experimentado pero todavía soy relativamente nuevo en el pirateo de WordPress, así que suponga que todavía no estoy familiarizado con todas las funciones y enlaces de WP.

Brian Lacy
fuente

Respuestas:

9

Al unir dos respuestas (*), hice un complemento para agregar una meta opción personalizada al registrar un nuevo sitio (frontal y posterior) y mostrar su valor en una columna en la pantalla Sitios.

Categorías multisitio

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí ...

(*) referencias de código

1 - WordPress + Multisitio: ¿cómo agregar opciones de blog personalizadas para agregar un formulario de nuevo sitio en Network Admin? , por @dennisg

2 - Multisitio: ¿Cómo agregar opciones de blog personalizadas al nuevo formulario de configuración del blog? , por @tbuteler

El add_action('wpmu_new_blog', 'add_new_blog_field');se fusionó a partir de las dos respuestas.

Ya estaba usando el código de la columna ID en mi multisitio, y también agregué la columna Categoría en el complemento.

[actualizar]

Intenté hacer que la columna Categoría se pueda ordenar, pero parece casi insoluble ...

Consulte esta pregunta / respuesta: los filtros 'solicitud' y 'parse_query' no se activan en sites.php ni link-manager.php

[actualización 2]

He revisado el complemento y ahora las categorías se pueden ordenar. La primera versión del complemento es un Gist ahora (enlace actualizado al principio) y la nueva versión permanece en GitHub.

brasofilo
fuente
+1 ¡Hola, esto es genial, brasofilo! Tengo muchas ganas de probar esto :)
Brian Lacy
8

El proceso de registro en varios sitios no es fácil de modificar. Tiene muchos ganchos con los que jugar, a diferencia de otros procesos, pero parece que no se combinan demasiado bien para una gran personalización, por lo que entiendo su frustración.

Si entiendo correctamente, no es tan complicado lograr lo que desea, aunque no puede ser una solución de un solo paso sin anular gran parte del comportamiento predeterminado de WordPress, principalmente porque el registro (es decir, cuando el usuario enviará la información personalizada) y la activación ( es decir, cuándo se creará el nuevo blog) suceda por separado.

Aquí hay un código muy aproximado que necesitará para comenzar. Esperemos que te guíe en la dirección correcta:

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

Tenga en cuenta:

  1. Si desea filtrar la entrada a través del complemento, le sugiero encarecidamente que use una entrada de selección para bloquear las opciones proporcionadas;
  2. Dado que algunos campos son obligatorios y pasan por la validación durante el registro (caracteres mínimos, caracteres no permitidos para el nombre del sitio, nombres en la lista negra, etc.), sugeriría verificar su campo adicional en el global $ _REQUEST al completar el valor de la entrada en el primer función, para que el usuario no pierda su entrada en caso de que sea enviado de vuelta para corregir el valor de los campos predeterminados de WordPress;
  3. Obviamente, puede reemplazar la idea de la última función con la que mejor se adapte a su complemento, pero el valor del campo ahora estará disponible desde esa última función, lo que debería ayudarlo en su camino.

En una nota final, si desea procesar todos los valores 'extra_field' de todos los blogs existentes más adelante, le sugiero que almacene la información en una sola tabla; tal vez use en update_site_optionlugar de update_blog_optionesa última función, perdiendo el blog_id, que no es necesario en ese caso.

De todos modos, ¡cuéntanos cómo te va y buena suerte!

Tomás Buteler
fuente
Gran respuesta útil, mucha información que puedo usar aquí :) Estoy otorgando la Mejor Respuesta a brasofilo solo porque ya obtuviste la recompensa, y ambas son excelentes respuestas.
Brian Lacy
Impresionante respuesta aquí, gracias. ¿Alguna idea de por qué mi campo adicional se agrega a las opciones del sitio si no dejo que se ejecute update_blog_option ()? Hice eco de los valores dentro de process_extra_field_on_blog_signup () y exit () y funcionó, el extra_filed se agregó a las opciones. Pero cuando lo dejo correr sin salir (), el campo extra NO se agrega a wp_xx_options.
thatryan
@thatryan, eso es extraño ... O algo está eliminando los valores de la base de datos (no es probable), o no se están agregando en absoluto. Intente ejecutar algunas pruebas más y no dude en publicar una pregunta si tiene problemas para resolverla. Tenga en cuenta que esta respuesta probablemente fue para WordPress 3.5 o anterior, por lo que podrían haber cambiado algo en las versiones más nuevas ...
Tomas Buteler
-1

si observa el código site-new.php ya habría recibido su respuesta, ¡y eso es no!

No hay condiciones para verificar si se puede agregar algo al formulario. Sin embargo, estudié el archivo y creo que tendrá que agregar manualmente este campo de entrada en site-new.php y pasar el valor como meta en la matriz a la función wpmu_create_blog que encontrará en algún lugar cerca de la línea 77. NO PROBADO pero leyendo en lo que hace la función puede ser lo que está buscando.

george.n
fuente