ASong2U_Web/wp-content/plugins/wp-views/embedded/inc/wpv-shortcodes.php

1306 lines
38 KiB
PHP
Raw Normal View History

<?php
$wpv_shortcodes = array();
$wpv_shortcodes['wpv-post-id'] = array('wpv-post-id', __('ID', 'wpv-views'), 'wpv_shortcode_wpv_post_id');
$wpv_shortcodes['wpv-post-title'] = array('wpv-post-title', __('Title', 'wpv-views'), 'wpv_shortcode_wpv_post_title');
$wpv_shortcodes['wpv-post-link'] = array('wpv-post-link', __('Title with a link', 'wpv-views'), 'wpv_shortcode_wpv_post_link');
$wpv_shortcodes['wpv-post-body'] = array('wpv-post-body', __('Body', 'wpv-views'), 'wpv_shortcode_wpv_post_body');
$wpv_shortcodes['wpv-post-excerpt'] = array('wpv-post-excerpt', __('Excerpt', 'wpv-views'), 'wpv_shortcode_wpv_post_excerpt');
$wpv_shortcodes['wpv-post-author'] = array('wpv-post-author', __('Author', 'wpv-views'), 'wpv_shortcode_wpv_post_author');
$wpv_shortcodes['wpv-post-date'] = array('wpv-post-date', __('Date', 'wpv-views'), 'wpv_shortcode_wpv_post_date');
$wpv_shortcodes['wpv-post-url'] = array('wpv-post-url', __('URL', 'wpv-views'), 'wpv_shortcode_wpv_post_url');
$wpv_shortcodes['wpv-post-featured-image'] = array('wpv-post-featured-image', __('Featured image', 'wpv-views'), 'wpv_shortcode_wpv_post_featured_image');
$wpv_shortcodes['wpv-post-comments-number'] = array('wpv-post-comments-number', __('Comments number', 'wpv-views'), 'wpv_shortcode_wpv_comments_number');
$wpv_shortcodes['wpv-post-edit-link'] = array('wpv-post-edit-link', __('Edit Link', 'wpv-views'), 'wpv_shortcode_wpv_post_edit_link');
$wpv_shortcodes['wpv-post-type'] = array('wpv-post-type', __('Post type', 'wpv-views'), 'wpv_shortcode_wpv_post_type');
// NOTE: Put all "post" shortcodes before 'wpv-post-field' so they appear in the right order in various popups.
$wpv_shortcodes['wpv-post-field'] = array('wpv-post-field', __('Field', 'wpv-views'), 'wpv_shortcode_wpv_post_field');
$wpv_shortcodes['wpv-comment-title'] = array('wpv-comment-title', __('Comment title', 'wpv-views'), 'wpv_shortcode_wpv_comment_title');
$wpv_shortcodes['wpv-comment-body'] = array('wpv-comment-body', __('Comment body', 'wpv-views'), 'wpv_shortcode_wpv_comment_body');
$wpv_shortcodes['wpv-comment-author'] = array('wpv-comment-author', __('Comment Author', 'wpv-views'), 'wpv_shortcode_wpv_comment_author');
$wpv_shortcodes['wpv-comment-date'] = array('wpv-comment-date', __('Comment Date', 'wpv-views'), 'wpv_shortcode_wpv_comment_date');
$wpv_shortcodes['wpv-taxonomy-title'] = array('wpv-taxonomy-title', __('Taxonomy title', 'wpv-views'), 'wpv_shortcode_wpv_tax_title');
$wpv_shortcodes['wpv-taxonomy-link'] = array('wpv-taxonomy-link', __('Taxonomy title with a link', 'wpv-views'), 'wpv_shortcode_wpv_tax_title_link');
$wpv_shortcodes['wpv-taxonomy-url'] = array('wpv-taxonomy-url', __('Taxonomy URL', 'wpv-views'), 'wpv_shortcode_wpv_tax_url');
$wpv_shortcodes['wpv-taxonomy-slug'] = array('wpv-taxonomy-slug', __('Taxonomy slug', 'wpv-views'), 'wpv_shortcode_wpv_tax_slug');
$wpv_shortcodes['wpv-taxonomy-description'] = array('wpv-taxonomy-description', __('Taxonomy description', 'wpv-views'), 'wpv_shortcode_wpv_tax_description');
$wpv_shortcodes['wpv-taxonomy-post-count'] = array('wpv-taxonomy-post-count', __('Taxonomy post count', 'wpv-views'), 'wpv_shortcode_wpv_tax_items_count');
// register the short codes
foreach ($wpv_shortcodes as $shortcode) {
if (function_exists($shortcode[2])) {
add_shortcode($shortcode[0], $shortcode[2]);
}
}
// Init taxonomies shortcode
wpv_post_taxonomies_shortcode();
/*
Get the short code via name
*/
function wpv_get_shortcode($name) {
global $wpv_shortcodes;
foreach ($wpv_shortcodes as $shortcode) {
if ($shortcode[1] == $name) {
return $shortcode[0];
}
}
if ($name == 'Taxonomy View') {
return 'wpv-view';
}
return null;
}
/**
* Views-Shortcode: wpv-post-id
*
* Description: Display the current post's ID
*
* Parameters:
* This takes no parameters.
*
*/
function wpv_shortcode_wpv_post_id($atts){
$post_id_atts = new WPV_wpcf_switch_post_from_attr_id($atts);
extract(
shortcode_atts( array(), $atts )
);
$out = '';
global $post;
if(!empty($post)){
$out .= $post->ID;
}
return $out;
}
/**
* Views-Shortcode: wpv-post-title
*
* Description: Display the current post's title
*
* Parameters:
* This takes no parameters.
*
*/
function wpv_shortcode_wpv_post_title($atts){
$post_id_atts = new WPV_wpcf_switch_post_from_attr_id($atts);
extract(
shortcode_atts( array(), $atts )
);
$out = '';
global $post;
if(!empty($post)){
$out .= apply_filters('the_title', $post->post_title);
}
return $out;
}
/**
* Views-Shortcode: wpv-post-link
*
* Description: Display the current post's title as a link to the post
*
* Parameters:
* This takes no parameters.
*
*/
function wpv_shortcode_wpv_post_link($atts){
$post_id_atts = new WPV_wpcf_switch_post_from_attr_id($atts);
extract(
shortcode_atts( array(), $atts )
);
$out = '';
global $post;
if(!empty($post)){
$out .= '<a href="' . get_permalink() . '">';
$out .= apply_filters('the_title', $post->post_title);
$out .= '</a>';
}
return $out;
}
/**
* Views-Shortcode: wpv-post-body
*
* Description: Display the content of the current post
*
* Parameters:
* 'view_template' => The name of a view template to use when displaying the post content.
*
*/
function wpv_shortcode_wpv_post_body($atts){
$post_id_atts = new WPV_wpcf_switch_post_from_attr_id($atts);
extract(
shortcode_atts( array(), $atts )
);
$old_override = null;
$out = '';
global $WPV_templates, $post;
if (isset($atts['view_template'])) {
if (isset($post->view_template_override) && $post->view_template_override != '') {
$old_override = $post->view_template_override;
}
$post->view_template_override = $atts['view_template'];
}
if(!empty($post) && $post->post_type != 'view' && $post->post_type != 'view-template'){
$wpautop_was_removed = $WPV_templates->is_wpautop_removed();
if ($wpautop_was_removed) {
$WPV_templates->restore_wpautop('');
}
// Remove the icl language switcher to stop WPML from add the
// "This post is avaiable in XXXX" twice.
global $icl_language_switcher;
$icl_filter_removed = false;
if(isset($icl_language_switcher)) {
$icl_filter_removed = remove_filter('the_content', array($icl_language_switcher, 'post_availability'));
}
$out .= apply_filters('the_content', $post->post_content);
if ($icl_filter_removed) {
add_filter('the_content', array($icl_language_switcher, 'post_availability'));
}
if ($wpautop_was_removed) {
$WPV_templates->remove_wpautop();
}
}
if (isset($post->view_template_override)) {
if ($old_override) {
$post->view_template_override = $old_override;
} else {
unset($post->view_template_override);
}
}
return $out;
}
/**
* Views-Shortcode: wpv-post-excerpt
*
* Description: Display the excerpt of the current post
*
* Parameters:
* length => the length of the excerpt. Default is 252 or the excerpt length defined by the theme.
*
*/
function wpv_shortcode_wpv_post_excerpt($atts){
$post_id_atts = new WPV_wpcf_switch_post_from_attr_id($atts);
extract(
shortcode_atts( array('length' => 0), $atts )
);
$out = '';
global $WPV_templates, $post;
if(!empty($post) && $post->post_type != 'view' && $post->post_type != 'view-template'){
// verify if displaying the real excerpt field or part of the content one
$display_real_excerpt = false;
if ( empty($post->post_excerpt) ) {
$excerpt = $post->post_content;
} else {
$excerpt = $post->post_excerpt;
$display_real_excerpt = true;
}
$excerpt = str_replace(']]>', ']]&gt;', $excerpt);
if ($length > 0) {
$excerpt_length = $length;
} else {
$excerpt_length = apply_filters('excerpt_length', 252);
}
$excerpt_more = apply_filters('excerpt_more', ' ' . '...');
if($display_real_excerpt) {
$excerpt_length = strlen($excerpt); // don't cut manually inserted excerpts
$excerpt_more = '';
}
// evaluate shortcodes before truncating tags
$excerpt = wpv_do_shortcode($excerpt);
$excerpt = wp_html_excerpt($excerpt, $excerpt_length) . $excerpt_more;
$wpautop_was_removed = $WPV_templates->is_wpautop_removed();
if ($wpautop_was_removed) {
$WPV_templates->restore_wpautop('');
}
// Remove the View template excerpt filter. We don't want it applied to this shortcode
remove_filter('the_excerpt', array($WPV_templates, 'the_excerpt_for_archives'), 1, 1);
$out .= apply_filters('the_excerpt', $excerpt);
// restore filter
add_filter('the_excerpt', array($WPV_templates, 'the_excerpt_for_archives'), 1, 1);
if ($wpautop_was_removed) {
$WPV_templates->remove_wpautop();
}
}
return $out;
}
/**
* Views-Shortcode: wpv-post-author
*
* Description: Display the author of the current post
*
* Parameters:
* format => The format of the output.
* "name" displays the author's name (Default)
* "link" displays the author's name as a link
* "url" displays the url for the author
* "meta" displays the author meta info
*
* meta => The meta field to display when format="meta"
* see http://codex.wordpress.org/Function_Reference/get_the_author_meta
*
*/
function wpv_shortcode_wpv_post_author($atts) {
$post_id_atts = new WPV_wpcf_switch_post_from_attr_id($atts);
extract(
shortcode_atts( array('format' => 'name', 'meta' => 'nickname'), $atts )
);
global $authordata;
$author_url = esc_url( get_author_posts_url( get_the_author_meta( 'ID' )));
switch ($format) {
case 'link':
$out = '<a href="' . $author_url . '">' . get_the_author() . '</a>';
break;
case 'url':
$out = $author_url;
break;
case 'meta':
$out = get_the_author_meta($meta);
break;
default:
$out = get_the_author();
break;
}
return $out;
}
/**
* Views-Shortcode: wpv-post-date
*
* Description: Display the date of the current post
*
* Parameters:
* format => Format string for the date. Defaults to F jS, Y
*
* format parameter is the same as here - http://codex.wordpress.org/Formatting_Date_and_Time
*
*/
function wpv_shortcode_wpv_post_date($atts) {
$post_id_atts = new WPV_wpcf_switch_post_from_attr_id($atts);
extract(
shortcode_atts( array(
'format' => 'F jS, Y'
), $atts )
);
$out = apply_filters('the_time', get_the_time( $format ));
return $out;
}
/**
* Views-Shortcode: wpv-post-url
*
* Description: Display the url to the current post
*
* Parameters:
* This takes no parameters.
*
*/
function wpv_shortcode_wpv_post_url($atts) {
$post_id_atts = new WPV_wpcf_switch_post_from_attr_id($atts);
extract(
shortcode_atts( array(), $atts )
);
$out = get_permalink();
return $out;
}
/**
* Views-Shortcode: wpv-post-type
*
* Description: Display the current post type
*
* Parameters:
* 'show' => 'slug', 'singular' or 'plural'. Defaults to 'slug'
*
*/
function wpv_shortcode_wpv_post_type($atts){
$post_id_atts = new WPV_wpcf_switch_post_from_attr_id($atts);
extract(
shortcode_atts( array('show' => 'slug'), $atts )
);
$out = '';
global $post;
if(!empty($post)){
$post_object = get_post_type_object($post->post_type);
switch ($show) {
case 'single':
$out = $post_object->labels->singular_name;
break;
case 'plural':
$out = $post_object->labels->name;
break;
default:
$out = $post->post_type;
break;
}
}
return $out;
}
/**
* Views-Shortcode: wpv-post-featured-image
*
* Description: Display the featured image of the current post
*
* Parameters:
* 'size' => Image size - thumbnail, medium, large or full - defaults to thumbnail
*
*/
function wpv_shortcode_wpv_post_featured_image($atts) {
$post_id_atts = new WPV_wpcf_switch_post_from_attr_id($atts);
extract(
shortcode_atts( array(
'size' => 'thumbnail',
'attr' => ''
), $atts )
);
$out = get_the_post_thumbnail( null, $size, $attr );
$out = apply_filters('wpv-post-featured-image', $out);
return $out;
}
/**
* Views-Shortcode: wpv-post-edit-link
*
* Description: Display an edit link for the current post
*
* Parameters:
* label: Optional. What to show in the edit link. ie: 'Edit Video'
*
* @param array $atts An associative array of arributes to be used.
*/
function wpv_shortcode_wpv_post_edit_link($atts){
$post_id_atts = new WPV_wpcf_switch_post_from_attr_id($atts);
extract(
shortcode_atts( array(), $atts )
);
$out = '';
global $post;
if(!empty($post) && current_user_can('edit_posts')){
$out .= '<a href="' . get_edit_post_link( $post->ID ) . '" class="post-edit-link">';
$out .= (isset($atts['label']))? __('Edit ', 'wpv-views') .$atts['label'] : __('Edit This', 'wpv-views');
$out .= '</a>';
}
return $out;
}
/**
* Views-Shortcode: wpv-post-field
*
* Description: Display a custom field of the current post. This displays
* the raw data from the field. Use the Types plugin the and the [types] shortcode
* to display formatted fields.
*
* Parameters:
* 'name' => The name of the custom field to display
* 'index' => The array index to use if the meta key has multiple values. If index is not set then all values will be output
* 'separator' => The separator between multiple values. Defaults to ', '
*
*/
function wpv_shortcode_wpv_post_field($atts) {
$post_id_atts = new WPV_wpcf_switch_post_from_attr_id($atts);
extract(
shortcode_atts( array('index' => '',
'name' => '',
'separator' => ', '), $atts )
);
$out = '';
global $post;
if(!empty($post)){
$meta = get_post_meta($post->ID, $name);
$meta = apply_filters('wpv-post-field-meta-' . $name, $meta);
if ($meta) {
// Allow wpv-for-each shortcode to set the index
$index = apply_filters('wpv-for-each-index', $index);
if ($index !== '') {
$index = intval($index);
$out .= $meta[$index];
} else {
foreach($meta as $item) {
if ($out != '') {
$out .= $separator;
}
$out .= $item;
}
}
}
}
$out = apply_filters('wpv-post-field-' . $name, $out, $meta);
return $out;
}
/**
* Views-Shortcode: wpv-comments-number
*
* Description: Displays the number of comments for the current post
*
* Parameters:
* 'none' => Text if there are no comments. Default - "No Comments"
* 'one' => Text if there is only one comment. Default - "1 Comment"
* 'more' => Text if there is more than one comment. Default "% Comments"
*/
$wpv_comments_defaults = array('none' => __('No Comments', 'wpv-views'),
'one' => __('1 Comment', 'wpv-views'),
'more' => __('% Comments', 'wpv-views'));
function wpv_shortcode_wpv_comments_number($atts) {
$post_id_atts = new WPV_wpcf_switch_post_from_attr_id($atts);
global $wpv_comments_defaults, $post;
extract(
shortcode_atts( $wpv_comments_defaults, $atts )
);
ob_start();
wp_count_comments($post->ID);
comments_number($none, $one, $more);
return ob_get_clean();
}
function wpv_shortcode_wpv_comment_title($atts){
$post_id_atts = new WPV_wpcf_switch_post_from_attr_id($atts);
}
function wpv_shortcode_wpv_comment_body($atts){
$post_id_atts = new WPV_wpcf_switch_post_from_attr_id($atts);
}
function wpv_shortcode_wpv_comment_author($atts){
$post_id_atts = new WPV_wpcf_switch_post_from_attr_id($atts);
}
function wpv_shortcode_wpv_comment_date($atts){
$post_id_atts = new WPV_wpcf_switch_post_from_attr_id($atts);
}
/**
* Views-Shortcode: wpv-taxonomy-title
*
* Description: Display the taxonomy title as a plain text
*
* Parameters:
* This takes no parameters.
*
*/
function wpv_shortcode_wpv_tax_title($atts){
global $WP_Views;
$term = $WP_Views->get_current_taxonomy_term();
if ($term) {
return $term->name;
} else {
return '';
}
}
/**
* Views-Shortcode: wpv-taxonomy-link
*
* Description: Display the taxonomy title within a link
*
* Parameters:
* This takes no parameters.
*
*/
function wpv_shortcode_wpv_tax_title_link($atts){
global $WP_Views;
$term = $WP_Views->get_current_taxonomy_term();
if ($term) {
return '<a href="' . get_term_link($term) . '">' . $term->name . '</a>';
} else {
return '';
}
}
/**
* Views-Shortcode: wpv-taxonomy-slug
*
* Description: Display the taxonomy slug
*
* Parameters:
* This takes no parameters.
*
*/
function wpv_shortcode_wpv_tax_slug($atts){
global $WP_Views;
$term = $WP_Views->get_current_taxonomy_term();
if ($term) {
return $term->slug;
} else {
return '';
}
}
/**
* Views-Shortcode: wpv-taxonomy-url
*
* Description: Display the taxonomy URL as a plain text (not embedded in a HTML link)
*
* Parameters:
* This takes no parameters.
*
*/
function wpv_shortcode_wpv_tax_url($atts){
global $WP_Views;
$term = $WP_Views->get_current_taxonomy_term();
if ($term) {
return get_term_link($term);
} else {
return '';
}
}
/**
* Views-Shortcode: wpv-taxonomy-description
*
* Description: Display the taxonomy description text
*
* Parameters:
* This takes no parameters.
*
*/
function wpv_shortcode_wpv_tax_description($atts){
global $WP_Views;
$term = $WP_Views->get_current_taxonomy_term();
if ($term) {
return $term->description;
} else {
return '';
}
}
/**
* Views-Shortcode: wpv-taxonomy-post-count
*
* Description: Display the number of posts in a taxonomy
*
* Parameters:
* This takes no parameters.
*
*/
function wpv_shortcode_wpv_tax_items_count($atts){
global $WP_Views;
$term = $WP_Views->get_current_taxonomy_term();
if ($term) {
return $term->count;
} else {
return '';
}
}
//@todo - add function for the other shortcodes
/*
Add the short codes to javascript so they can be added to the
post visual editor toolbar.
$types contains the type of items to add to the toolbar
'post' add all wpv-post shortcodes
'view' add available views
*/
function add_short_codes_to_js($types, $editor, $call_back = null){
global $wpv_shortcodes, $wpdb, $WP_Views;
$cf_keys = $WP_Views->get_meta_keys();
// Find the field sub menus so we can group sub strings.
$sub_fields = array();
$last_field = '';
foreach ($cf_keys as $field) {
$parts = explode('_', str_replace('-', '_', $field));
$start = $parts[0];
if ($start == '') {
// starts with an underscore.
if (isset($parts[1])) {
$start = $parts[1];
}
}
if ($start == $last_field) {
// found a duplicate
if ($parts[0] == '') {
$start = '_' . $start;
}
if (!in_array($start, $sub_fields)) {
$sub_fields[] = $start;
}
} else {
$last_field = $start;
}
}
$index = 0;
foreach($wpv_shortcodes as $shortcode) {
if (in_array('post', $types) && strpos($shortcode[0], 'wpv-post-') === 0 && function_exists($shortcode[2])) {
if ($shortcode[0] == 'wpv-post-field') {
// we need to output the custom fields to a sub menu.
// first we output the view templates.
if (in_array('body-view-templates', $types)) {
// we need to add the available views.
$view_template_available = $wpdb->get_results("SELECT ID, post_name FROM {$wpdb->posts} WHERE post_type='view-template' AND post_status in ('publish')");
foreach($view_template_available as $view_template) {
if ($call_back) {
call_user_func($call_back, $index, $view_template->post_name, '', __('View template', 'wpv-views'), 'wpv-post-body view_template="' . $view_template->post_name . '"');
} else {
$editor->add_insert_shortcode_menu($view_template->post_name, 'wpv-post-body view_template="' . $view_template->post_name . '"', __('View template', 'wpv-views'));
}
$index += 1;
}
}
foreach ($cf_keys as $cf_key) {
if ($WP_Views->can_include_type($cf_key)) {
// add to the javascript array (text, function, sub-menu)
$function_name = 'wpv_field_' . $index;
$menu = $shortcode[1];
$parts = explode('_', str_replace('-', '_', $cf_key));
$start = $parts[0];
if ($start == '') {
// starts with an underscore.
if (isset($parts[1])) {
$start = '_' . $parts[1];
}
}
if (in_array($start, $sub_fields)) {
$menu .= '-!-' . $start;
}
if ($call_back) {
call_user_func($call_back, $index, $cf_key, $function_name, $menu, $shortcode[0]);
} else {
$name = ' name="' . $cf_key . '"';
$editor->add_insert_shortcode_menu($cf_key, $shortcode[0] . $name, $menu);
}
$index += 1;
}
}
} else {
if ($call_back) {
call_user_func($call_back, $index, $shortcode[1], $shortcode[1], "", $shortcode[0]);
} else {
if ($shortcode[0] == 'wpv-post-body') {
$editor->add_insert_shortcode_menu($shortcode[1], $shortcode[0] . ' view_template="None"', __('Basic', 'wpv-views'));
} elseif ($shortcode[0] == 'wpv-post-comments-number') {
global $wpv_comments_defaults;
$editor->add_insert_shortcode_menu($shortcode[1], $shortcode[0] . ' none="' . $wpv_comments_defaults['none'] . '" one="' . $wpv_comments_defaults['one'] . '" more="' . $wpv_comments_defaults['more'] . '"', __('Basic', 'wpv-views'));
} else {
// JS callback
if (isset($shortcode[3])) {
$editor->add_insert_shortcode_menu($shortcode[1], $shortcode[0], __('Basic', 'wpv-views'), $shortcode[3]);
} else {
$editor->add_insert_shortcode_menu($shortcode[1], $shortcode[0], __('Basic', 'wpv-views'));
}
}
}
$index += 1;
}
}
if($call_back == 'add-basics') {
if (isset($shortcode[3])) {
$editor->add_insert_shortcode_menu($shortcode[1], $shortcode[0], __('Basic', 'wpv-views'), $shortcode[3]);
} else {
$editor->add_insert_shortcode_menu($shortcode[1], $shortcode[0], __('Basic', 'wpv-views'));
}
}
if (in_array('taxonomy', $types) && strpos($shortcode[0], 'wpv-taxonomy-') === 0 && function_exists($shortcode[2])) {
if ($call_back) {
call_user_func($call_back, $index, $shortcode[1], $shortcode[1], "", $shortcode[0]);
}
$index += 1;
}
}
if (in_array('view', $types)) {
// we need to add the available views.
$view_available = $wpdb->get_results("SELECT ID, post_title FROM {$wpdb->posts} WHERE post_type='view' AND post_status in ('publish')");
foreach($view_available as $view) {
$editor->add_insert_shortcode_menu($view->post_title, 'wpv-view name="' . $view->post_title . '"', __('View', 'wpv-views'));
$index += 1;
}
}
if (in_array('taxonomy-view', $types)) {
// we need to add the available Taxonomy views.
$view_available = $wpdb->get_results("SELECT ID, post_title FROM {$wpdb->posts} WHERE post_type='view' AND post_status in ('publish')");
foreach($view_available as $view) {
$view_settings = get_post_meta($view->ID, '_wpv_settings', true);
if (isset($view_settings['query_type'][0]) && $view_settings['query_type'][0] == 'taxonomy') {
if ($call_back) {
call_user_func($call_back, $index, $view->post_title, '', __('Taxonomy View', 'wpv-views'), 'wpv-view name="' . $view->post_title . '"');
}
$index += 1;
}
}
}
if (in_array('post-view', $types)) {
// we need to add the available Post views.
$view_available = $wpdb->get_results("SELECT ID, post_title FROM {$wpdb->posts} WHERE post_type='view' AND post_status in ('publish')");
foreach($view_available as $view) {
$view_settings = get_post_meta($view->ID, '_wpv_settings', true);
if (isset($view_settings['query_type'][0]) && $view_settings['query_type'][0] == 'posts') {
if ($call_back) {
call_user_func($call_back, $index, $view->post_title, '', __('Post View', 'wpv-views'), 'wpv-view name="' . $view->post_title . '"');
}
$index += 1;
}
}
}
if (in_array('wpml', $types)) {
global $sitepress;
if (isset($sitepress)) {
$editor->add_insert_shortcode_menu('WPML lang switcher', 'wpml-lang-switcher', 'WPML');
$index += 1;
global $icl_language_switcher;
if (isset($icl_language_switcher)) {
$editor->add_insert_shortcode_menu('WPML lang footer', 'wpml-lang-footer', 'WPML');
$index += 1;
}
global $iclCMSNavigation;
if (isset($iclCMSNavigation)) {
//$editor->add_insert_shortcode_menu('WPML breadcrumbs', 'wpml-breadcrumbs', 'WPML');
//$index += 1;
$editor->add_insert_shortcode_menu('WPML sidebar', 'wpml-sidebar', 'WPML');
$index += 1;
}
}
if (defined('WPSEO_VERSION')) {
$editor->add_insert_shortcode_menu('Yoast SEO breadcrumbs', 'yoast-breadcrumbs', 'Yoast SEO');
$index += 1;
}
}
if ($editor) {
// $editor->render_js();
}
return $index;
}
function wpv_post_taxonomies_shortcode() {
add_shortcode('wpv-post-taxonomy', 'wpv_post_taxonomies_shortcode_render');
add_filter('editor_addon_menus_wpv-views', 'wpv_post_taxonomies_editor_addon_menus_wpv_views_filter', 11);
}
/**
* Views-Shortcode: wpv-post-taxonomy
*
* Description: Display the taxonomy for the current post.
*
* Parameters:
* 'type' => The name of the taxonomy to be displayed
* 'separator' => Separator to use when there are multiple taxonomy terms for the post. The default is a comma.
* 'format' => 'link', 'text' or 'url'. Defaults to 'link'
* 'show' => 'name', 'description', 'slug' or 'count'. Defaults to 'name'
*
*/
function wpv_post_taxonomies_shortcode_render($atts) {
$post_id_atts = new WPV_wpcf_switch_post_from_attr_id($atts);
extract(
shortcode_atts( array('format' => 'link',
'show' => 'name'), $atts )
);
global $wplogger;
$out = '';
if (empty($atts['type'])) {
return $out;
}
$types = explode(',', @strval($atts['type']));
if (empty($types)) {
return $out;
}
global $post;
$separator = !empty($atts['separator']) ? @strval($atts['separator']) : ', ';
$out_terms = array();
foreach ($types as $taxonomy_slug) {
$terms = get_the_terms($post->ID, $taxonomy_slug);
if ( $terms && !is_wp_error( $terms )) {
foreach ($terms as $term) {
$text = $term->name;
switch ($show) {
case 'description':
if ($term->description != '') {
$text = $term->description;
}
break;
case 'count':
$text = $term->count;
break;
case 'slug':
$text = $term->slug;
break;
}
$term_link = get_term_link($term->slug, $taxonomy_slug);
if (is_wp_error($term_link)) {
$wplogger->log('Term invalid - term_slug = ' . $term->slug . ' - taxonomy_slug = ' . $taxonomy_slug, WPLOG_DEBUG);
}
if ($format == 'text') {
$out_terms[] = $text;
} else if ($format == 'url') {
$out_terms[] = $term_link;
} else {
$out_terms[] = '<a href="' . $term_link . '">' . $text . '</a>';
}
}
}
}
if (!empty($out_terms)) {
$out = implode($separator, $out_terms);
}
return $out;
}
function wpv_post_taxonomies_editor_addon_menus_wpv_views_filter($items) {
$taxonomies = get_taxonomies('', 'objects');
$add = array();
foreach ($taxonomies as $taxonomy_slug => $taxonomy) {
if ($taxonomy_slug == 'nav_menu' || $taxonomy_slug == 'link_category'
|| $taxonomy_slug == 'post_format') {
continue;
}
$add[__('Taxonomy', 'wpv-views')][$taxonomy->label] = array($taxonomy->label, 'wpv-post-taxonomy type="' . $taxonomy_slug . '" separator=", " format="link" show="name"', __('Category', 'wpv-views'), '');
}
$part_one = array_slice($items, 0, 1);
$part_two = array_slice($items, 1);
$items = $part_one + $add + $part_two;
return $items;
}
function wpv_do_shortcode($content) {
$content = apply_filters('wpv-pre-do-shortcode', $content);
// HACK HACK HACK
// fix up a problem where shortcodes are not handled
// correctly by WP when there a next to each other
$content = str_replace('][', ']###SPACE###[', $content);
$content = str_replace(']###SPACE###[/', '][/', $content);
$content = do_shortcode($content);
$content = str_replace('###SPACE###', '', $content);
return $content;
}
add_shortcode('wpv-filter-order', 'wpv_filter_shortcode_order');
function wpv_filter_shortcode_order($atts){
extract(
shortcode_atts( array(), $atts )
);
global $WP_Views;
$view_settings = $WP_Views->get_view_settings();
$view_settings = wpv_filter_get_order_arg($view_settings, $view_settings);
$order_selected = $view_settings['order'];
$orders = array('DESC', 'ASC');
return wpv_filter_show_user_interface('wpv_order', $orders, $order_selected, $atts['style']);
}
add_shortcode('wpv-filter-types-select', 'wpv_filter_shortcode_types');
function wpv_filter_shortcode_types($atts){
extract(
shortcode_atts( array(), $atts )
);
global $WP_Views;
$view_settings = $WP_Views->get_view_settings();
$view_settings = wpv_filter_get_post_types_arg($view_settings, $view_settings);
$post_types_selected = $view_settings['post_type'];
$post_types = get_post_types(array('public'=>true));
return wpv_filter_show_user_interface('wpv_post_type', $post_types, $post_types_selected, $atts['style']);
}
/**
* Add a shortcode for the search input from the user
*
*/
add_shortcode('wpv-filter-search-box', 'wpv_filter_search_box');
function wpv_filter_search_box($atts){
extract(
shortcode_atts( array(), $atts )
);
global $WP_Views;
$view_settings = $WP_Views->get_view_settings();
if ($view_settings['query_type'][0] == 'posts') {
if ($view_settings && isset($view_settings['post_search_value'])) {
$value = 'value="' . $view_settings['post_search_value'] . '"';
} else {
$value = '';
}
if (isset($_GET['wpv_post_search'])) {
$value = 'value="' . $_GET['wpv_post_search'] . '"';
}
return '<input type="text" name="wpv_post_search" ' . $value . '/>';
}
if ($view_settings['query_type'][0] == 'taxonomy') {
if ($view_settings && isset($view_settings['taxonomy_search_value'])) {
$value = 'value="' . $view_settings['taxonomy_search_value'] . '"';
} else {
$value = '';
}
if (isset($_GET['wpv_taxonomy_search'])) {
$value = 'value="' . $_GET['wpv_taxonomy_search'] . '"';
}
return '<input type="text" name="wpv_taxonomy_search" ' . $value . '/>';
}
}
$wpv_for_each_index = array(); // global for storing the current wpv-for-each index
/**
* Views-Shortcode: wpv-for-each
*
* Description: Iterate through multple items in a post meta field and output the enclosed text for each item
*
* Parameters:
* 'field' => The name of post meta field.
*
* Example usage:
*
* Output the field values as an ordered list
* <ol>[wpv-for-each field="my-field"]<li>[wpv-post-field name="my-field]</li>[/wpv-for-each]<ol>
*
**/
add_shortcode('wpv-for-each', 'wpv_for_each_shortcode');
function wpv_for_each_shortcode($atts, $value){
extract(
shortcode_atts( array('field' => ''), $atts )
);
if ($field == '') {
return wpv_do_shortcode($value);
}
$out = '';
global $post, $wpv_for_each_index;
if(!empty($post)){
$meta = get_post_meta($post->ID, $field);
if (!$meta) {
return $value;
}
// iterate through the items and set the for-each index
$wpv_for_each_index[] = 0;
for($i = 0; $i < count($meta); $i++) {
// set the for-each index and output
$wpv_for_each_index[count($wpv_for_each_index) - 1] = $i;
$out .= wpv_do_shortcode($value);
}
array_pop($wpv_for_each_index);
}
return $out;
}
// set the for-each index
add_filter('wpv-for-each-index', 'wpv_for_each_index');
function wpv_for_each_index($index) {
global $wpv_for_each_index;
if (count($wpv_for_each_index) > 0) {
return end($wpv_for_each_index);
}
return $index;
}
// WPML shortcodes to add to Views.
add_shortcode('wpml-lang-switcher', 'wpv_wpml_lang_switcher');
function wpv_wpml_lang_switcher($atts, $value){
ob_start();
do_action('icl_language_selector');
$result = ob_get_clean();
return $result;
}
add_shortcode('wpml-lang-footer', 'wpv_wpml_lang_footer');
function wpv_wpml_lang_footer($atts, $value){
global $icl_language_switcher;
if (isset($icl_language_switcher)) {
ob_start();
$icl_language_switcher->language_selector_footer_style();
$icl_language_switcher->language_selector_footer();
$result = ob_get_clean();
return $result;
}
return '';
}
/*
add_shortcode('wpml-breadcrumbs', 'wpv_wpml_breadcrumbs');
function wpv_wpml_breadcrumbs($atts, $value){
ob_start();
global $iclCMSNavigation;
if (isset($iclCMSNavigation)) {
$iclCMSNavigation->cms_navigation_breadcrumb('');
}
$result = ob_get_clean();
return $result;
}
*/
add_shortcode('wpml-sidebar', 'wpv_wpml_sidebar');
function wpv_wpml_sidebar($atts, $value){
ob_start();
do_action('icl_navigation_sidebar', '');
$result = ob_get_clean();
return $result;
}
add_shortcode('yoast-breadcrumbs', 'wpv_yoast_breadcrumbs');
function wpv_yoast_breadcrumbs($atts, $value){
if ( function_exists('yoast_breadcrumb') ) {
return yoast_breadcrumb("","",false);
}
return '';
}