0

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

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

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.