Como adicionar opções personalizadas de blog ao novo formulário de configuração de blog?

17

Parece um requisito bastante simples, mas estou lutando:

  1. Quero adicionar um campo de opção ao "Adicionar novo site" .
    Uma opção de texto simples é boa. Como eu faço isso?

  2. Preciso salvar esta opção de blog personalizado quando o site é criado.

    Eu sei que posso usar o gancho 'wpmu_new_blog', que passa a $metavariável com as opções fornecidas, mas estou me perguntando se existe uma maneira de fazer isso tudo em uma única etapa, para que eu não precise executar outra consulta ao banco de dados, ou pior ainda substituir / substituir todo o processo de criação do site?

Notas:

Estou usando o WP 3.3.1 com uma configuração MultiSite. Estou escrevendo um plug-in que lista todos os sites que correspondem ao valor do campo personalizado especificado (vamos chamá-lo de "tipo").

Além disso, sou um desenvolvedor PHP experiente, mas ainda sou relativamente novo em hackers no WordPress, então, suponha que ainda não estou intimamente familiarizado com todas as várias funções e ganchos do WP.

Brian Lacy
fonte

Respostas:

9

Juntando duas respostas (*), criei um plug-in para adicionar uma opção meta personalizada ao registrar um novo site (front-end e back-end) e exibir seu valor em uma coluna na tela Sites.

Categorias multisite

insira a descrição da imagem aqui insira a descrição da imagem aqui ...

(*) referências de código

1 - WordPress + Multisite: Como adicionar opções de blog personalizadas ao formulário Adicionar Novo Site no Network Admin? por @dennisg

2 - Multisite: Como adicionar opções personalizadas de blog ao novo formulário de configuração de blog? por @tbuteler

O add_action('wpmu_new_blog', 'add_new_blog_field');foi mesclado das duas respostas.

Eu já estava usando o código da coluna ID no meu multisite e também adicionei a coluna Categoria no plug-in.

[atualizar]

Tentou tornar a coluna Categoria classificável, mas parece quase insolúvel ...

Veja esta pergunta / resposta: Os filtros 'request' e 'parse_query' não são acionados em sites.php nem link-manager.php

[atualização 2]

Eu refiz o plugin e agora as categorias são classificáveis. A primeira versão do plugin é um Gist agora (link atualizado no início) e a nova versão permanece no GitHub.

brasofilo
fonte
+1 Ei, isso é ótimo, brasofilo! Estou ansioso para dar a isto uma tentativa :)
Brian Lacy
8

O processo de inscrição em vários sites não é algo fácil de ajustar. Ele tem muitos ganchos para jogar, ao contrário de outros processos, mas eles não parecem se encaixar muito bem para personalização pesada, então eu entendo sua frustração.

Se eu entendi corretamente, não é tão complicado conseguir o que você deseja, embora não possa ser uma solução de uma etapa sem substituir muito do comportamento padrão do WordPress, principalmente porque a inscrição (ou seja, quando o usuário enviará as informações personalizadas) e a ativação ( ou seja, quando o novo blog será criado) acontecerá separadamente.

Aqui está um código muito difícil que você precisará para começar. Espero que ele o direcione na direção certa:

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

Tenha em mente:

  1. Se você deseja filtrar a entrada via plug-in, sugiro fortemente o uso de uma entrada selecionada para bloquear as opções fornecidas;
  2. Como alguns campos são obrigatórios e passam pela validação durante o registro (caracteres mínimos, caracteres não permitidos para o nome do site, nomes na lista negra etc.), sugiro que você verifique seu campo extra no global $ _REQUEST ao preencher o valor da entrada no primeiro função, para que o usuário não perca sua entrada caso seja enviado de volta para corrigir o valor dos campos padrão do WordPress;
  3. Obviamente, você pode substituir a ideia da última função pelo que melhor se adequar ao seu plug-in, mas o valor do campo estará disponível a partir dessa última função, o que deve ajudá-lo no seu caminho.

Em uma nota final, se você quiser processar todos os valores 'extra_field' de todos os blogs existentes mais adiante, sugiro fortemente que você armazene as informações em uma única tabela; talvez use em update_site_optionvez update_blog_optiondessa última função, perdendo o blog_id, que não é necessário nesse caso.

De qualquer forma, deixe-nos saber como vai ser, e boa sorte!

Tomas Buteler
fonte
Ótima resposta útil, muita informação que posso usar aqui :) Estou concedendo a Melhor Resposta ao brasofilo apenas porque você já recebeu a recompensa, e ambas são ótimas respostas.
9789 Brian Lacy #
Resposta incrível aqui, obrigado. Alguma idéia de por que meu campo extra é adicionado às opções do site se eu não permitir a execução do update_blog_option ()? Eu ecoei os valores dentro de process_extra_field_on_blog_signup () e exit () e funcionou, o extra_filed foi adicionado às opções. Mas quando deixei passar sem exit (), o extra_field NÃO é adicionado a wp_xx_options.
thatryan
@ thatryan, isso é estranho ... Ou algo está removendo os valores do banco de dados (provavelmente não), ou eles não estão sendo adicionados. Tente executar mais alguns testes e sinta-se à vontade para postar uma pergunta, se estiver com problemas para descobrir. Tenha em mente que esta resposta foi provavelmente para WordPress 3.5 ou mais cedo, para que eles possam ter mudado algo em versões mais recentes ...
Tomas Buteler
-1

se você olhar o código site-new.php, já teria recebido sua resposta - e não é!

Não há condições para verificar se algo pode ser adicionado ao formulário. No entanto, estudei o arquivo e acredito que você terá que adicionar manualmente esse campo de entrada no site-new.php e passar o valor como meta na matriz para a função wpmu_create_blog que você encontrará em algum lugar próximo à linha 77. NÃO TESTADO, mas lendo sobre o que a função faz pode ser o que você está procurando.

george.n
fonte