Come aggiungere opzioni blog personalizzate al nuovo modulo di impostazione blog?


17

Sembra un requisito abbastanza semplice, ma sto lottando:

  1. Voglio aggiungere un campo opzione a "Aggiungi nuovo sito" .
    Una semplice opzione di testo va bene. Come faccio a fare questo?

  2. Devo salvare questa opzione blog personalizzata quando viene creato il sito.

    So che posso usare l'hook 'wpmu_new_blog', che passa la $metavariabile con le opzioni fornite, ma mi chiedo se c'è un modo per farlo tutto in un passaggio, quindi non devo eseguire un'altra query DB, o peggio ancora , sostituire / sostituire l'intero processo di creazione del sito?

Appunti:

Sto usando WP 3.3.1 con una configurazione MultiSite. Sto scrivendo un plugin che elenca tutti i siti che corrispondono al valore del campo personalizzato specificato (chiamiamolo "tipo").

Inoltre, sono uno sviluppatore esperto di PHP ma sono ancora relativamente nuovo nell'hacking di WordPress, quindi supponiamo che non abbia ancora familiarità con tutte le varie funzioni e hook di WP.

Risposte:


9

Unendo due risposte (*), ho creato un plug-in per aggiungere una meta opzione personalizzata durante la registrazione di un nuovo sito (front-end e back-end) e visualizzarne il valore in una colonna nella schermata Siti.

Categorie multisito

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine ...

(*) riferimenti di codice

1 - WordPress + Multisito: come aggiungere opzioni di blog personalizzate per aggiungere il nuovo modulo del sito in Amministratore di rete? , di @dennisg

2 - Multisito: come aggiungere opzioni blog personalizzate al nuovo modulo di impostazione blog? , di @tbuteler

Il add_action('wpmu_new_blog', 'add_new_blog_field'); stato unito dalle due risposte.

Stavo già utilizzando il codice della colonna ID nel mio sito multiplo e ho anche aggiunto la colonna Categoria nel plug-in.

[aggiornare]

Ho cercato di rendere ordinabile la colonna Categoria, ma sembra quasi irrisolvibile ...

Vedi questa domanda / risposta: i filtri 'request' e 'parse_query' non si attivano in sites.php né link-manager.php

[aggiornamento 2]

Ho rielaborato il plugin e ora le categorie sono ordinabili. La prima versione del plug-in è ora un Gist (link aggiornato all'inizio) e la nuova versione rimane in GitHub.


+1 Ehi, questo è fantastico, brasofilo! Non vedo l'ora di provarlo :)
Brian Lacy,

8

Il processo di iscrizione multisito non è facile da modificare. Ha molti ganci con cui giocare, a differenza di altri processi, ma non sembrano unirsi troppo bene per una personalizzazione pesante, quindi capisco la tua frustrazione.

Se capisco correttamente, non è così complicato ottenere ciò che desideri, anche se non può essere una soluzione in un solo passaggio senza sovrascrivere gran parte del comportamento predefinito di WordPress, principalmente perché la registrazione (cioè quando l'utente invierà le informazioni personalizzate) e l'attivazione ( cioè quando il nuovo blog verrà effettivamente creato) avviene separatamente.

Ecco un codice molto approssimativo che dovrai iniziare. Spero che ti guidi nella giusta direzione:

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

Tieni a mente:

  1. Se si desidera filtrare l'ingresso tramite plug-in, si consiglia vivamente di utilizzare un ingresso selezionato per bloccare le opzioni fornite;
  2. Poiché alcuni campi sono obbligatori e passano attraverso la convalida durante la registrazione (caratteri minimi, caratteri non consentiti per il nome del sito, nomi nella lista nera, ecc.), Suggerirei di controllare il tuo campo aggiuntivo sul globale $ _REQUEST quando compili il valore dell'input sul primo funzione, in modo che l'utente non perda il suo input nel caso in cui venga rispedito per correggere il valore dei campi predefiniti di WordPress;
  3. Ovviamente puoi sostituire l'idea dell'ultima funzione con quella che si adatta meglio al tuo plug-in, ma il valore del campo sarà ora disponibile all'interno dell'ultima funzione, il che dovrebbe aiutarti nella tua strada.

In ultima analisi, se si desidera elaborare in seguito tutti i valori "extra_field" di tutti i blog esistenti, suggerirei di archiviare le informazioni su un'unica tabella; forse usare update_site_optioninvece diupdate_blog_option quest'ultima funzione, perdendo blog_id, che non è richiesto in quel caso.

In ogni caso, facci sapere come va e buona fortuna!


Ottima risposta utile, molte informazioni che posso mettere a frutto qui :) Sto assegnando la migliore risposta a brasofilo solo perché hai già ottenuto la generosità, ed entrambe sono ottime risposte.
Brian Lacy,

Ottima risposta qui, grazie. Qualche idea sul perché il mio campo aggiuntivo venga aggiunto alle opzioni del sito se non lascio eseguire update_blog_option ()? Ho echeggiato i valori all'interno di process_extra_field_on_blog_signup () e exit () e ha funzionato, il file extra è stato aggiunto alle opzioni. Ma quando l'ho lasciato scorrere senza exit (), allora il campo extra NON viene aggiunto a wp_xx_options.
Thatryan,

@thatryan, è strano ... O qualcosa sta rimuovendo i valori dal database (probabilmente) o non vengono aggiunti affatto. Prova ad eseguire altri test e sentiti libero di pubblicare una domanda se hai problemi a capirlo. Tieni presente che questa risposta era probabilmente per WordPress 3.5 o precedenti, quindi potrebbero aver cambiato qualcosa nelle versioni più recenti ...
Tomas Buteler

-1

se guardi il codice site-new.php avresti già ottenuto la tua risposta - e questo è no!

Non ci sono condizioni per verificare se è possibile aggiungere qualcosa al modulo. Tuttavia, ho studiato il file e credo che dovrete aggiungere manualmente questo campo di input in site-new.php e passare il valore come meta nell'array alla funzione wpmu_create_blog che troverete da qualche parte vicino alla linea 77. NON TESTATO ma leggendo su ciò che fa la funzione potrebbe essere quello che stai cercando.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.