Rohitashv Singhal
Rohitashv Singhal

Reputation: 4557

wordpress shortcode content is showing two times

I am developing a shortcode for wordpress.

using the shortcode in word file as :

add_shortcode('LATEST_NOT_ROHIT','latest_notification_rohit');
function latest_notification_rohit()
{
    include("shortcode.php");
}

in shortcode.php file the code is as follow :

<div class='alert alert-info'>Latest Notifications</div>

<?php
global $wpdb;
$select_qury = "select * from `ln_category`";
$select_cat = $wpdb->get_results($select_qury);
foreach($select_cat as $select_cat)
{
    echo "<h4>Latest Notifications For <span style='color:#800000'>".$select_cat->category."</span></h4>";
    $cat_id = $select_cat->id;

    $select_qury2 = "select * from `ln_notification` where `cat_id`='$cat_id'";
    $select_notification = $wpdb->get_results($select_qury2);
?>
<table class="responsive display table table-bordered">
<tr><th>Sr No</th><th>Organisation</th><th>Post Name</th><th>No of Post</th><th>Qualification</th><th>Fees</th><th>Adervst Date</th><th>Application Start Date</th>
<th>Application Last Date</th><th>Status</th></tr>
<?php
$i=1;
foreach($select_notification as $select_notification)
{
    $current_date = date('Y-m-d');
    $start_date = $select_notification->start_date;
    $last_date = $select_notification->last_date;
    if($current_date < $start_date)
    {
        $remark = "<span style='color:green'>Form is about to start</span>";
    }
    elseif($current_date > $last_date)
    {
        $remark ="<span style='color:red'>Last Date is over</span>";
    }
    else
    {
        $remark = "Application is going on";
    }
    echo "<tr><td>$i</td><td>".$select_notification->organisation."</td><td>".$select_notification->post_name."</td><td>".$select_notification->no_of_post.
    "</td><td>".$select_notification->qualification."</td><td>".$select_notification->fees."</td><td>".date('d-M-Y',strtotime($select_notification->adv_date))."</td><td>".date('d-M-Y',strtotime($start_date))."</td><td>".date('d-M-Y',strtotime($last_date))."</td><td>$remark</td></tr>";
    $i++;
}
?>
</table>
<?php
}
?>

but when I am running this code in wordpress page/post then the content is displayed two times. The demo is at the front end

http://singhalrohitashv.com/latest-notification/

How can I resolve this problem ???

Upvotes: 0

Views: 2267

Answers (3)

Tristup
Tristup

Reputation: 3663

I think problem is in your code, you have used two foreach loop.

$select_qury = "select * from `ln_category`"; 
$select_cat = $wpdb->get_results($select_qury);

Possibly it returning two category which let first foreach executing two time. And as your table just before the second foreach loop, even it has no record it will print second table. Please put condition to print the table if record is there.

Hope this help you to solve the issue.

Upvotes: 0

Purvik Dhorajiya
Purvik Dhorajiya

Reputation: 4880

add_shortcode('LATEST_NOT_ROHIT','latest_notification_rohit');
function latest_notification_rohit()
{
    ob_start();
    require_once("shortcode.php");
    $data = ob_get_contents();
    ob_end_clean();
    return $data;
}

Would you please try above code?

Upvotes: 2

veggito
veggito

Reputation: 258

You are probably calling the latest_notification_rohit() function on one of the following files :

  • Header.php for the page
  • Page template file

You might also be calling the content function twice for that page. Doing a search all for the_content() or latest_notification_rohit() might show you the places where the code is being called multiple times.

Upvotes: 0

Related Questions