admin管理员组

文章数量:1122846

I have a server side rendered block that lists cards with page thumbnails and the title wrapped in a link. I want that the link only gets a href when I'm in the frontend so I avoid clicking on the cards by mistake in the backend and getting redirected to the card page. Here is my code:

$link = is_admin() ? ""
        : " href='" . get_permalink($post->ID) . "'";
              
echo <<<CPTItem
    <div class="cpt-list-item"><a class="cpt-list-item__link" $link>
CPTItem;

Unfortunately is_admin() is returning false in the backend in the block itself. I really don't know why, the only thing I can think about is that it's because the block is server side rendered. Is there a way around?

I have a server side rendered block that lists cards with page thumbnails and the title wrapped in a link. I want that the link only gets a href when I'm in the frontend so I avoid clicking on the cards by mistake in the backend and getting redirected to the card page. Here is my code:

$link = is_admin() ? ""
        : " href='" . get_permalink($post->ID) . "'";
              
echo <<<CPTItem
    <div class="cpt-list-item"><a class="cpt-list-item__link" $link>
CPTItem;

Unfortunately is_admin() is returning false in the backend in the block itself. I really don't know why, the only thing I can think about is that it's because the block is server side rendered. Is there a way around?

Share Improve this question edited Apr 30, 2023 at 9:16 BonisTech asked Jul 24, 2019 at 12:51 BonisTechBonisTech 2721 silver badge9 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 15

If you have a server side rendered block in the backend, it is rendered via the REST API endpoint /wp/v2/block-renderer/xyz/blockname. This endpoint calls your render function. In the frontend the render function is called directly. The function is_admin() checks if a backend page was requested. In a REST API Request is no backend page, so the function returns false on REST API requests.

Instead you can check, if it is a REST API request via:

if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {
    return 'Backend';
} else {
    return 'Frontend';
}

Update 2024:

Since WordPress 6.5 you can use the function wp_is_serving_rest_request() which wraps this checks into a function.

if ( wp_is_serving_rest_request() ) {
    return 'Backend';
} else {
    return 'Frontend';
}

本文标签: phpisadmin returning false in backend in server side rendered block