Site logo

Archived topic

Hook Elements, php and html

5 replies · Started by igniteperth on November 28, 2022

Viewing posts 1–6 of 6

Hi Folks, I am trying to generate a custom nav for custom post types that displays after content (generate_after_content) using html and php in a Hook Element.

The php echo statement for next_post_link will not display inside the html div it is written in.

Can you please clarify how Hook Elements render the code inside, or help me understand what I am doing wrong?

<div class="pagination-wrapper">

<!-- PREVIOUS POST -->
        <div class="prev-post">
	     <?php echo $previous_post_link->ID;?>
	</div>         
  <!-- end previous -->
  <!-- NEXT POST -->
	<div class="next-post">
	    <?php echo $next_post_link->ID;?>
	</div>
  <!-- end next -->
	
</div>

Hi there,

The Hooks that GP provides in the Elements module don't do anything with the content you add inside them. They're just like a placeholder that you can inject code/content into.

I assume the function that is generating then $previous_post_link is already returning its results to the content hence it shows outside of your HTML.

Can i see all of the code ?

This is the Hook Element

<?php   if (isset($_POST['data'])){
            $post_id = $_POST['data'];
        }else{
            $post_id = "";
        }
        $wp_query->is_single = true;

        global $post;
        $post = get_post($post_id);
				
        $next_post_link = next_post_link('%link');
        $previous_post_link = previous_post_link('%link');

	$prev_post = get_previous_post();
	$next_post = get_next_post();
?>

<div class="pagination-wrapper">
<!-- PREVIOUS POST -->
        <div class="prev-post">
	 <?php echo $previous_post_link->ID;?>
  	</div>         
  <!-- end previous -->
  <!-- NEXT POST -->
	<div class="next-post">
	  <?php echo $next_post_link->ID;?>
	</div>
  <!-- end next -->
	
</div>

and this is what it creates:

<div class="inside-article">

  <div class="entry-content"></div>

//HOOK IS FROM HERE (generate_after_content) 
  <a href="https://dev.fabmarion.com.au/projects/nola-avenue-scarborough/" rel="next">Nola Avenue, Scarborough</a>
  <a href="https://dev.fabmarion.com.au/projects/kirwin-street/" rel="prev">Kirwin Street</a>
  <div class="pagination-wrapper">

    <!-- PREVIOUS POST -->
    <div class="prev-post"></div>         
    <!-- end previous -->

    <!-- NEXT POST -->
    <div class="next-post"></div>
    <!-- end next -->

  </div>
//TO HERE

</div>

I am trying to understand why the php renders outside of the html it is placed in. Any pointers appreciated.

The links are being output here:


$next_post_link = next_post_link('%link');
$previous_post_link = previous_post_link('%link');

Both the next_post_link and previous_post_link display the links.
See the codex for more info:

https://developer.wordpress.org/reference/functions/next_post_link/

So you could just do this:


<div class="pagination-wrapper">
  <!-- PREVIOUS POST -->
  <div class="prev-post">
     <?php previous_post_link(); ?> 	
  </div>         
  <!-- end previous -->
  <!-- NEXT POST -->
  <div class="next-post">
    <?php next_post_link(); ?>
  </div>
  <!-- end next -->
</div>

I am such a Muppet! I mistook next_post_link for get_...

TY!

:) Glad to be of help

This archived topic is closed to new replies.