array(
'callback' => 'awpcp_do_placeholder_title',
),
'ad_categoryurl' => array(
'callback' => 'awpcp_do_placeholder_category_url',
),
'ad_categoryname' => array(
'callback' => 'awpcp_do_placeholder_category_name',
),
'adcontact_name' => array(
'callback' => 'awpcp_do_placeholder_contact_name',
),
'adcontactphone' => array(
'callback' => 'awpcp_do_placeholder_contact_phone',
),
'codecontact' => array(
'callback' => 'awpcp_do_placeholder_contact_url',
),
'awpcpvisitwebsite' => array(
'callback' => 'awpcp_do_placeholder_website_link',
),
'addetails' => array(
'callback' => 'awpcp_do_placeholder_details',
),
'location' => array(
'callback' => 'awpcp_do_placeholder_location',
),
'city' => array(
'callback' => 'awpcp_do_placeholder_location',
),
'state' => array(
'callback' => 'awpcp_do_placeholder_location',
),
'village' => array(
'callback' => 'awpcp_do_placeholder_location',
),
'country' => array(
'callback' => 'awpcp_do_placeholder_location',
),
'aditemprice' => array(
'callback' => 'awpcp_do_placeholder_price',
),
'ad_startdate' => array(
'callback' => 'awpcp_do_placeholder_legacy_dates',
),
'ad_postdate' => array(
'callback' => 'awpcp_do_placeholder_legacy_dates',
),
'featureimg' => array(
'callback' => 'awpcp_do_placeholder_images',
),
'awpcpshowadotherimages' => array(
'callback' => 'awpcp_do_placeholder_images',
),
'awpcpextrafields' => array(
'callback' => 'awpcp_do_placeholder_extra_fields',
),
'showadsense1' => array(
'callback' => 'awpcp_do_placeholder_adsense',
),
'showadsense2' => array(
'callback' => 'awpcp_do_placeholder_adsense',
),
'showadsense3' => array(
'callback' => 'awpcp_do_placeholder_adsense',
),
'awpcpadviews' => array(
'callback' => 'awpcp_do_placeholder_legacy_views',
),
'flagad' => array(
'callback' => 'awpcp_do_placeholder_flag_link',
),
'tweetbtn' => array(
'callback' => 'awpcp_do_placeholder_twitter_button',
),
'sharebtn' => array(
'callback' => 'awpcp_do_placeholder_facebook_button',
),
// listings [only] placeholders
'url_showad' => array(
'callback' => 'awpcp_do_placeholder_url',
),
'addetailssummary' => array(
'callback' => 'awpcp_do_placeholder_excerpt',
),
'awpcp_city_display' => array(
'callback' => 'awpcp_do_placeholder_location',
),
'awpcp_state_display' => array(
'callback' => 'awpcp_do_placeholder_location',
),
'awpcp_country_display' => array(
'callback' => 'awpcp_do_placeholder_location',
),
'awpcp_display_price' => array(
'callback' => 'awpcp_do_placeholder_price',
),
'awpcpadpostdate' => array(
'callback' => 'awpcp_do_placeholder_legacy_dates',
),
'imgblockwidth' => array(
'callback' => 'awpcp_do_placeholder_images',
),
'awpcp_image_name_srccode' => array(
'callback' => 'awpcp_do_placeholder_images',
),
'awpcp_display_adviews' => array(
'callback' => 'awpcp_do_placeholder_legacy_views',
),
);
/* new placeholders added in AWPCP 3.0 */
$placeholders = array(
// common placeholders
'url' => array(),
'title' => array(),
'title_link' => array(
'callback' => 'awpcp_do_placeholder_title',
),
'category_url' => array(),
// 'category_link' => array(),
'category_name' => array(),
'details' => array(),
'excerpt' => array(),
'contact_name' => array(),
'contact_phone' => array(
'callback' => 'awpcp_do_placeholder_contact_phone',
),
'contact_url' => array(),
'website_link' => array(),
'website_url' => array(),
// 'city' => array(),
// 'state' => array(),
// 'country' => array(),
'county' => array(
'callback' => 'awpcp_do_placeholder_location',
),
'region' => array(
'callback' => 'awpcp_do_placeholder_location',
),
'price' => array(),
'start_date' => array(
'callback' => 'awpcp_do_placeholder_dates',
),
'posted_date' => array(
'callback' => 'awpcp_do_placeholder_dates',
),
'featured_image' => array(
'callback' => 'awpcp_do_placeholder_images',
),
'views' => array(),
'extra_fields' => array(
'callback' => 'awpcp_do_placeholder_extra_fields',
),
'twitter_button' => array(),
'facebook_button' => array(),
// single ad [only] placeholders
'images' => array(),
'adsense' => array(),
'flag_link' => array(),
// listings [only] placeholders
'thumbnail_width' => array(
'callback' => 'awpcp_do_placeholder_images',
),
);
$placeholders = array_merge($legacy_placeholders, $placeholders);
$placeholders = apply_filters('awpcp-content-placeholders', $placeholders);
foreach ($placeholders as $placeholder => $params) {
if (!isset($placeholders[$placeholder]['callback'])) {
$placeholders[$placeholder]['callback'] = "awpcp_do_placeholder_{$placeholder}";
}
}
krsort($placeholders);
return $placeholders;
}
/**
* @since 3.0
*/
function awpcp_do_placeholders($ad, $content, $context) {
$original_content = $content;
$placeholders = awpcp_content_placeholders();
$placeholders_names = array_keys($placeholders);
$pattern = sprintf('\$%s', join('|\$', array_map('preg_quote', $placeholders_names)));
preg_match_all("/$pattern/s", $content, $matches);
$processed = array();
foreach ($matches[0] as $match) {
if (isset($processed[$match])) continue;
$placeholder = trim($match, '$');
$callback = $placeholders[$placeholder]['callback'];
if (function_exists($callback)) {
$replacement = call_user_func($callback, $ad, $placeholder, $context);
$content = str_replace($match, $replacement, $content);
$processed[$match] = true;
} else {
}
}
return $content;
}
/**
* @since 3.0
*/
function awpcp_do_placeholder_url($ad, $placeholder) {
return url_showad($ad->ad_id);
}
/**
* @since 3.0
*/
function awpcp_do_placeholder_title($ad, $placeholder) {
$url = url_showad($ad->ad_id);
$replacements['ad_title'] = sprintf('%s', $url, $ad->get_title());
$replacements['title'] = $ad->get_title();
$replacements['title_link'] = $replacements['ad_title'];
return $replacements[$placeholder];
}
/**
* @since 3.0
*/
function awpcp_do_placeholder_category_name($ad, $placeholder) {
return stripslashes(get_adcatname($ad->ad_category_id));
}
/**
* @since 3.0
*/
function awpcp_do_placeholder_category_url($ad, $placeholder) {
return url_browsecategory($ad->ad_category_id);
}
/**
* @since 3.0
*/
function awpcp_do_placeholder_details($ad, $placeholder) {
static $replacements = array();
if (isset($replacements[$ad->ad_id])) {
return $replacements[$ad->ad_id][$placeholder];
}
$placeholders['addetails'] = apply_filters('awpcp-ad-details', stripslashes_deep($ad->ad_details));
if (get_awpcp_option('hyperlinkurlsinadtext')) {
$pattern = '#(?$1', $nofollow);
$placeholders['addetails'] = preg_replace($pattern, $link, $placeholders['addetails']);
}
$placeholders['addetails'] = nl2br($placeholders['addetails']);
$placeholders['details'] = $placeholders['addetails'];
$replacements[$ad->ad_id] = $placeholders;
return $replacements[$ad->ad_id][$placeholder];
}
/**
* @since 3.0
*/
function awpcp_do_placeholder_excerpt($ad, $placeholder) {
$details = stripslashes_deep($ad->ad_details);
$replacements['addetailssummary'] = wp_trim_words($details, 20, '');
$replacements['excerpt'] = wp_trim_words($details, 20);
return $replacements[$placeholder];
}
/**
* @since 3.0
*/
function awpcp_do_placeholder_contact_name($ad, $placeholder) {
return stripslashes($ad->ad_contact_name);
}
/**
* @since 3.0
*/
function awpcp_do_placeholder_website_url($ad, $placeholder) {
return $ad->websiteurl;
}
/**
* @since 3.0
*/
function awpcp_do_placeholder_website_link($ad, $placeholder) {
$nofollow = get_awpcp_option('visitwebsitelinknofollow') ? 'rel="nofollow"' : '';
$label = __('Visit Website', 'AWPCP');
if (!empty($ad->websiteurl)) {
$url = awpcp_esc_attr($ad->websiteurl);
$content = '
%s';
$content = sprintf($content, $nofollow, $url, $label);
$replacements['awpcpvisitwebsite'] = $content;
$content = '%s';
$content = sprintf($content, $nofollow, $url, $label);
$replacements['website_link'] = $content;
} else {
$replacements['awpcpvisitwebsite'] = '';
$replacements['website_link'] = '';
}
return $replacements[$placeholder];
}
/**
* @since 3.0
*/
function awpcp_do_placeholder_price($ad, $placeholder) {
$price = empty($ad->ad_item_price) ? 0 : ($ad->ad_item_price / 100);
$replacements = array();
if ($price >= 1 && get_awpcp_option('displaypricefield') == 1) {
$label = __('Price', 'AWPCP');
$currency = awpcp_format_money($price);
// single ad
$content = '