最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

permalinks - When I click on a single post my browser goes to about:blank#blocked and the page is white

matteradmin8PV0评论

I have a single.php template, I also have index.php but it's not reverting to that, its just saying

'about:blank#blocked'

in the address bar and displaying nothing on the page.

I've tried changing echo the_permalink() to just the_permalink(), I've saved my permalink settings to post name. I've also deactivated all plugins. Any ideas?

My archive.php loop is as follows:

if (have_posts()) :
   while (have_posts()) :
    ?>
    <div class="card container mb-3">
        <a href="<?php
            // this conditional outputs the permalink for programmes and events, and an external url to resources
            if (is_post_type_archive( $resources )) {
                echo 'https://' .  get_field('website');
            } else {
                echo the_permalink();
            }
        ?>">
        <div class="card-body row"><?php      
        the_post();

            ?>
            <div class="col-sm img-fluid"><?php 
                the_post_thumbnail('medium');
            ?></div>
            <div class="col-sm p-2 m-0"> 
            <h2 class="card-title text-center"><?php the_title(); ?></h2>
            </a>
            <?php



// This section gets any custom fields and displays them if they exist

    $fields = get_fields();
            if( $fields ): ?>
                <ul>
                    <?php foreach( $fields as $name => $value ): ?>
                    <li><?php
                    echo $value;
                    ?></li>
                    <?php endforeach; ?>
                </ul>
            <?php 
            endif;          
            ?><p class="card-text"><?php the_excerpt(); ?></p>
            </div>
            </div> <!-- card body -->
    </div><!-- card -->
            <?php

    endwhile;
endif;

?>

Thanks

I have a single.php template, I also have index.php but it's not reverting to that, its just saying

'about:blank#blocked'

in the address bar and displaying nothing on the page.

I've tried changing echo the_permalink() to just the_permalink(), I've saved my permalink settings to post name. I've also deactivated all plugins. Any ideas?

My archive.php loop is as follows:

if (have_posts()) :
   while (have_posts()) :
    ?>
    <div class="card container mb-3">
        <a href="<?php
            // this conditional outputs the permalink for programmes and events, and an external url to resources
            if (is_post_type_archive( $resources )) {
                echo 'https://' .  get_field('website');
            } else {
                echo the_permalink();
            }
        ?>">
        <div class="card-body row"><?php      
        the_post();

            ?>
            <div class="col-sm img-fluid"><?php 
                the_post_thumbnail('medium');
            ?></div>
            <div class="col-sm p-2 m-0"> 
            <h2 class="card-title text-center"><?php the_title(); ?></h2>
            </a>
            <?php



// This section gets any custom fields and displays them if they exist

    $fields = get_fields();
            if( $fields ): ?>
                <ul>
                    <?php foreach( $fields as $name => $value ): ?>
                    <li><?php
                    echo $value;
                    ?></li>
                    <?php endforeach; ?>
                </ul>
            <?php 
            endif;          
            ?><p class="card-text"><?php the_excerpt(); ?></p>
            </div>
            </div> <!-- card body -->
    </div><!-- card -->
            <?php

    endwhile;
endif;

?>

Thanks

Share Improve this question edited Apr 8, 2019 at 19:11 JakePowell asked Apr 8, 2019 at 18:38 JakePowellJakePowell 431 silver badge10 bronze badges 3
  • try echo "<pre>";print_r(the_permalink()); echo "</pre>" – Vishwa Commented Apr 9, 2019 at 5:42
  • No change with this. If I enter the URL manually (e.g tyc.local/programme/TYC_fridays) it takes me to index.php – JakePowell Commented Apr 10, 2019 at 10:04
  • Try turning on error reporting or look in your logs and see what the actual error is – rudtek Commented Apr 17, 2019 at 18:00
Add a comment  | 

1 Answer 1

Reset to default 1

the_post() should be called at the start of the while loop (or The Loop). I.e. Before you call functions like the_permalink() and the_title() which point to the current item in The Loop.

So your while loop should start like so: (and remove the other the_post(); in your code)

while ( have_posts() ) : the_post();

And the browser sent you to about:blank#blocked most likely because the a element had an invalid href (URL) value: https:// as in:

<a href="https://">Example</a>

And it's very likely because the get_field('website') returned an empty value; for example, because of a wrong post data (ID/object).

So this part:

if (is_post_type_archive( $resources )) {
    echo 'https://' .  get_field('website');
}

could be rewritten to this:

if (is_post_type_archive( $resources )) {
    if ( $url = get_field('website') ) {
        echo 'https://' . $url;
    } else {
        the_permalink();
    }
}

But I'm assuming the website field doesn't start with the protocol (e.g. https:// or http://).

And there's no need to echo the_permalink() because the function already echoes the permalink/URL.

Post a comment

comment list (0)

  1. No comments so far