WordPress регистрирует короткий код с функцией антонима

#php #wordpress #wordpress-shortcode

#php #wordpress #wordpress-короткий код

Вопрос:

Правильный ли это синтаксис для регистрации короткого кода?

 $field = 'sc_id';
$newfunc = function($field) { return get_option($field);};
add_shortcode($field, $newfunc);
  

У меня есть набор опций, которые мне нужны, чтобы зарегистрировать все в коротких кодах.
И некоторые из них работают, некоторые из них нет.

Обновление: Ок, этот код работает

 $field = 'sc_id';
$newfunc = function() { return get_option($'sc_id');};
add_shortcode($field, $newfunc);
  

Но у меня есть около 20 значений, которые мне нужны для регистрации коротких кодов
И я предпочитаю

 [shortcode]
  

вместо

 [sc key="shortcode"]
  

Как я могу это сделать?

До версии 7.2 php этот код работал у меня

 $newfunc = create_function('', 'return get_option(' . $field . ');');
  

Ответ №1:

Это неправильный синтаксис. Посмотрите на документы WordPress.

Вы можете попробовать что-то вроде этого:

 $field = 'sc_id';
$newfunc = function($atts) { return get_option($atts['key']);};
add_shortcode($field, $newfunc); 
  

и вызывает короткий код следующим образом:

 [sc_id key="option_key"]
  

РЕДАКТИРОВАТЬ из-за вопроса с комментарием:

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

 $fields = array('sc_id','sc_it','sc_ib'); 
foreach($fields as $field) { 
    $newfunc = function() use($field) { 
        return get_option($field);
    }
    add_shortcode($field, $newfunc); 
}
  

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

Комментарии:

1. Спасибо за ваш ответ. Позвольте мне спросить следующим образом: у меня есть набор опций в базе данных echo get_option('sc_id'); echo get_option('sc_it'); echo get_option('sc_ib'); , и мне нужно создать такое же количество коротких кодов, мне не нужны опции типа ` [sc_id key =»option_key»] ` Мне нужно зарегистрировать эти короткие коды ` [sc_id],[sc_it], [sc_ib] ` Это правильный синтаксис? ‘ $fields = array(‘sc_id’,’sc_it’,’sc_ib’); foreach($fields как $field) { $newfunc = function() { возвращает get_option($field);}; add_shortcode($field, $newfunc); } `