如何将这些内容包装在我的简码中?它的内容位于模板php文件中

时间:2019-05-10 16:46:16

标签: php wordpress shortcode

我正在尝试将模板php文件的内容包装在带有结束标记的简码内。短代码如下所示:

[hide for="!administrator, !subscriber"]'content goes here??'[/hide]    

此代码为除了两个用户角色的管理员和订户之外的任何人隐藏内容。

我的问题是,如何将简码包裹在整个列表项元素上?

需要包装在上面提供的短代码中的代码是:

<?php
/**
 * `Call now` quick action.
 *
 * @since 2.0
 */

if ( ! ( $phone = $listing->get_field('phone') ) ) {
    return;
}

$link = sprintf( 'tel:%s', $phone );
?>

<li id="<?php echo esc_attr( $action['id'] ) ?>" class="<?php echo esc_attr( $action['class'] ) ?>">
    <a href="<?php echo esc_url( $link ) ?>" rel="nofollow">
        <?php echo c27()->get_icon_markup( $action['icon'] ) ?>
        <span><?php echo $action['label'] ?></span>
    </a>
</li>

我尝试过用各种方式包装它,但是这使页面无法加载。

我尝试过这样的代码:

?php echo do_shortcode('[hide for="!administrator, !subscriber"]'All the content is put inside here'[/hide]');

但是它不起作用,最终看起来非常混乱。我不是任何类型的程序员,所以我觉得这很困难,但我认为这是可能的。我也知道这样的事情可能应该通过我的子主题中的functions.php文件来完成,而不是在主主题中的此模板文件中完成,但是我只是不知道如何为此编写函数。

将对此表示感谢!

2 个答案:

答案 0 :(得分:1)

在Wordpress functions.php文件中创建自定义的Shortcode函数。

不确定您要做什么,但这也许有帮助...

在所见即所得中:

[hide] Your content...[/hide]    

在PHP中:

<?= do_shortcode('[hide]'.$yourcontent.'[/hide]' );?>

在functions.php中

function hide_func($atts, $content=""){
    return '<span style="display:none">'.$content.'</span>';
}
add_shortcode( 'hide', 'hide_func');

答案 1 :(得分:0)

由于您已经在编辑PHP,因此不需要使用隐藏任何内容的短代码。您只需检查当前用户角色即可。

<?php
/**
 * `Call now` quick action.
 *
 * @since 2.0
 */

if ( ! ( $phone = $listing->get_field('phone') ) )
    return;

// if you want to not display anything for guests
if ( !is_user_logged_in() )
    return;

// if you want to not display anything for anyone but administrator or subscriber
$user = wp_get_current_user();
if ( !in_array( 'administrator', (array) $user->roles ) && !in_array( 'subscriber', (array) $user->roles ) ) 
    return;

$link = sprintf( 'tel:%s', $phone );
?>

<li id="<?php echo esc_attr( $action['id'] ) ?>" class="<?php echo esc_attr( $action['class'] ) ?>">
    <a href="<?php echo esc_url( $link ) ?>" rel="nofollow">
        <?php echo c27()->get_icon_markup( $action['icon'] ) ?>
        <span><?php echo $action['label'] ?></span>
    </a>
</li>