Ich habe:
wp_nav_menu(array(
'theme_location' => 'header-menu',
'depth' => 1,
'container' => 'div',
'link_before' => '',
'link_after' => '',
)
);
und das gib mir:
<ul>
<li class="page_item page-item-1">
<a href="http://link1">link1</a>
</li>
<li class="page_item page-item-2">
<a href="http://link2">link2</a>
</li>
<li class="page_item page-item-3">
<a href="http://link3">link3</a>
</li>
</ul>
aber ich möchte die URL in Links ersetzen von:
"http://link*"
zu:
"javascript:myfunc('http://link*')";
Wie es geht?
Nun, ich dachte, ich würde es mit PHP versuchen DomDocument
um den HTML-Code als String zu analysieren und den Wert des href-Attributs zu ersetzen.
$content="
<ul>
<li class="page_item page-item-1">
<a href="http://link1">link1</a>
</li>
<li class="page_item page-item-2">
<a href="http://link2">link2</a>
</li>
<li class="page_item page-item-3">
<a href="http://link3">link3</a>
</li>
</ul>
";
// New Dom Object
$dom = new DomDocument;
// Load $content as string
$dom->loadHTML($content);
// Get only a elements
$elements = $dom->getElementsByTagName('a');
// Loop through each a element and get it's href value
for ($n = 0; $n < $elements->length; $n++) {
$item = $elements->item($n);
// Get old href val
$old_href = $item->getAttribute('href');
// New href val
$new_href="javascript:myfunc(\"'.$old_href.'\')';
// Replace old href with new
$content = str_replace($old_href,$new_href,$content);
}
// Print results
echo $content;
Fügen Sie Folgendes zu Ihrer Datei functions.php hinzu, die sich mit dem Filter-Hook wp_nav_menu_objects in WP Core einklinkt.
function modify_nav_url($items) {
$old_url = "http://link*";
$new_url = "javascript:myfunc('http://link*')";
foreach($items as $item){
$item->url = str_replace($old_url, $new_url, $item->url);
}
return $items;
}
add_filter('wp_nav_menu_objects', 'modify_nav_url');
Quelle: https://wordpress.stackexchange.com/questions/137732/change-menu-items-url
10109200cookie-checkWie ändere ich die URL in wp_nav_menu?yes
Können Sie jQuery verwenden oder muss dies serverseitig erfolgen?
– Joe Schnalle
13. September 2013 um 12:55 Uhr