Я хотел знать, есть ли способ направить шоколад на два разных параметра? И я объясню
этот шорткод [групповой навык] => 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.
Конечно, вместо того, чтобы открывать 5-6 SHORTCODE для каждого из моих динамических полей, я хочу открыть один, а затем настроить их на назначенные места.
Цель shortcode_atts — объединить переданные аргументы с аргументами по умолчанию. Я не вижу большого смысла использовать это здесь. Вы не используете имя атрибута в приведенных вами примерах, поэтому переданный атрибут будет найден в $attr[0]. Итак, если $attr[0] == 'skill' - то вы хотите вернуть значение своего навыка, а если вместо этого $attr[0] == 'lang', то вы хотите вернуть значение своего языка ...
Видите, в принципе вы правы, но я не мог придумать другого способа, кроме массива, поэтому, если у вас есть другой способ, я хотел бы узнать об этом
Я изменил формулировку. Если кто-нибудь может взглянуть, как я это делаю в простом HTML
«так что, если у вас есть другой способ, я хотел бы узнать об этом» - я уже дал вам «псевдокод» в своем предыдущем комментарии.
@CBroe То, что вы сказали мне, не отражает то, что мне нужно, мне нужно использовать вложенный SHORTCODE, а то, что вы сказали, не позволяет этого
«Цель состоит в том, чтобы вставить в этот массив все шорткоды, которые я создам в будущем» — имя самого шорткода, которое вы передаете в свою функцию обратного вызова через третий параметр, поэтому, если вы хотите сделать что-то другое на основе этого . ..
Понятия не имею, о чем вы говорите - где "вложенность" в том, что вы пока показали?
Не отображается по той простой причине, что я не знаю, как выполнить вложенный SHORTCODE. Что мне поможет, если я возьму значение и верну его? Мне нужно выполнить три шорткода, и два шорткода имеют расчет количества учебных часов и учебных глав, а ниже приведен динамический контент ACF для текущего поста. -.-






Класс определения короткого кода (создайте файл с желаемым именем и добавьте код в файл.
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;
});
?>
Похоже, вы пытаетесь отображать/возвращать разные данные при изменении атрибутов? не могли бы вы уточнить это немного больше?