Himanshu Jain
Himanshu Jain

Reputation: 81

Need Help in Some Custom Modification to single.php in a WordPress theme

I am using Custom Field Plugin Pro. I created 3 Fields and 4 Sub Fields of that. Now when I am trying to add the code in single.php WordPress theme editor, then it breaking posts page CSS.

After figuring things I found that: when I post the PHP code of just 1 field code then the website doesn't break. But putting 2/3 breaking the website. Also, I found when I put 1-1 entry in each fields then the website works fine with all 3 fields code. I don't know why this is happening.

This is the code I am using in single.php

<!-- Show Custom Fiels---------------->
<div id="Custom_Fields" class="sbox fixidtab">
<style>
table, th, td {
border: 1px solid white;
border-collapse: collapse;
background:black;
}
th, td {
padding: 5px;
text-align: center;
}
</style>
<?php
// Field 1 -----
if( have_rows('Field1') ):?>
<div class="custom_fields" style="overflow-x:auto;">
<h2><?php _d('Type : Name'); ?></h2>

<table style="width:100%">
    <thead>
        <tr>
            <th>Name</th>
            <th>Type 1</th>
            <th>Type 2</th>
            <th>Type 3</th>
            <th>Type 4</th>
        </tr>
    </thead>
<tbody>
<?php while ( have_rows('F1') ) : the_row();
        $name_F1 = get_sub_field('name');
        $type_F1 = get_sub_field('type');
        $link_F1 = get_sub_field('link');
        $link_F1_full = "<a href=".$link_F1." target='_blank'>Visit Now</a>";
        $language_F1 = get_sub_field('language');
?>
    <tr>
        <td><?php echo $name_F1; ?></td>
        <td><?php echo $type_F1; ?></td>
        <td><?php echo $link_F1_full; ?></td>
        <td><?php echo $language_F1; ?></td>
    </tr>
<?php
    endwhile;
?>
</tbody>
</table>
<?php
    //endwhile;

else :

    // no rows found

endif;

?>
</div>
<?php
// Field 2 -----
if( have_rows('Field 2') ):?>
<div class="custom_fields" style="overflow-x:auto;">
<h2><?php _d('Type : Name'); ?></h2>

<table style="width:100%">
    <thead>
        <tr>
            <th>Name</th>
            <th>Type 1</th>
            <th>Type 2</th>
            <th>Type 3</th>
            <th>Type 4</th>
        </tr>
    </thead>
<tbody>
<?php while ( have_rows('F2') ) : the_row();
        $name_F2 = get_sub_field('name');
        $type_F2 = get_sub_field('type');
        $link_F2 = get_sub_field('link');
        $link_F2_full = "<a href=".$link_F2." target='_blank'>Visit Now</a>";
        $language_F2 = get_sub_field('language');
?>
    <tr>
        <td><?php echo $name_F2; ?></td>
        <td><?php echo $type_F2; ?></td>
        <td><?php echo $link_F2_full; ?></td>
        <td><?php echo $language_F2; ?></td>
    </tr>
<?php
    endwhile;
?>
</tbody>
</table>
<?php
    //endwhile;

else :

    // no rows found

endif;

?>
</div>
<?php
// Field 3 -----
if( have_rows('Field 3') ):?>
<div class="custom_fields" style="overflow-x:auto;">
<h2><?php _d('Type : Name'); ?></h2>

<table style="width:100%">
    <thead>
        <tr>
            <th>Name</th>
            <th>Type 1</th>
            <th>Type 2</th>
            <th>Type 3</th>
            <th>Type 4</th>
        </tr>
    </thead>
<tbody>
<?php while ( have_rows('F3') ) : the_row();
        $name_F3 = get_sub_field('name');
        $type_F3 = get_sub_field('type');
        $link_F3 = get_sub_field('link');
        $link_F3_full = "<a href=".$link_F3." target='_blank'>Visit Now</a>";
        $language_F3 = get_sub_field('language');
?>
    <tr>
        <td><?php echo $name_F3; ?></td>
        <td><?php echo $type_F3; ?></td>
        <td><?php echo $link_F3_full; ?></td>
        <td><?php echo $language_F3; ?></td>
    </tr>
<?php
    endwhile;
?>
</tbody>
</table>
<?php
    //endwhile;

else :

    // no rows found

endif;

?>
</div>
</div>

If I put just code for field 1 then website is absolutely fine:

<!-- Show Custom Fiels---------------->
<div id="Custom_Fields" class="sbox fixidtab">
<style>
table, th, td {
border: 1px solid white;
border-collapse: collapse;
background:black;
}
th, td {
padding: 5px;
text-align: center;
}
</style>
<?php
// Field 1 -----
if( have_rows('Field1') ):?>
<div class="custom_fields" style="overflow-x:auto;">
<h2><?php _d('Type : Name'); ?></h2>

<table style="width:100%">
    <thead>
        <tr>
            <th>Name</th>
            <th>Type 1</th>
            <th>Type 2</th>
            <th>Type 3</th>
            <th>Type 4</th>
        </tr>
    </thead>
<tbody>
<?php while ( have_rows('F1') ) : the_row();
        $name_F1 = get_sub_field('name');
        $type_F1 = get_sub_field('type');
        $link_F1 = get_sub_field('link');
        $link_F1_full = "<a href=".$link_F1." target='_blank'>Visit Now</a>";
        $language_F1 = get_sub_field('language');
?>
    <tr>
        <td><?php echo $name_F1; ?></td>
        <td><?php echo $type_F1; ?></td>
        <td><?php echo $link_F1_full; ?></td>
        <td><?php echo $language_F1; ?></td>
    </tr>
<?php
    endwhile;
?>
</tbody>
</table>
<?php
    //endwhile;

else :

    // no rows found

endif;

?>
</div>
</div>

Upvotes: 1

Views: 54

Answers (1)

Robin Gillitzer
Robin Gillitzer

Reputation: 1612

Be careful with the names of your fields. I think your names are wrong. Then your div opens within your if statement but closes after your if statement and destroys your html structure if the statement is false. By the way, here you can read about the usage of repeater fields: https://www.advancedcustomfields.com/resources/repeater/

Look at this example:

<?php
// Field 1 -----
if( have_rows('F1') ): // i think it has to be F1 instead of Field1 here? 
?>
<div class="custom_fields" style="overflow-x:auto;">
<h2><?php _d('Type : Name'); ?></h2>

<table style="width:100%">
    <thead>
        <tr>
            <th>Name</th>
            <th>Type 1</th>
            <th>Type 2</th>
            <th>Type 3</th>
            <th>Type 4</th>
        </tr>
    </thead>
<tbody>
<?php while ( have_rows('F1') ) : the_row();
        $name_F1 = get_sub_field('name');
        $type_F1 = get_sub_field('type');
        $link_F1 = get_sub_field('link');
        $link_F1_full = "<a href=".$link_F1." target='_blank'>Visit Now</a>";
        $language_F1 = get_sub_field('language');
?>
    <tr>
        <td><?php echo $name_F1; ?></td>
        <td><?php echo $type_F1; ?></td>
        <td><?php echo $link_F1_full; ?></td>
        <td><?php echo $language_F1; ?></td>
    </tr>
<?php
    endwhile;
?>
</tbody>
</table>
</div><!-- RIGHT HERE -->
<?php
    //endwhile;
else:

    // no rows found
endif;

?>
<!--</div> WRONG HERE -->

Upvotes: 1

Related Questions