PHP Keeps Duplicating Table Elements in WordPress Theme - wordpress

I'm working on this test site, which is a WordPress website (using version 5.5) and using the Canvas WooTheme. The front page of it is supposed to display today's calendar events, which are provided by the WordPress plugin, Events Manager.
What I would like for them to do is display, such as this events page (and the screenshot below - seen in this screenshot), does. Instead, the code below somehow has the rest of the template (including the sidebar) sucked into the table, continuing to duplicate table rows and columns into itself (as seen from this screenshot).
The code it shoots out into Firebug is the following:
<table cellspacing="0" cellpadding="0" id="current-events"><tbody><tr><td class="startdate_cost_td">
<span class="start_time"><table cellspacing="0" cellpadding="0" id="current-events"><tbody><tr>
<td class="startdate_cost_td">
<span class="start_time">12:00 AM</span><br>
<span class="cost">Free</span>
</td>
<td class="event_image"> <img src="../../../wp-includes/images/default_img.jpg"></td>
<td class="event_title">Sex Addicts Anonymous meeting<br>
<i><span class="location_name"># No location listed</span></i>
<div id="read_more_wrapper">
<img src="../../../wp-includes/images/little_pink_arrow.jpg"><a class="pink_link" href="http://testbuzz.illinimedia.com/events/sex-addicts-anonymous-meeting-90">READ MORE</a></div></td></tr>
<!--12:00 AM</span><br/><span class='cost'>Free</span></td><td class='event_image'><img src='../../../wp-includes/images/default_img.jpg' /></td><td class='event_title'>Sex Addicts Anonymous meeting<br/><i><span class='location_name'>#No location listed</span></i><br />Mind, body, & spirit<div id='read_more_wrapper'><img src='../../../wp-includes/images/little_pink_arrow.jpg' /><a href='http://testbuzz.illinimedia.com/events/sex-addicts-anonymous-meeting-90' class='pink_link'>READ MORE</a></td></tr></div><tr><td class='startdate_cost_td'>
<span class='start_time'>-->
<tr>
<td class="startdate_cost_td">
<span class="start_time">8:30 AM</span><br>
<span class="cost">Free</span>
</td>
<td class="event_image"><img alt=""Inside India" with Larry Kanfer" src="http://testbuzz.illinimedia.com/wp-content/uploads/locations-pics/event-35214.jpg"> </td>
<td class="event_title">“Inside India” with Larry Kanfer<br>
<i><span class="location_name"># Alice Campbell Alumni Center</span></i>
<div id="read_more_wrapper">
<img src="../../../wp-includes/images/little_pink_arrow.jpg"><a class="pink_link" href="http://testbuzz.illinimedia.com/events/inside-india-with-larry-kanfer-31">READ MORE</a></div></td></tr>
......more events similar to this......
<div class="fix"></div>
<div class="nav-entries">
<span class="nav-prev icon fl">Older posts</span> <div class="fix"></div>
</div>
<!-- /#main -->
<div id="sidebar">
<div class="widget widget_woo_search" id="woo_search-3"><div class="search_main">
<form action="http://testbuzz.illinimedia.com/" class="searchform" method="get">
<input type="text" onblur="if (this.value == '') {this.value = 'Search...';}" onfocus="if (this.value == 'Search...') {this.value = '';}" value="Search..." name="s" class="field s">
<input type="image" name="submit" class="submit" alt="Search" src="http://testbuzz.illinimedia.com/wp-content/themes/canvas/images/ico-search.png">
</form>
<div class="fix"></div>
</div>
.... the rest of the content stuck .....
</span></td></tr></tbody></table>
Below is the code I stuck into our magazine template within our child theme, template-magazine.php, which is causing the problem:
<?php
$page = ( !empty($_REQUEST['page']) && is_numeric($_REQUEST['page']) )? $_REQUEST['page'] : 1;
$args = array(
'limit' => 10,
'scope' => 'today',
'pagination' => 1
);
if (isset($_REQUEST['c'])) {
$args['category'] = $_REQUEST['c'];
$args['scope'] = 'future';
}
$args['offset'] = $args['limit'] * ($page-1);
$events = em_get_events_array($args);
$size = sizeof($events)-1;
echo "<h2 id='headding'class='title'>Today's Events</h2>";
echo "<table cellpadding='0' cellspacing='0' id='current-events' >";
for ($i=0;$i<$size;$i++) {
echo "<tr><td class='startdate_cost_td'>
<span class='start_time'>" . $events[$i][0] .
"</span><br/><span class='cost'>" . $events[$i][7] .
"</span></td><td class='event_image'>";
if ($events[$i][8] == '') {
echo "<img src='../../../wp-includes/images/default_img.jpg' />";
}
else {
echo $events[$i][9];
}
echo "</td><td class='event_title'>" . $events[$i][10] .
"<br/><i><span class='location_name'>#". $events[$i][11] .
"</span></i><br />" .$events[$i][12] .
"<div id='read_more_wrapper'>" .
"<img src='../../../wp-includes/images/little_pink_arrow.jpg' /><a href='" . $events[$i][13] . "' class='pink_link'>READ MORE</a></td></tr>" .
"</div>";
}
echo "</table>";
$last_index = count($events) - 1;
echo $events[$last_index][0];
?>
I made sure the PHP code above was the cause of the main problems, by removing the code itself. That seems to do the trick! When I tried placing this code in different parts of the template-magazine.php file, it repeated the same results. When I also moved this to the functions.php file in our child theme, it simply made everything else go further down and expand to the whole width of the browser. How do I get rid of the looping in the code, having all of the side content being sucked into the table being created?
UPDATE: I commented out the above PHP code using HTML tags, duplicating the events and commenting out the table elements, which we would like to have show on the page. Below is the screenshot of what it looks like: https://docs.google.com/open?id=0B2UC67NQiW2yalhMSGxra0FFWGM and the code that's showing up in the picture below (I didn't want to paste in the code because it would've been very long:

It ended up being that it seemed to be reading in the Event Preview settings, which I created within the plugin. All I needed to do was simply create a for loop, reading in each of the events for that specific page, blocking out the rest of the PHP code above. The following is the code used to read in the events:
for ($i=0;$i<$size;$i++) {
echo $events[$i][0];
}
Hopefully this helps someone using the Events Manager plugin.

Related

In wpgeodirectory add event how to make mandatory the field to connect event with place (business link)

The business link (Place) is not mandatory when inserting a new event. How to make this mandatory. Every event should be connected with a place !
Visuals
Add class "required_field" and * in the respective Business Link row by replacing this at plugins\geodir_event_manager\gdevents_template_functions.php line 1035
<div id="geodir_link_business_row" class="geodir_form_row clearfix">
<label>
<?php _e( 'Link Business', 'geodirevents' );?>
</label>
with
<div id="geodir_link_business_row" class="required_field geodir_form_row clearfix">
<label>
<?php _e( 'Link Business', 'geodirevents' );?>
<span>*</span>
</label>
in the same function replace also
<input type="button" id="geodir_link_business_autofill" class="geodir_button button-primary" value="<?php echo EVENT_FILL_IN_BUSINESS_DETAILS; style="float:none;margin-left:30%;" ?>"
</div>
with this
<input type="button" id="geodir_link_business_autofill" class="geodir_button button-primary" value="<?php echo EVENT_FILL_IN_BUSINESS_DETAILS; ?>" style="float:none;margin-left:30%;" />
<span class="geodir_message_note"><?php _e('Basic HTML tags are allowed', 'geodirevents');?></span>
<span class="geodir_message_error"> <?php _e("This field is required","gdevents") ?> </span>
</div>
Functional: prevent form from submit
a. deactivate listing_validation.min.js and enable listing_validation.js in
\plugins\geodirectory\geodirectory_template_tags.php line 198
i.e. change this
wp_enqueue_script('geodirectory-listing-validation-script', geodir_plugin_url() . '/geodirectory-assets/js/listing_validation.min.js#asyncload');
to this
wp_enqueue_script('geodirectory-listing-validation-script', geodir_plugin_url() . '/geodirectory-assets/js/listing_validation.js#asyncload');
b. add the check in plugins\geodirectory\geodirectory-assets\js\listing_validation.jsline 159 (validate_form())
if (jQuery('#geodir_link_business')[0].selectedIndex == 0) {
jQuery('#geodir_link_business').closest('.required_field').find('.geodir_message_error')[0].style.display = "inline";
is_validate = false;
} else {
jQuery('#geodir_link_business').closest('.required_field').find('.geodir_message_error')[0].style.display = "";
}

How do I filter out certain results based on the value of a faceted Attribute with Algolia Search for Wordpress?

I'm trying to filter out some results in an Algolia faceted search within Wordpress. I want to show only certain results to a user logged in with a specific WP user role. Here is what I have in my results now and it's not returning any result, but the pagination for the search does show up, so I know the script is running without errors. I also do not have any console errors.
This is my current script from instantsearch.php:
<script type="text/html" id="tmpl-instantsearch-hit">
<article itemtype="http://schema.org/Article">
<?php
// Get data
$post_title = '{{{ data._highlightResult.post_title.value }}}';
$aim_of_work = '{{{ data._snippetResult.aim_of_organisations_work.value }}}';
$organisation_region = '{{{ data._highlightResult.organisation_region.value }}}';
?>
<?php
// If user is limited to Americas and the Carribbean
if( in_array('americas', $user_info->roles) ) {
if($organisation_region == 'Americas and the Caribbean') { ?>
<!-- Print Americas Results -->
<div class="ais-hits--content">
<h3 itemprop="name headline"><?php echo $post_title; ?></h3>
<div class="ais-hits--tags">
<# for (var index in data.taxonomies.post_tag) { #>
<span class="ais-hits--tag">{{{ data._highlightResult.taxonomies.post_tag[index].value }}}</span>
<# } #>
</div>
<div class="excerpt">
<p>
<?php echo $aim_of_work; ?>...
</p>
<p class="text-small">Region: <?php echo $organisation_region; ?></p>
</div>
</div>
<div class="ais-clearfix"></div>
<?php } //END if
} else { ?>
<!-- Print All Results -->
<div class="ais-hits--content">
<h3 itemprop="name headline"><?php echo $post_title; ?></h3>
<div class="ais-hits--tags">
<# for (var index in data.taxonomies.post_tag) { #>
<span class="ais-hits--tag">{{{ data._highlightResult.taxonomies.post_tag[index].value }}}</span>
<# } #>
</div>
<div class="excerpt">
<p>
<?php echo $aim_of_work; ?>...
</p>
<p class="text-small">Region: <?php echo $organisation_region; ?></p>
</div>
</div>
<div class="ais-clearfix"></div>
<?php } // END if ?>
</article>
</script>
My concern is that my conditional is not working: if($organisation_region == 'Americas and the Caribbean')
I feel like there is a better way to do this, but I would take any way that works right now.
/**-- UPDATE --*/
Here is my facet widget:
/* Region refinement widget */
search.addWidget(
instantsearch.widgets.menu({
container: '#facet-org-region',
attributeName: 'organisation_region',
sortBy: ['isRefined:desc', 'count:desc', 'name:asc'],
limit: 10,
templates: {
header: '<h3 class="widgettitle">Region</h3>'
}
})
);
Your solution seems to mix JavaScript code with PHP.
PHP code gets parsed and executed on the server side and JavaScript on the client side in the browser.
In your example, $organisation_region will always equal the string '{{{ data._highlightResult.organisation_region.value }}}'.
You probably want to add organisation_region as a facet and then refine on that.
To achieve that, you can take a look how other facets are implemented here https://community.algolia.com/wordpress/customize-search-page.html
Also, here is how to register your custom facet: https://community.algolia.com/wordpress/indexing-settings.html#register-custom-facet

Experiencing tags on screen

I am calling title, body and few other things from database and using echo to display it on screen. Everything is working fine except body, where p tags are printed at start and end of body. My code is
echo "<div class='db'>
<h2 style='background-color:#ffffff;color:#000000;'>".$row['title']."</h2>
<p style='background-color:#ffffff'>" .
(strlen($row['body'])>500?
substr( $row['body'],0,500)."...<a href='blog.php?blogId=" . $row['blogs_id'] . "' style='font-size:13px;color:black;background-color:#ffffff;text-decoration:none;'>Read more</a>":
$row['body']).
"</p>
<img src='$profilephoto_info' height='60' style='background-color:#ffffff;border-radius:20px;'>
By:<a href='$posted_by' style='background-color:#ffffff;text-decoration:none;color:#626769;font-size:13px;'>$posted_by</a>
<p style='background-color:#ffffff;text-decoration:none;color:#626769;font-size:13px;''>".$row['bio']."</p>
</div>";
No h2 tags appear for title nor for any other elements only body is showing p tags around it on screen.
Format your code to know where things get missed up
consider heredoc
http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc
also loss the inline styles!
<?php
$title = $row['title'];
$shortBody = strlen($row['body']) >500 ? substr( $row['body'],0,500) : $row['body'];
$url = "blog.php?blogId=" . $row[' blogs_id '];
$bio = $row['bio '];
echo <<<dbElement
<div class='db'>
<h2 style='background-color:#FFF;color:#000;'>
$title
</h2>
<p style='background-color:#FFF'>
$shortBody ...
<a href="$url"
style="font-size:13px;color:black;background-color:#FFF;text-decoration:none;">
Read more
</a>
</p>
<img src='$profilephoto_info' height='60'
style='background-color:#FFF;border-radius:20px;'>
By:
<a href='$posted_by'
style='background-color:#FFF;text-decoration:none;color:#626769;font-size:13px;'>
$posted_by
</a>
<p
style='background-color:#FFF;text-decoration:none;color:#626769;font-size:13px;'>
$bio
</p>
</div>
dbElement;
?>
*make sure to not include my php opening and closing tags (<?php and ?>)

Option page not updating multiple records in settings api

Hi i am new to wordpress plugin development. i have issues with settings api. please help if you can.
Below is my problem.
The problem i am facing is the last record which is link it is updating in database but the title text is not updating in database.
So please help me find solution. Thank you.
function load_plugin() {
add_settings_section('plugin_main', '<h1>Ticker Settings</h1>', 'plugin_section_text', 'plugin');
add_settings_field('plugin_text_string', 'Title text', 'plugin_setting_string', 'plugin', 'plugin_main');
add_settings_field('post_title_link', 'Link', 'plugin_link_setting', 'plugin', 'plugin_main');
register_setting('plugin_options', 'plugin_options');
register_setting('post_title_link', 'post_title_link');
}
function plugin_section_text() {
echo '<p>Change your post ticker title and give link to.</p>';
}
function plugin_setting_string() {
echo "<input id='plugin_text_string' name='plugin_options' size='40'
type='text' value='" . get_option('plugin_options') . "' />";
}
function plugin_link_setting() {
echo "<input id='post_title_link' name='post_title_link' size='40'
type='text' value='" . get_option('post_title_link') . "' />";
}
add_action('admin_init', 'load_plugin');
function post_ticker_setting() {
?>
<div class="wrap">
<form action="options.php" method="post">
<?php
settings_fields('plugin_options');
settings_fields('post_title_link');
do_settings_sections('plugin');
?>
<input name="Submit" type="submit" value="<?php esc_attr_e('Save Changes'); ?>" />
</form>
</div>
<?php
}
You have to register all settings with register_setting (https://codex.wordpress.org/Function_Reference/add_settings_field). The register_setting lines you show don't correspond to your fields.
Also sections should be declared after the fields are registered (https://codex.wordpress.org/Function_Reference/register_setting)
In your code, the following lines
<?php
settings_fields('plugin_options');
settings_fields('post_title_link');
do_settings_sections('plugin');
?>
don't correspond to the declarations above:
add_settings_section('plugin_main', ...
add_settings_field('plugin_text_string', ...
add_settings_field('post_title_link', ...
Only the 'post_title_link' has the same name. Which is probably why it is the only one updating.

WordPress data lose after importing database into new database

I am new with Wordpress.
I have created a simple plugin to save setting for theme.
In this its working fine for saving data in database.
But am having problem when i am exporting my project Databse and import to new database.
That time all settings are gone ,i have to update theme setting every time when i am importing database to new database.
Any suggestion.
What am i doing wrong.
// admin page
function my_custom_settings_form()
{
include('include/settings.php');
}
// admin menu
function my_custom_settings_menu()
{
add_options_page('CustomSetting', ' Theme Settings', 'manage_options', 'theme-settings', 'my_custom_settings_form');
}
add_action('admin_menu', 'my_custom_settings_menu');
// register setting
function my_custom_settings_settings()
{
register_setting('wp_sp_settings_group', 'pageSettings');
}
add_action('admin_init', 'my_custom_settings_settings');
function do_css()
{
wp_enqueue_style('thickbox');
wp_enqueue_style('thickbox');
}
function do_jslibs()
{
wp_enqueue_script('editor');
wp_enqueue_script('thickbox');
add_action( 'admin_head', 'wp_tiny_mce' );
}
add_action('admin_print_scripts', 'do_jslibs' );
add_action('admin_print_styles', 'do_css' );
function wp_gear_manager_admin_scripts() {
wp_enqueue_media();
}
function wp_gear_manager_admin_styles() {
wp_enqueue_style('thickbox');
}
add_action('admin_print_scripts', 'wp_gear_manager_admin_scripts');
add_action('admin_print_styles', 'wp_gear_manager_admin_styles');
?>
include/settings.php
$pageSettings = get_option('pageSettings');
?>
<div class="wrap">
<h2>Theme Settings</h2>
<hr/>
<?php settings_errors('', true, true); ?>
<div class="postbox-container" id="poststuff">
<form action="options.php" method="POST">
<?php settings_fields('wp_sp_settings_group'); ?>
<div class="postbox">
<div class="handlediv" title="Click to toggle">
<br>
</div>
<h3>
<span>Header Logo</span>
</h3>
<div class="inside">
<table class="form-table ">
<tbody>
<tr>
<td>
<div class="uploader">
<input type="text" name="pageSettings[site-logo]" id="site-logo" value="<?php echo $pageSettings['site-logo'] ; ?>" />
<input class="button" type="button" name="site-logo-button" id="site-logo-button" value="Upload" />
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p class="submit">
<input type="submit" value="Save Changes" class="button button-primary" id="submit"
name="submit">
</p>
</form>
</div>
</div>
The Best way to Make a exact copy of database without losing any info is by going to the database itself and export everything. Then import the data into the new website setup your WP config. Once done, go into the database and change your wp-setting data table for values
related to WEBSITE URL
There should be two places you need to change.
Jay has the right answer, but I think off the top of my head the table is wp_options rather than settings. The things you need to change are "siteurl" and "home"

Resources