Der von dieser Funktion erzeugte Shortcode - eine Liste aller Sites in einer Multisite - wird über dem Inhalt der Schleife ausgegeben, unabhängig davon, wo er im Editor abgelegt wird.
Ich habe bei den anderen damit verbundenen Fragen und Antworten auf WPSE sehe und erkennen , dass es mit der Funktion zu tun hat , mit echo
statt return
, aber es ist nicht so einfach wie die Instanzen zu ersetzen , echo
mit return
der der Funktion unten. Oder echo=0
mit einer WP-Funktion wie hinzufügenwp_list_pages()
Irgendwelche Ideen? Wo ist die Funktion, die zurückgegeben werden muss, anstatt wiedergegeben zu werden?
// Output a single menu item
function projects_menu_entry($id, $title, $link_self)
{
global $blog_id;
if ($link_self || $id != $blog_id) {
echo '<li>';
if ($id == $blog_id) {
echo '<strong>';
}
$url = get_home_url($id);
if (substr($url, -1) != '/') {
// Note: I added a "/" to the end of the URL because WordPress
// wasn't doing that automatically in v3.0.4
$url .= '/';
}
echo '<a href="' . $url . '">' . $title . '</a>';
if ($id == $blog_id) {
echo '</strong>';
}
echo '</li>';
}
}
// Output the whole menu
// If $link_self is false, skip the current site - used to display the menu on the homepage
function projects_menu($link_self = true)
{
global $wpdb;
echo '<ul>';
projects_menu_entry(1, 'Home', $link_self);
$blogs = $wpdb->get_results("
SELECT blog_id
FROM {$wpdb->blogs}
WHERE site_id = '{$wpdb->siteid}'
AND spam = '0'
AND deleted = '0'
AND archived = '0'
AND blog_id != 1
");
$sites = array();
foreach ($blogs as $blog) {
$sites[$blog->blog_id] = get_blog_option($blog->blog_id, 'blogname');
}
natsort($sites);
foreach ($sites as $blog_id => $blog_title) {
projects_menu_entry($blog_id, $blog_title, $link_self);
}
echo '</ul>';
}
// Adds a [bloglist] shortcode
function bloglist_shortcode($atts)
{
projects_menu(false);
}
add_shortcode('bloglist', 'bloglist_shortcode');
Antworten:
Alle Funktionen müssen zurückgeben eine Zeichenfolge, sollten Sie nicht verwenden , an
echo
jedem Ort. Schreiben Sie die Funktionen neu, verwenden Sie eine interne Variable, um die Zeichenfolgen zu verarbeiten, und geben Sie Folgendes zurück:Ein ähnliches, erweitertes Beispiel finden Sie unter: Zurückgeben von Schleifeninhalten .
quelle
Sie können die Instanzen von nicht ersetzen,
echo
da Sie nur einmal zurückkehren können. Sie müssen eine Zeichenfolge erstellen und diese zurückgeben.Tun Sie das für beide Funktionen und ich würde erwarten, dass dies funktioniert. Entschuldigung, wenn ich etwas grob falsch verstanden habe.
quelle
Ich werde eine alternative Lösung anbieten, bei der Sie keine Echoinstanzen ersetzen oder eine Rückgabezeichenfolge erstellen müssen.
Sie können die Ausgabepufferung aktivieren und den Puffer als Zeichenfolge zurückgeben.
Fügen Sie
ob_start()
vor jedem Echoaufruf den Anfang der Funktion hinzu.am Ende der Funktion hinzufügen:
quelle
Kurze und schnelle Antwort:
Sie sollten
return
Ihre Ausgabe und nichtecho
es.quelle