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


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      

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

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

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




  • try echo "<pre>";print_r(the_permalink()); echo "</pre>"
    – Vishwa
    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
    Apr 10, 2019 at 10:04
  • Try turning on error reporting or look in your logs and see what the actual error is
    – rudtek
    Apr 17, 2019 at 18:00

1 Answer 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 {

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.