• Пишу плагин. Работает по шоткоду. По какому признаку и как можно взять (определить) контент до вызова шоткода и после?

    Нужно определить разные стили и классы для этих кусков контента.

Просмотр 9 ответов — с 1 по 9 (всего 9)
  • Не совсем понятно, что за шорткод, его тип, как он выглядит и для чего он нужен.
    Если симметричный, то им же и оформляйте кусок контента внутри него, если одиночный, то можно разбить контент по нему и оформлять что до, что после него 🙂

    Шоткод — не симметричный, выводит галерею. Если его вставить до текста — то все работает как и требовалось. Но (внезапно) стала необходима вставка текста и до шоткода-галереи. Но есть один нюанс — текст до шоткода должен иметь другие css классы.

    Сегодня подумал, что можно текст до шоткода-галереи и текст после оформлять в парный шоткод, который будет добавлять к нему необходимую верстку.

    Вот теперь думаю — так нормально или же есть какой «хитрый способ», который позволяет определить текст до вставки шоткода и текст после.?

    Примерно так

    $content = 'Это контент до шорткода. [shortcode id="my"] Это контент после шорткода';
    $contents = preg_split( '#(\[shortcode.*\])#', $content, NULL, PREG_SPLIT_DELIM_CAPTURE );

    на выходе массив, 0 — до шорткода, 1 — шорткод, 2 — после..

    Надеюсь, идея понятна? )

    Абсолютно. Спасибо, попробую — отпишусь о результатах.

    Что-то пошло не так…

    Если я вызываю одиночный (непарный) шоткод, то у него $content всегда будет пустой. Т.е. внутри функции шоткода я не могу разделить контент на «до и после».

    Может попробовать фильтр для the_content() использовать?

    Сделал через фильтр, но не уверен — правильно ли это.

    Код примерно такой.

    add_filter('the_content', 'show_me_real_content');
    
    function show_me_real_content($content){
    
    $contents = preg_split( '#(\[myshortcode.*\])#', $content, NULL, PREG_SPLIT_DELIM_CAPTURE );
    
    $content = '<div class="cls1">' . $contents[0] . '</div>'
    $content .= do_shortcode($contents[1]);
    $content .= '<div class="cls2">' . $contents[2] . '</div>'
    
    return $content;
    
    }

    Функцию написал «примерно», чтобы отобразить суть. К опечаткам не придираться)

    Так, как сделано сейчас — работает. Но у меня вопрос — можно ли так делать? Это нормально? 🙂

    Может быть эта информация будет интересна и полезна?:
    Есть плагин «Шорткоды» (Shortcodes Ultimate). К нему можно за 15$ купить расширение, с помощью которого можно создавать свои, любые произвольные шорткоды.
    ПОДРОБНОСТИ


    adminstrelok
    спасибо) Допиливать WP могу сам, но иногда стает вопрос не о том, чтобы создать что-то, а «можно ли так делать в WP? может есть другой путь? может я неправильно использую инструменты WP?»

    Но в любом случае спасибо )

    Вопрос решен, всем спасибо.

Просмотр 9 ответов — с 1 по 9 (всего 9)
  • Тема «Шоткод внутри контента» закрыта для новых ответов.