Cum să modifici ordinea câmpurilor personalizate din formular

12 ian. 2011, 22:59:23
Vizualizări: 485
Voturi: 0

Am adăugat un câmp "Titlu Personalizat" în editorul de Categorii pentru a capta un titlu optimizat pentru SEO care poate fi folosit separat de numele categoriei. Funcționează perfect, dar apare ca ultimul element de input pe ecranul categoriei. În mod ideal, aș dori să fie plasat sub câmpul "Nume" (sau cel puțin în partea de sus). Este posibil acest lucru?

Iată codul pe care îl folosesc pentru a adăuga câmpul personalizat în ecranul de editare a categoriei...

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">Titlu complet al categoriei</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">Titlul este optional dar va fi folosit în locul numelui pe pagina de destinație a categoriei.</p></td>
    </tr>   
</table>
<?php
}
3
Comentarii

Știu că nu este un răspuns, dar sunt curios de ce ai face asta? Este pentru a distinge un titlu de categorie ușor de înțeles de oameni de versiunea optimizată pentru SEO pe care o folosești în șablon?

internetross internetross
12 ian. 2011 23:38:02

În esență, da. Câmpul implicit "Name" este potrivit pentru liste, cum ar fi atunci când cineva adaugă un widget "Category" într-o bară laterală. Cu toate acestea, când vizualizezi o pagină de destinație a categoriei, un titlu complet descriptiv funcționează mai bine. Dar nu aș folosi acest "Title" în liste, deoarece câmpul implicit "Name" al categoriei este mai potrivit pentru asta, după părerea mea.

Scott B Scott B
13 ian. 2011 00:05:24

Fac același lucru pentru titlurile articolelor. Folosesc titlul implicit al articolului/paginii în meniuri și liste de navigare, dar când sunt pe punctul de a afișa titlul articolului/paginii în single.php sau page.php, folosesc un câmp personalizat care captează un titlu mai descriptiv (și mai prietenos cu SEO).

Scott B Scott B
13 ian. 2011 00:07:13
Toate răspunsurile la întrebare 2
4

WordPress nu oferă hook-urile pe care le doriți, dar dacă sunteți dispus să utilizați bufferizarea ieșirii PHP și funcția preg_replace(), puteți face să funcționeze fără a modifica nucleul. Iată un răspuns care discută despre tehnica generală necesară:

Hook-urile pe care veți dori să le utilizați sunt 'category_pre_add_form' pentru ob_start() și 'category_add_form' pentru ob_get_clean().

13 ian. 2011 11:02:21
Comentarii

Aceasta este o opțiune interesantă, Mike. De asemenea, ar trebui să elimine problema de pâlpâire inerentă opțiunii javascript. Mulțumesc ca întotdeauna!

Scott B Scott B
13 ian. 2011 15:52:46

Idee excelentă.

MathSmath MathSmath
13 ian. 2011 21:02:29

@Scott B - Da, prefer întotdeauna să fac în PHP ori de câte ori este posibil. Îmi place să folosesc jQuery pentru interactivitate, nu pentru a compensa generarea HTML-ului care nu este ideală, deoarece, după cum menționezi, este mult mai curat.

MikeSchinkel MikeSchinkel
14 ian. 2011 01:18:03

@MathSmath - Mulțumesc. Am avut un client care m-a împins foarte tare și am învățat că există (aproape întotdeauna) o cale de a face să funcționeze fără a modifica nucleul. Desigur, nu este întotdeauna frumos... :)

MikeSchinkel MikeSchinkel
14 ian. 2011 01:18:58
2

Nu există o soluție bazată pe PHP fără a modifica nucleul. Deschide fișierul wp-admin/edt-tag-form.php și vei vedea. Hook-ul pe care îl folosești este declanșat chiar înainte de butonul de trimitere, iar restul formularului este hard-codat.

Dar probabil poți face asta cu jQuery. Citește răspunsul meu la această întrebare similară pentru un exemplu. Exemplul este pentru ecranul de editare al postării, dar conceptul ar trebui să fie același - folosește metoda insertBefore() din jQuery pentru a muta un element (după ID) înaintea altui element (după ID).

13 ian. 2011 00:19:01
Comentarii

Îmi place ideea ta cu elementele jQuery. Dar se pare că sunt blocat, deoarece câmpurile de editare a categoriilor (elementele TR) nu au ID-uri atribuite pe care să le pot interoga cu jQuery.

Scott B Scott B
13 ian. 2011 04:36:54

La a doua privire, deoarece vreau să inserez rândul meu imediat după primul rând al acelui tabel, presupun că ar trebui să pot folosi o altă metodă de navigare în DOM decât getElementsByID...

Scott B Scott B
13 ian. 2011 04:39:44