WP-包含html和php(ACF变量)混合的简码

时间:2018-08-17 23:33:01

标签: wordpress advanced-custom-fields shortcode

我正在尝试创建同时包含html和php的WP短代码。例如,类似的东西(不起作用):

function my_first_shortcode() {
    $content = <<<EOT
    <h1>Some title</h1>
    <p><?php the_field('description'); ?></p>
EOT;
return $content; 
} 
add_shortcode('my_shortcode', 'my_first_shortcode');

the_field('name_of_field');通常会输出指定变量/字段(高级自定义字段)的内容。

HEREDOC的方法是否正确?如果是这样,我该怎么办?如果我可以将变量传递给短代码,那也很好。

谢谢

3 个答案:

答案 0 :(得分:1)

我总是喜欢对我的短代码使用输出缓冲,例如下面的示例。

function my_first_shortcode() {
    ob_start(); ?>
    <h1>Some title</h1>
    <p><?php echo the_field('description'); ?></p>
    <?php
    return ob_get_contents();
} 
add_shortcode('my_shortcode', 'my_first_shortcode');

答案 1 :(得分:1)

首先,您不能在HEREDOC中编写PHP标签。 您可以这样使用它:

$the_field = 'the_field';
$content = <<<EOT
<h1>Some title</h1>
<p>{$the_field('description')}</p>
EOT;

为了将属性传递给简码,这非常简单。 例如,我们有简码:

  

[my_shortcode att_1 =“ some_value” att_2 =“ some_value”]

function my_first_shortcode($atts)
{
    $att_1 = $atts['att_1'];
    $att_2 = $atts['att_2'];
}
add_shortcode('my_shortcode', 'my_first_shortcode');

答案 2 :(得分:0)

add_shortcode('location_start_your_application_group', 'start_your_application_group');

function start_your_application_group() {
    ob_start();

    $start_your_application_group = '';
    $start_your_application_group .= '<section class="start-your-application">';
     if ( have_rows( 'start_your_application_group', 'option' ) ) : 
         while ( have_rows( 'start_your_application_group', 'option' ) ) : the_row(); 
           $heading = get_sub_field( 'heading' );
             $content = get_sub_field( 'content' );

             if ( $heading !== '' ) {
                    $start_your_application_group .= '<h3 class="start-your-application__heading">' . $heading . '</h3>';
             }
             if ( $content !== '' ) {
                $start_your_application_group .= '<div class="start-your-application__content">' . $content . '</div>';
             }

             $image = get_sub_field( 'image' );
             if ( $image ) { 
                $start_your_application_group .= '<div class="start-your-application__image-container"><img class="start-your-application__image" src="' . esc_url($image['url']) .'" alt="' . $image['alt'] . '" /></div>';
            } 
        endwhile;
    endif;

    $start_your_application_group .= '</section>';
    $start_your_application_group = ob_get_clean();

    return $start_your_application_group;
}