Come modificare l'ordine dei campi personalizzati nel form

12 gen 2011, 22:59:23
Visualizzazioni: 485
Voti: 0

Ho aggiunto un campo "Titolo Personalizzato" all'editor delle categorie per catturare un titolo ottimizzato per i keyword che possa essere utilizzato separatamente dal nome della categoria. Funziona benissimo, ma appare come ultimo elemento di input nella schermata della categoria. Idealmente, vorrei che fosse posizionato sotto il campo "Nome" (o almeno in cima). È possibile?

Ecco il codice che sto usando per aggiungere il mio campo di input personalizzato alla schermata di modifica della categoria...

if($pagenow == "edit-tags.php" && $_REQUEST['action'] == "edit") 
add_filter('edit_category_form', 'my_category_fields');

function my_category_fields($tag) {
$tag_extra_fields = get_option(MY_CATEGORY_FIELDS);?>
<table class="form-table">
    <tr class="form-field">
        <th scope="row" valign="top"><label for="categoryTitle">Titolo Completo della Categoria</label></th>
        <td><input name="categoryTitle" id="categoryTitle" type="text" size="40" aria-required="false" value="<?php echo $tag_extra_fields[$tag->term_id]['cat_title']; ?>" />
        <p class="description">Il titolo è opzionale ma verrà utilizzato al posto del nome nella pagina di destinazione della categoria.</p></td>
    </tr>   
</table>
<?php
}
3
Commenti

So che non è una risposta, ma sono curioso del perché faresti una cosa del genere? È per distinguere un titolo di categoria leggibile da un essere umano da una versione ottimizzata per SEO che usi nel template?

internetross internetross
12 gen 2011 23:38:02

In sostanza, sì. Il campo "Name" predefinito va bene per liste come quando qualcuno inserisce un widget "Category" in una sidebar. Tuttavia, quando stai visualizzando una pagina di destinazione di categoria, un titolo completamente descrittivo funziona meglio. Ma non userei questo "Title" nelle liste poiché il campo "Name" predefinito della categoria è più appropriato per quello, IMHO.

Scott B Scott B
13 gen 2011 00:05:24

Faccio la stessa cosa per i titoli dei post. Uso il titolo predefinito di post/pagina nei menu e nelle liste di navigazione, ma quando sono pronto a visualizzare il titolo del post/pagina su single.php o page.php, uso un campo personalizzato che cattura un titolo più descrittivo (e ottimizzato per SEO).

Scott B Scott B
13 gen 2011 00:07:13
Tutte le risposte alla domanda 2
4

WordPress non fornisce gli hook che desideri, ma se sei disposto a utilizzare il buffer di output di PHP e preg_replace() puoi farlo funzionare senza modificare il core. Ecco una risposta che parla della tecnica generale richiesta:

Gli hook che vorrai utilizzare sono 'category_pre_add_form' per ob_start() e 'category_add_form' per ob_get_clean().

13 gen 2011 11:02:21
Commenti

È un'opzione interessante Mike. Dovrebbe anche eliminare il problema del flicker intrinseco nell'opzione javascript. Grazie come sempre!

Scott B Scott B
13 gen 2011 15:52:46

Ottima idea.

MathSmath MathSmath
13 gen 2011 21:02:29

@Scott B - Sì, preferisco sempre farlo in PHP quando possibile. Mi piace usare jQuery per l'interattività, non come soluzione temporanea per una generazione HTML non ideale perché, come hai menzionato, è molto più pulito.

MikeSchinkel MikeSchinkel
14 gen 2011 01:18:03

@MathSmath - Grazie. Ho avuto un cliente che mi ha spinto molto e ho imparato che c'è (quasi) sempre un modo per farlo funzionare senza modificare il core. Ovviamente non è sempre elegante... :)

MikeSchinkel MikeSchinkel
14 gen 2011 01:18:58
2

Non esiste una soluzione basata su PHP senza modificare il core. Apri il file wp-admin/edt-tag-form.php e lo vedrai. L'hook che stai utilizzando viene attivato subito prima del pulsante di invio, e il resto del form è hard-codato.

Ma probabilmente puoi farlo con jQuery. Leggi la mia risposta a questa domanda simile per un esempio. L'esempio è per la schermata di modifica dei post, ma il concetto dovrebbe essere lo stesso—usa il metodo insertBefore() di jQuery per spostare un elemento (tramite ID) prima di un altro elemento (tramite ID).

13 gen 2011 00:19:01
Commenti

Mi piace la tua idea con i bit di jQuery. Ma sembra che io sia bloccato, poiché i campi di modifica della categoria (gli elementi TR) non hanno ID assegnati che posso interrogare con jQuery.

Scott B Scott B
13 gen 2011 04:36:54

Ripensandoci, visto che voglio inserire la mia riga subito dopo la prima riga di quella tabella, suppongo che dovrei essere in grado di ottenere un altro mezzo di attraversamento del DOM oltre a getElementsByID...

Scott B Scott B
13 gen 2011 04:39:44