Intereting Posts
моя тема нарушает экспорт WP добавлять новые атрибуты в существующие короткие коды Как я могу создавать почтовые поля в WordPress? Nginx перенаправляет на дополнительный подкаталог Один обмен для нескольких типов сообщений Как настроить «блог» на странице, отличной от главной / домашней страницы? отображение запроса возврата, если в категории пост-типа нет ничего Как добавить новое сообщение При нажатии кнопки? исключить некоторые категории с его подкатегориями Проверьте, есть ли меню id = $ specific_id – затем вставьте конкретный <img> Проблемы с add_query_arg (), не передающие переменную как создать другие размеры оригинального изображения за один раз «Удалить уведомление об обновлении для всех пользователей, кроме пользователя ADMIN» Получение данных участника из списка WhishList в регистре Используйте Gravatar в качестве резервного изображения, если локальное изображение не найдено

Как создать короткий код с html и php-контентом?

Я хочу создать короткий код для одной из форм формы контента.

Содержание моего шаблона:

<section id="standing" style="background-image: url('<?php echo (get_option('pixieclash-standings-background') && get_option('pixieclash-standings-background') != null) ? esc_url(get_option('pixieclash-standings-background')) : get_stylesheet_directory_uri() . '/images/standings-bg.jpg' ?>');"> <div class="container"> <?php $headTxt = get_option('pixieclash-standings-section-heading-top'); $bottomText = get_option('pixieclash-standings-section-heading-bottom'); ?> <?php if(!empty($headTxt) || !empty($bottomText)): ?> <article class="head"> <?php if(!empty($headTxt)): ?> <h4><?php echo esc_attr($headTxt); ?></h4> <?php endif; ?> <?php if(!empty($bottomText)): ?> <h3><?php echo esc_attr($bottomText); ?></h3> <?php endif; ?> </article> <?php endif; ?> <?php $groups = pixieclash_standings_groups(); if(!empty($groups)): $i = 1; $onlyOne = count($groups) > 1 ? '' : 'onlyOne'; foreach($groups as $group): $competitors = pixieclash_standings($group['id']); ?> <article class="table <?php echo ($i % 2 != 0) ? 'first' : 'second' ?> <?php echo $onlyOne ?>"> <h5 class="group-name"><?php esc_html_e('Group', 'pixieclash') ?> <?php echo esc_attr($group['name']) ?></h5> <table class="table-body"> <thead> <tr> <th><?php esc_html_e('Competitor', 'pixieclash') ?></th> <th rel="match<?php echo esc_attr($group['id']) ?>"><?php esc_html_e('M', 'pixieclash') ?></th> <th rel="win<?php echo esc_attr($group['id']) ?>"><?php esc_html_e('W', 'pixieclash') ?></th> <th rel="till<?php echo esc_attr($group['id']) ?>"><?php esc_html_e('T', 'pixieclash') ?></th> <th rel="loss<?php echo esc_attr($group['id']) ?>"><?php esc_html_e('L', 'pixieclash') ?></th> <th rel="point<?php echo esc_attr($group['id']) ?>"><?php esc_html_e('P', 'pixieclash') ?></th> </tr> </thead> <tbody> <?php if(!empty($competitors)): foreach($competitors as $competitor): ?> <tr> <td> <figure> <img src="<?php echo esc_url($competitor['logo']) ?>" alt="<?php echo esc_attr($competitor['name']) ?>"> </figure> <?php echo esc_attr($competitor['name']) ?> </td> <td rel="match<?php echo esc_attr($group['id']) ?>"><?php echo esc_attr($competitor['played']) ?></td> <td rel="win<?php echo esc_attr($group['id']) ?>"><?php echo esc_attr($competitor['wins']) ?></td> <td rel="till<?php echo esc_attr($group['id']) ?>"><?php echo esc_attr($competitor['till']) ?></td> <td rel="loss<?php echo esc_attr($group['id']) ?>"><?php echo esc_attr($competitor['losses']) ?></td> <td rel="point<?php echo esc_attr($group['id']) ?>"><?php echo esc_attr($competitor['points']) ?></td> </tr> <?php endforeach; else: ?> <tr> <td colspan="6"><?php esc_html_e('No competitors', 'pixieclash') ?></td> </tr> <?php endif; ?> </tbody> </table> </article> <?php $i ++; endforeach; endif; ?> </div> </section> 

Я попытался создать add_shorcode('table', 'name of this function'); с помощью add_shorcode('table', 'name of this function'); но это не сработало для меня.

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

Чтобы создать короткий код из ваших функций, вам необходимо использовать следующий код:

 function my_shortcode_function(){ if (get_option('pixieclash-standings-background') && get_option('pixieclash-standings-background') != null) { $background = esc_url(get_option('pixieclash-standings-background')) } else { $background = get_stylesheet_directory_uri() . '/images/standings-bg.jpg'; } $headTxt = get_option('pixieclash-standings-section-heading-top'); $bottomText = get_option('pixieclash-standings-section-heading-bottom'); if(!empty($headTxt)){ $text_header = '<h4>'. esc_attr($headTxt);.'</h4>'; } else { $text_header = ''; } if(!empty($bottomText)) { $text_footer = '<h3>'.esc_attr($bottomText); .'</h3>'; } else { $text_footer =''; } if(!empty($headTxt) || !empty($bottomText)){ $container = '<article class="head">'. $text_header . $text_footer.'</article>'; } $groups = pixieclash_standings_groups(); if(!empty($groups)) { $i = 1; $onlyOne = (count($groups) > 1 ) ? '' : 'onlyOne'; $competitors =''; foreach($groups as $group){ $competitors .= pixieclash_standings($group['id']); } } $data = ' <section id="standing" style="background-image: url("'.$background.'");"> <div class="container">'.$container.$competitors'</div> </section>'; return $data; } add_action('my-table-shortcode','pixieclash_standings_two'); 

Убедитесь, что вы выбрали уникальное имя для своего короткого кода.

Теперь для вывода короткого кода используйте следующее:

[my-table-shortcode]

Или, используйте do_shortcode() в файле PHP:

echo do_shortcode('[my-table-shortcode]');

PS: Обратите внимание, что у меня не было доступа к вашим функциям, я не смог точно проверить код. Вы можете проверить свой журнал ошибок на наличие проблем, если код не работает должным образом.

ОБНОВИТЬ

Существует очень простое решение, которое, я думаю, работает лучше в вашем случае, и оно использует ob_start() . Это будет записывать каждый вывод вашего контента и сохранять его в значении, которое будет возвращено позже. Взгляните на это:

 function my_content_shortcode(){ ob_start();?> <section id="standing" style="background-image: url('<?php echo (get_option('pixieclash-standings-background') && get_option('pixieclash-standings-background') != null) ? esc_url(get_option('pixieclash-standings-background')) : get_stylesheet_directory_uri() . '/images/standings-bg.jpg' ?>');"> <div class="container"> <?php $headTxt = get_option('pixieclash-standings-section-heading-top'); $bottomText = get_option('pixieclash-standings-section-heading-bottom'); ?> <?php if(!empty($headTxt) || !empty($bottomText)): ?> <article class="head"> <?php if(!empty($headTxt)): ?> <h4><?php echo esc_attr($headTxt); ?></h4> <?php endif; ?> <?php if(!empty($bottomText)): ?> <h3><?php echo esc_attr($bottomText); ?></h3> <?php endif; ?> </article> <?php endif; ?> <?php $groups = pixieclash_standings_groups(); if(!empty($groups)): $i = 1; $onlyOne = count($groups) > 1 ? '' : 'onlyOne'; foreach($groups as $group): $competitors = pixieclash_standings($group['id']); ?> <article class="table <?php echo ($i % 2 != 0) ? 'first' : 'second' ?> <?php echo $onlyOne ?>"> <h5 class="group-name"><?php esc_html_e('Group', 'pixieclash') ?> <?php echo esc_attr($group['name']) ?></h5> <table class="table-body"> <thead> <tr> <th><?php esc_html_e('Competitor', 'pixieclash') ?></th> <th rel="match<?php echo esc_attr($group['id']) ?>"><?php esc_html_e('M', 'pixieclash') ?></th> <th rel="win<?php echo esc_attr($group['id']) ?>"><?php esc_html_e('W', 'pixieclash') ?></th> <th rel="till<?php echo esc_attr($group['id']) ?>"><?php esc_html_e('T', 'pixieclash') ?></th> <th rel="loss<?php echo esc_attr($group['id']) ?>"><?php esc_html_e('L', 'pixieclash') ?></th> <th rel="point<?php echo esc_attr($group['id']) ?>"><?php esc_html_e('P', 'pixieclash') ?></th> </tr> </thead> <tbody> <?php if(!empty($competitors)): foreach($competitors as $competitor): ?> <tr> <td> <figure> <img src="<?php echo esc_url($competitor['logo']) ?>" alt="<?php echo esc_attr($competitor['name']) ?>"> </figure> <?php echo esc_attr($competitor['name']) ?> </td> <td rel="match<?php echo esc_attr($group['id']) ?>"><?php echo esc_attr($competitor['played']) ?></td> <td rel="win<?php echo esc_attr($group['id']) ?>"><?php echo esc_attr($competitor['wins']) ?></td> <td rel="till<?php echo esc_attr($group['id']) ?>"><?php echo esc_attr($competitor['till']) ?></td> <td rel="loss<?php echo esc_attr($group['id']) ?>"><?php echo esc_attr($competitor['losses']) ?></td> <td rel="point<?php echo esc_attr($group['id']) ?>"><?php echo esc_attr($competitor['points']) ?></td> </tr> <?php endforeach; else: ?> <tr> <td colspan="6"><?php esc_html_e('No competitors', 'pixieclash') ?></td> </tr> <?php endif; ?> </tbody> </table> </article> <?php $i ++; endforeach; endif; ?> </div> </section><?php $content = ob_get_contents(); ob_end_clean(); return $content; } add_action('my-table-shortcode','my_content_shortcode'); 

Теперь, используя [my-table-shortcode] в текстовом виджете или содержимом, будет точно действовать как ваш раздел, так же, как использовать echo do_shortcode('[my-table-shortcode]'); в файле php.