I am trying to update one my plugin functions using add_filter with the ultimate goal of changing the order of elements that are output by the plugin.
Here is the plugin function:
public function stores_single_content($content)
{
global $post;
if(!isset($post->post_type)) {
return $content;
}
if ($post->post_type == 'stores') {
$prefix = "wordpress_store_locator_";
$meta = get_post_meta($post->ID);
$args = array('fields' => 'names', 'orderby' => 'name', 'order' => 'ASC');
// Categories
$store_cats = wp_get_object_terms($post->ID, 'store_category', $args);
$categories = '<div class="store_locator_single_categories">';
$categories .= '<strong class="store_locator_single_categories_title">' . __('Categories: ', 'wordpress-store-locator') . '</strong>' . implode(', ', $store_cats);
$categories .= '</div>';
$store_filter = wp_get_object_terms($post->ID, 'store_filter', $args);
$filter = '<div class="store_locator_single_filter">';
$filter .= '<strong class="store_locator_single_filter_title">' . __('Filter: ', 'wordpress-store-locator') . '</strong>' . implode(', ', $store_filter);
$filter .= '</div>';
$address1 = isset($meta[ $prefix . 'address1' ][0]) ? $meta[ $prefix . 'address1' ][0] : '';
$address2 = isset($meta[ $prefix . 'address2' ][0]) ? $meta[ $prefix . 'address2' ][0] : '';
$zip = isset($meta[ $prefix . 'zip' ][0]) ? $meta[ $prefix . 'zip' ][0] : '';
$city = isset($meta[ $prefix . 'city' ][0]) ? $meta[ $prefix . 'city' ][0] : '';
$region = isset($meta[ $prefix . 'region' ][0]) ? $meta[ $prefix . 'region' ][0] : '';
$country = isset($meta[ $prefix . 'country' ][0]) ? $meta[ $prefix . 'country' ][0] : '';
$telephone = isset($meta[ $prefix . 'telephone' ][0]) ? $meta[ $prefix . 'telephone' ][0] : '';
$mobile = isset($meta[ $prefix . 'mobile' ][0]) ? $meta[ $prefix . 'mobile' ][0] : '';
$fax = isset($meta[ $prefix . 'fax' ][0]) ? $meta[ $prefix . 'fax' ][0] : '';
$email = isset($meta[ $prefix . 'email' ][0]) ? $meta[ $prefix . 'email' ][0] : '';
$website = isset($meta[ $prefix . 'website' ][0]) ? $meta[ $prefix . 'website' ][0] : '';
$description = "";
if($this->get_option('showAddressStyle') == "american") {
$address = '<div class="store_locator_single_address">';
$address .= '<h2>' . __('Address ', 'wordpress-store-locator') . '</h2>';
$address .= !empty($address1) ? $address1 . '<br/>' : '';
$address .= !empty($address2) ? $address2 . '<br/>' : '';
$address .= !empty($city) ? $city . ', ' : '';
$address .= !empty($region) ? $region . ' ' : '';
$address .= !empty($zip) ? $zip . '<br/>' : '';
if($this->get_option('showCountry')) {
$address .= !empty($country) ? $country : '';
}
$address .= '</div>';
} else {
$address = '<div class="store_locator_single_address">';
$address .= '<h2>' . __('Address ', 'wordpress-store-locator') . '</h2>';
$address .= !empty($address1) ? $address1 . '<br/>' : '';
$address .= !empty($address2) ? $address2 . '<br/>' : '';
$address .= !empty($zip) ? $zip . ', ' : '';
$address .= !empty($city) ? $city . ', ' : '';
$address .= !empty($region) ? $region . ', ' : '';
if($this->get_option('showCountry')) {
$address .= !empty($country) ? $country : '';
}
$address .= '</div>';
}
$contact = '<div class="store_locator_single_contact">';
$contact .= '<h2>' . __('Contact ', 'wordpress-store-locator') . '</h2>';
$contact .= !empty($telephone) && $this->get_option('showTelephone') ?
$this->get_option('showTelephoneText') . ': <a href="tel:' . $telephone . '">' . $telephone . '</a><br/>' : '';
$contact .= !empty($mobile) && $this->get_option('showMobile') ?
$this->get_option('showMobileText') . ': <a href="tel:' . $mobile . '">' . $mobile . '</a><br/>' : '';
$contact .= !empty($fax) && $this->get_option('showFax') ?
$this->get_option('showFaxText') . ': <a href="tel:' . $fax . '">' . $fax . '</a><br/>' : '';
$contact .= !empty($email) && $this->get_option('showEmail') ?
$this->get_option('showEmailText') . ': <a href="mailto:' . $email . '">' . $email . '</a><br/>' : '';
$contact .= !empty($website) && $this->get_option('showWebsite') ?
$this->get_option('showWebsiteText') . ': <a href="' . $website . '" target="_blank">' . $website . '</a><br/>' : '';
$contact .= '</div>
<div class="store_locator_single_clear"></div>';
$map = "";
$opening_hours = "";
$opening_hours2 = "";
$contactStore = "";
if(is_single()) {
$weekdays = array(
'Monday' => __('Monday', 'wordpress-store-locator'),
'Tuesday' => __('Tuesday', 'wordpress-store-locator'),
'Wednesday' => __('Wednesday', 'wordpress-store-locator'),
'Thursday' => __('Thursday', 'wordpress-store-locator'),
'Friday' => __('Friday', 'wordpress-store-locator'),
'Saturday' => __('Saturday', 'wordpress-store-locator'),
'Sunday' => __('Sunday', 'wordpress-store-locator'),
);
foreach ($weekdays as $key => $weekday) {
$open = isset($meta[ $prefix . $key . "_open"]) ? $meta[ $prefix . $key . "_open"][0] : '';
$close = isset($meta[ $prefix . $key . "_close"]) ? $meta[ $prefix . $key . "_close"][0] : '';
if(!empty($open) && !empty($close)) {
$opening_hours .= $weekday . ': ' . $open . ' – ' . $close . ' ' . $this->get_option('showOpeningHoursClock') . '<br/>';
} elseif(!empty($open)) {
$opening_hours .= $weekday . ': ' . $open . ' ' . $this->get_option('showOpeningHoursClock') . '<br/>';
} elseif(!empty($close)) {
$opening_hours .= $weekday . ': ' . $close . ' ' . $this->get_option('showOpeningHoursClock') . '<br/>';
}
}
if(!empty($opening_hours)) {
$opening_hours = '<div class="store_locator_single_opening_hours">' .
'<h2>' . __('Opening Hours ', 'wordpress-store-locator') . '</h2>' .
$opening_hours .
'</div>';
}
foreach ($weekdays as $key => $weekday) {
$open = isset($meta[ $prefix . $key . "_open2"]) ? $meta[ $prefix . $key . "_open2"][0] : '';
$close = isset($meta[ $prefix . $key . "_close2"]) ? $meta[ $prefix . $key . "_close2"][0] : '';
if(!empty($open) && !empty($close)) {
$opening_hours2 .= $weekday . ': ' . $open . ' – ' . $close . ' ' . $this->get_option('showOpeningHours2Clock') . '<br/>';
} elseif(!empty($open)) {
$opening_hours2 .= $weekday . ': ' . $open . ' ' . $this->get_option('showOpeningHours2Clock') . '<br/>';
} elseif(!empty($close)) {
$opening_hours2 .= $weekday . ': ' . $close . ' ' . $this->get_option('showOpeningHours2Clock') . '<br/>';
}
}
if(!empty($opening_hours2)) {
$opening_hours2 = '<div class="store_locator_single_opening_hours2">' .
'<h2>' . $this->get_option('showOpeningHours2Text') . '</h2>' .
$opening_hours2 .
'</div>';
}
if($this->get_option('showContactStore')) {
$contactStorePage = $this->get_option('showContactStorePage');
$contactStoreText = $this->get_option('showContactStoreText');
if(!empty($contactStorePage)) {
$contactStorePage = get_permalink($contactStorePage) . '?store_id=' . $post->ID;
}
$contactStore = '<div class="store_locator_single_contact_store">' .
'<a href="' . $contactStorePage . '" class="store_locator_contact_store_button btn button et_pb_button btn-primary theme-button btn-lg center">' . $contactStoreText . '</a>'.
'</div>';
}
$map .= '<div id="store_locator_single_map" class="store_locator_single_map"
data-lat="' . $meta[ $prefix . 'lat' ][0] . '"
data-lng="' . $meta[ $prefix . 'lng' ][0] . '"></div>';
}
$content = $categories . $filter . $content . $address . $contact . $opening_hours . $opening_hours2 . $contactStore . $map;
}
return $content;
}
and the add_filter I've written for the functions.php:
function modify_store_output() {
$content = $contact . $address . $filter . $map . $content;
return $content;
}
add_filter ('stores_single_content', 'modify_store_output', 15);
Trying to understand why that's not working :(
function modify_store_output($content) {
apply_filters('stores_single_content', ...)
? I don't see it in your modified plugin code. In particular, what does it pass as arguments to the filter? You won't have contact, address, filter, map and content in-scope in your modify_store_output automatically: you'll only have them if they're passed by the filter call, or if you can unpack them from an object passed by the filter call.