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

15

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 personalizado cuando se crea el sitio.

    Sé que puedo usar el enlace 'wpmu_new_blog', que pasa la variable $meta con las opciones proporcionadas, pero me pregunto si hay una forma de hacerlo todo en un solo paso, así que no tengo 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 de PHP con experiencia, pero aún soy relativamente nuevo en el pirateo de WordPress, así que, por favor, suponga que aún no estoy familiarizado con todas las funciones y enlaces de WP.

    
pregunta Brian Lacy 25.04.2012 - 22:12

3 respuestas

9

Uniendo dos respuestas (*), he creado un complemento para agregar una meta opción personalizada al registrar un sitio nuevo (parte delantera y trasera) y mostrar su valor en una columna en la pantalla Sitios.

Categorías de sitios múltiples

...

(*) referencias de código

1 - Multisitio de WordPress +: ¿Cómo agregar opciones de blog personalizadas para agregar un nuevo sitio en el Administrador de red? , por @dennisg

2 - Multisite: ¿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 columna de ID en mi multisitio, y también agregué la columna de Categoría en el complemento.

[update◆

Intenté que la columna de Categoría se pudiera ordenar, pero parece casi imposible de resolver ...

Vea esta pregunta / respuesta: 'Solicitud' y 'parse_query' de filtros no se activan en sites.php ni en el administrador de enlaces. php

[actualización 2]

He modificado 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 .

    
respondido por el brasofilo 02.05.2012 - 22:36
8

El proceso de registro en varios sitios no es fácil de modificar. Tiene muchos ganchos para jugar, a diferencia de otros procesos, pero parece que no se unen demasiado bien para una personalización pesada, 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á realmente el nuevo blog) ocurre por separado.

Aquí hay un código muy aproximado que necesitarás 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']);
}

Ten en cuenta:

  1. Si desea filtrar la entrada a través de un complemento, le recomiendo sugiera utilizar una entrada de selección para bloquear las opciones proporcionadas;
  2. Dado que algunos campos son obligatorios y pasan por la validación durante registro (caracteres mínimos, caracteres no permitidos para el sitio nombre, nombres en la lista negra, etc.), sugeriría revisar su campo adicional en el $ _REQUEST global al completar el valor de la ingrese en la primera función, para que el usuario no pierda su entrada en caso de que se envíe para corregir el valor de los campos predeterminados de WordPress;
  3. Obviamente, puedes reemplazar la idea de la última función con lo que mejor se adapte a su plug-in, pero el valor del campo ahora será disponible desde dentro de la última función, que debería ayudarle en a tu manera.

En una nota final, si desea procesar todos los valores de 'extra_field' de todos los blogs existentes más adelante, sugeriría guardar la información en una sola tabla; tal vez use update_site_option en lugar de update_blog_option en esa última función, perdiendo el blog_id, que no es necesario en ese caso.

De todos modos, háganos saber cómo va, y ¡buena suerte!

    
respondido por el Tomas Buteler 29.04.2012 - 02:34
-1

si miras el código site-new.php, ya habrías recibido tu respuesta, ¡y 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 sin leer en lo que hace la función puede ser lo que está buscando.

    
respondido por el george.n 28.04.2012 - 23:18

Lea otras preguntas en las etiquetas