我正在尝试将模板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文件来完成,而不是在主主题中的此模板文件中完成,但是我只是不知道如何为此编写函数。
将对此表示感谢!
答案 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>