Несколько экземпляров ломает шорткод WordPress - PullRequest
2 голосов
/ 06 июня 2011

Я написал шорткод, который отображал профили авторов на основе идентификатора. Например, [user-profile id = "1"] будет отображать блок профиля, определенный в user-profile.php для автора 1. Это сработало (даже с несколькими экземплярами на одной странице).

function user_profile( $atts, $content = null ) {
    extract(shortcode_atts(array('id' => ''), $atts));
    include 'user-profile.php';
}

... за исключением того, что вывод шорткода обнаруживался перед другим содержимым записи независимо от его места в коде. Чтобы решить эту проблему, я добавил это исправление:

function user_profile( $atts, $content = null ) {
    extract(shortcode_atts(array('id' => ''), $atts));
    function get_user_profile() { include 'user-profile.php'; }
    ob_start();
    get_user_profile();
    $output_string = ob_get_contents();
    ob_end_clean();
    return $output_string;
}

... который работал для решения проблемы позиционирования, но сломал несколько экземпляров шорткода. [user-profile id = "1"] работает, но [user-profile id = "1"] [user-profile id = "2"] ломает его - страница просто перестает загружаться в этот момент.

Как я могу изменить это, чтобы разрешить несколько экземпляров?

Ответы [ 2 ]

0 голосов
/ 11 июня 2011

Проблема решена! Я обновил код в user-profile.php коде так, чтобы это был весь PHP и не использовал эхо. Затем я изменил функцию шорткода на:

function user_profile( $atts, $content = null ) {
    global $post;
    extract(shortcode_atts(array('id' => ''), $atts));
    include 'user-profile.php';
    return $user_hcard;
}
0 голосов
/ 07 июня 2011

Попробуйте так:

[user-profile id="1"][/user-profile] [user-profile id="2"][/user-profile]
...