Как обернуть это содержимое в мой шорткод? Это содержимое, которое находится в файле php шаблона. - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь обернуть содержимое файла 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 ]

1 голос
/ 07 июня 2019

Создайте пользовательскую функцию Shortcode в вашем файле Wordpress functions.php.

Не совсем уверен в том, что вы пытаетесь сделать, но, возможно, это поможет ...

В WYSIWYG:

[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');
0 голосов
/ 10 мая 2019

Поскольку вы уже редактируете 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>
...