2017-03-12 22 views
1

Als ich genesis_search_form() nennen, gibt sie:Wie füge ich einen Bereich in ein Suchformular ein? (Genesis)

<form class="search-form"> 
    <meta itemprop="target"> 
    <input type="search"> 
    <input type="submit"> 
</form> 

Aber ich wollte es mit einem span innen zu erzeugen, wie:

<form class="search-form"> 
    <meta itemprop="target"> 
    <input type="search"> 
    <span class="submit-icon"></span> 
    <input type="submit"> 
</form> 

War auf der Suche nach einer sichereren Alternative zu:

add_filter('genesis_search_form', 'my_search_button'); 
function my_search_button($form) { 
    return str_replace( 
     '<input type="submit"', 
     '<span class="submit-icon"></span><input type="submit"', 
     $form 
    ); 
} 

Um zu vermeiden, den Anfang eines Tags zu ersetzen. Irgendwelche Ideen?

+1

Sie können dies nicht tun, solange die Funktion nicht die Möglichkeit bietet, dies zu tun, Sie können, wenn es erlaubt ist, die Funktion zu verzweigen und anpassen, wie Sie Ihre Bedürfnisse anpassen möchten. – hassan

Antwort

0

Wenn Sie in Ordnung sind mit DOMDocument, diese Version für HTML5 besser funktioniert.

1

Wenn es Ihnen erlaubt ist, Änderungen an der Funktion vorzunehmen, tun Sie es. Wenn nicht, hack es!

$('form.search-form input[type=search]').after('<span class="submit-icon"></span>'); 
+2

Vielen Dank für Ihre Antwort, 'jQuery' ist in der Tat einfacher, aber suchte nach einer Lösung in' php' alles auf der Serverseite. –

0

Verwenden Sie DOMDocument! Hier ist eine funktionierende Version des Codes: https://3v4l.org/ats7D

<?php 

// Create a DOM Document 
$dom = new DomDocument(); 

// Load your HTML 
$dom->loadHTML('<form class="search-form"> 
    <meta itemprop="target"> 
    <input type="search"> 
    <input type="submit"> 
</form>'); 

// Create a new <span> 
$span = $dom->createElement('span', 'hello'); 

// Grab the <input elements (we dont have an ID) 
$inputs = $dom->getElementsByTagName('input'); 

// Add the <span> between the inputs 
$inputs->item(0)->parentNode->insertBefore($span, $inputs->item(1)); 

// By default when you loadHTML(), it generates doctype, html, head, and  body tags. remove them! 
$dom->removeChild($dom->doctype); 
$dom->replaceChild($dom->firstChild->firstChild->firstChild, $dom->firstChild); 

// Finally get the HTML 
$html = $dom->saveHTML(); 

// And output/return/whatever 
echo $html; 
+0

Ehrfürchtig; Damit können Sie es serverseitig behalten, wie er es möchte. Es kann auch sinnvoll sein, das Ergebnis irgendwie zu cachen, so dass er bei jeder Anfrage keinen DOM-Chunk manipulieren muss. –

Verwandte Themen