Как обернуть шорткод WordPress в div - PullRequest
0 голосов
/ 24 февраля 2012

Я создал следующую функцию шорткода для вызова меню в определенном месте на странице

function servicesmenu() {
    return wp_nav_menu( array( 'theme_location' => 'services_nav', 'menu_id' => 'servicesmenu') );
}
add_shortcode('servicesMenu', 'servicesmenu');

Над кодом работает нормально.Но когда я попытался заключить шорткод в DIV, он не переносится, меню, созданное шорткодом, появляется перед div id = "services_rightarea"

<div id="services_rightarea">
    <!-- other content here -->
    [servicesMenu]
</div>

Любое решение, пожалуйста

1 Ответ

0 голосов
/ 24 февраля 2012

Проблема в том, что wp_nav_menu выводится по умолчанию. Вам нужно захватить это эхо в переменной и вернуть его. Это можно сделать с помощью буферизации вывода :

function servicesmenu() {

    // Start output buffering
    ob_start(); 

    // The echo of this call is caught in the buffer
    wp_nav_menu( array('menu_id' => 'servicesmenu');

    // Capture contents of buffer in a variable
    $menu = ob_get_contents();

    // End buffering
    ob_end_clean();

    // Return your menu and bask in the warming glow of working code
    return $menu;
}
add_shortcode('servicesMenu', 'servicesmenu');

Редактировать: Я только что заметил, что вы также используете свойство theme_location. Это попытается вставить результат вызова wp_nav_menu в меню servicesmenu, которое было зарегистрировано с помощью register_nav_menu () .

Снимите параметр theme_location, и выходная буферизация будет работать как положено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...