Шорткод - внутри шорткода WP PHP HTML

Я хотел знать, есть ли способ направить шоколад на два разных параметра? И я объясню

этот шорткод [групповой навык] => return $skill;

Это второй шорткод [group lang] => return $lang;

У меня есть группа, которую я открыл через АКФ и я хочу выводить шорткод каждый раз в другое место, в предназначенное для него место

Это исходный код

<?php 
add_shortcode('group', function ($atts) {
    $group_field = get_field('info_global_course');
    if ($group_field):

        $attributes = shortcode_atts([
            'level_skill' => $group_field[level_skill],
            'lang' =>  $group_field[lang],
            'if_id_true' => $group_field[if_id_true]
        ], $atts);

/* I thought about this way, maybe it's not a rally, but maybe it will give you an idea to help me a little
 *   return $attributes['level_skill'];
 *    return $attributes['lang'];
 */

    endif;
});
?>

редактирование: После неудачных попыток я предпочел строить дизайн поверх HTML (ранее он был построен в виде Elementor)

У меня есть следующий код:

<?php 
/*************************************
 * Returns the values ​​from a certain group of the post
 *************************************/
add_shortcode('group', function ($atts,$shortcode_twoo,$shortcode_three) {
    $group_field = get_field('info_global_course');
    if ($group_field):

        $attributes = shortcode_atts([
            'level_skill' => $group_field[level_skill],
            'lang' =>  $group_field[lang],
            'if_id_true' => $group_field[if_id_true]
        ], $atts);

        
    return '
    <div>
        <div class = "level_skill border_bottom">
            <span class = "box_left"><i aria-hidden = "true" class = "far fa-clock"></i> time </span> 
            <span class = "box_right">'.$shortcode .'</span>
        </div>
        <div class = "video border_bottom">
            <span class = "box_left"><i aria-hidden = "true" class = "fas fa-video"></i> Study chapters </span> 
            <span class = "box_right">'.$shortcode1.'</span>
        </div>
        <div class = "studants border_bottom">
            <span class = "box_left"><i aria-hidden = "true" class = "fas fa-user-graduate"></i> Registered students</span> 
            <span class = "box_right">100</span>
        </div>
        <div class = "level_skill border_bottom">
            <span class = "box_left"><i aria-hidden = "true" class = "fab fa-superpowers"></i>  level skill</span> 
            <span class = "box_right">מתקדמים</span>
        </div>
         <div class = "lang border_bottom">
            <span class = "box_left"><i aria-hidden = "true" class = "fas fa-globe"></i>language</span> 
            <span class = "box_right">עברית</span>
        </div>
        <div class = "if_id_true border_bottom">
            <span class = "box_left"><i aria-hidden = "true" class = "fas fa-sticky-note"></i> Diploma</span> 
            <span class = "box_right">כן</span>
        </div>
    </div>
    ';
    endif;
});
?>

Цель состоит в том, чтобы вставить в этот массив все шорткоды, которые я создам в будущем.

Вот почему я сделал:

<?php
     $shortcode = do_shortcode('[time]');
     $shortcode1 = do_shortcode('[chapters]');
?>

или для HTML: [время] [главы]

Но затем я застреваю на том же вопросе, как вставлять различные переменные SHORTCODE.

Похоже, вы пытаетесь отображать/возвращать разные данные при изменении атрибутов? не могли бы вы уточнить это немного больше?

ieatbytes 20.01.2023 02:16

Конечно, вместо того, чтобы открывать 5-6 SHORTCODE для каждого из моих динамических полей, я хочу открыть один, а затем настроить их на назначенные места.

kfir ben shimon 20.01.2023 02:37

Цель shortcode_atts — объединить переданные аргументы с аргументами по умолчанию. Я не вижу большого смысла использовать это здесь. Вы не используете имя атрибута в приведенных вами примерах, поэтому переданный атрибут будет найден в $attr[0]. Итак, если $attr[0] == 'skill' - то вы хотите вернуть значение своего навыка, а если вместо этого $attr[0] == 'lang', то вы хотите вернуть значение своего языка ...

CBroe 20.01.2023 08:51

Видите, в принципе вы правы, но я не мог придумать другого способа, кроме массива, поэтому, если у вас есть другой способ, я хотел бы узнать об этом

kfir ben shimon 20.01.2023 12:03

Я изменил формулировку. Если кто-нибудь может взглянуть, как я это делаю в простом HTML

kfir ben shimon 20.01.2023 15:50

«так что, если у вас есть другой способ, я хотел бы узнать об этом» - я уже дал вам «псевдокод» в своем предыдущем комментарии.

CBroe 20.01.2023 15:51

@CBroe То, что вы сказали мне, не отражает то, что мне нужно, мне нужно использовать вложенный SHORTCODE, а то, что вы сказали, не позволяет этого

kfir ben shimon 20.01.2023 15:54

«Цель состоит в том, чтобы вставить в этот массив все шорткоды, которые я создам в будущем» — имя самого шорткода, которое вы передаете в свою функцию обратного вызова через третий параметр, поэтому, если вы хотите сделать что-то другое на основе этого . ..

CBroe 20.01.2023 15:55

Понятия не имею, о чем вы говорите - где "вложенность" в том, что вы пока показали?

CBroe 20.01.2023 15:56

Не отображается по той простой причине, что я не знаю, как выполнить вложенный SHORTCODE. Что мне поможет, если я возьму значение и верну его? Мне нужно выполнить три шорткода, и два шорткода имеют расчет количества учебных часов и учебных глав, а ниже приведен динамический контент ACF для текущего поста. -.-

kfir ben shimon 20.01.2023 16:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
10
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Класс определения короткого кода (создайте файл с желаемым именем и добавьте код в файл.

class MyPlugin_ShortCodes
{

  
    /**
     * Register the shortcodes for the public-facing side of the site.
     *
     * @since    1.0.0
     */
    public function register_shortcodes()
    {
        add_shortcode('group', array($this, 'shortcode'));
    }

    public function shortcode($attrs, $content = "", $shortcode = "my-plugin")
    {
        $allAttrs = $attrs;
        $attrs = shortcode_atts(array(
            'type' => null,
            'id' => null,
            'code' => null,            
        ), $attrs, $shortcode);

        if ($attrs["type"] != null) {
            try {
                $f = 'do__' . $attrs["type"];

                if (method_exists($this, $f))
                    return $this->$f($attrs, $content, $allAttrs);

                return '[The "type" attribute did not match any known shortcode type. Found: ' . $attrs["type"] . ']';
            } catch (Exception $ex) {
                return json_encode($ex->getMessage());
            }
        }

        return "Don't Know what to process!";
    }

    function do__skill($attrs, $content, $allAttrs)
    {

        $html = "Put your skills level here";
        
        return $html;
    }

    function do__lang($attrs, $content, $allAttrs)
    {

        $html = "Do Whateaver you want";
        
        return $html;
    }
}

Теперь добавьте следующие строки в файл определения вашего плагина.

$plugin_shortcodes = new MyPlugin_ShortCodes();
$this->loader->add_action('init', $plugin_shortcodes, 'register_shortcodes');

Шорткоды могут называться как...

do_shortcode('[group type = "skill" id = "{$ID}"]');
do_shortcode('[group type = "lang" id = "{$ID}" code = "en"]');
do_shortcode('[group type = "xxxx"');
Ответ принят как подходящий

Большое спасибо всем, кто пытался помочь Я нашел хороший способ объединить все шорткоды в один шорткод.

<?php 
    /********************
     * Consolidation of shortcodes
     **********************/
    add_shortcode('total_topics_chapters_group',function() {
        $output = '';
        $output .= do_shortcode('[time]');
        $output .= do_shortcode('[chapters]');
        $output .= do_shortcode('[group]');
        return $output;
    });
?>

Другие вопросы по теме