У меня есть короткий код, который публикует последние записи в блоге из определенной категории на одной из моих веб-страниц, однако я хочу показать статическую ссылку в конце каждого столбца, есть ли все равно сделать это?Добавление ссылки в shortcode Wordpress
следующий код используется для отображения сообщения:
<?php echo do_shortcode('[display-posts category="competitions" posts_per_page="4" include_excerpt="true" image_size="thumbnail" wrapper="ul"]');
Спасибо заранее.
<?php
// Create the shortcode
add_shortcode('display-posts', 'be_display_posts_shortcode');
function be_display_posts_shortcode($atts) {
// Original Attributes, for filters
$original_atts = $atts;
// Pull in shortcode attributes and set defaults
$atts = shortcode_atts(array(
'title' => '',
'author' => '',
'category' => '',
'date_format' => '(n/j/Y)',
'display_posts_off' => false,
'exclude_current' => false,
'id' => false,
'ignore_sticky_posts' => false,
'image_size' => false,
'include_title' => true,
'include_author' => false,
'include_content' => false,
'include_date' => false,
'include_excerpt' => false,
'meta_key' => '',
'meta_value' => '',
'no_posts_message' => '',
'offset' => 0,
'order' => 'DESC',
'orderby' => 'date',
'post_parent' => false,
'post_status' => 'publish',
'post_type' => 'post',
'posts_per_page' => '10',
'tag' => '',
'tax_operator' => 'IN',
'tax_term' => false,
'taxonomy' => false,
'wrapper' => 'ul',
'wrapper_class' => 'display-posts-listing',
'wrapper_id' => false,
), $atts, 'display-posts');
// End early if shortcode should be turned off
if($atts['display_posts_off'])
return;
$shortcode_title = sanitize_text_field($atts['title']);
$author = sanitize_text_field($atts['author']);
$category = sanitize_text_field($atts['category']);
$date_format = sanitize_text_field($atts['date_format']);
$exclude_current = be_display_posts_bool($atts['exclude_current']);
$id = $atts['id']; // Sanitized later as an array of integers
$ignore_sticky_posts = be_display_posts_bool($atts['ignore_sticky_posts']);
$image_size = sanitize_key($atts['image_size']);
$include_title = be_display_posts_bool($atts['include_title']);
$include_author = be_display_posts_bool($atts['include_author']);
$include_content = be_display_posts_bool($atts['include_content']);
$include_date = be_display_posts_bool($atts['include_date']);
$include_excerpt = be_display_posts_bool($atts['include_excerpt']);
$meta_key = sanitize_text_field($atts['meta_key']);
$meta_value = sanitize_text_field($atts['meta_value']);
$no_posts_message = sanitize_text_field($atts['no_posts_message']);
$offset = intval($atts['offset']);
$order = sanitize_key($atts['order']);
$orderby = sanitize_key($atts['orderby']);
$post_parent = $atts['post_parent']; // Validated later, after check for 'current'
$post_status = $atts['post_status']; // Validated later as one of a few values
$post_type = sanitize_text_field($atts['post_type']);
$posts_per_page = intval($atts['posts_per_page']);
$tag = sanitize_text_field($atts['tag']);
$tax_operator = $atts['tax_operator']; // Validated later as one of a few values
$tax_term = sanitize_text_field($atts['tax_term']);
$taxonomy = sanitize_key($atts['taxonomy']);
$wrapper = sanitize_text_field($atts['wrapper']);
$wrapper_class = sanitize_html_class($atts['wrapper_class']);
if(!empty($wrapper_class))
$wrapper_class = ' class="' . $wrapper_class . '"';
$wrapper_id = sanitize_html_class($atts['wrapper_id']);
if(!empty($wrapper_id))
$wrapper_id = ' id="' . $wrapper_id . '"';
// Set up initial query for post
$args = array(
'category_name' => $category,
'order' => $order,
'orderby' => $orderby,
'post_type' => explode(',', $post_type),
'posts_per_page' => $posts_per_page,
'tag' => $tag,
);
// Ignore Sticky Posts
if($ignore_sticky_posts)
$args['ignore_sticky_posts'] = true;
// Meta key (for ordering)
if(!empty($meta_key))
$args['meta_key'] = $meta_key;
// Meta value (for simple meta queries)
if(!empty($meta_value))
$args['meta_value'] = $meta_value;
// If Post IDs
if($id) {
$posts_in = array_map('intval', explode(',', $id));
$args['post__in'] = $posts_in;
}
// If Exclude Current
if($exclude_current)
$args['post__not_in'] = array(get_the_ID());
// Post Author
if(!empty($author))
$args['author_name'] = $author;
// Offset
if(!empty($offset))
$args['offset'] = $offset;
// Post Status
$post_status = explode(', ', $post_status);
$validated = array();
$available = array('publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit', 'trash', 'any');
foreach ($post_status as $unvalidated)
if (in_array($unvalidated, $available))
$validated[] = $unvalidated;
if(!empty($validated))
$args['post_status'] = $validated;
// If taxonomy attributes, create a taxonomy query
if (!empty($taxonomy) && !empty($tax_term)) {
// Term string to array
$tax_term = explode(', ', $tax_term);
// Validate operator
if(!in_array($tax_operator, array('IN', 'NOT IN', 'AND')))
$tax_operator = 'IN';
$tax_args = array(
'tax_query' => array(
array(
'taxonomy' => $taxonomy,
'field' => 'slug',
'terms' => $tax_term,
'operator' => $tax_operator
)
)
);
// Check for multiple taxonomy queries
$count = 2;
$more_tax_queries = false;
while(
isset($original_atts['taxonomy_' . $count]) && !empty($original_atts['taxonomy_' . $count]) &&
isset($original_atts['tax_' . $count . '_term']) && !empty($original_atts['tax_' . $count . '_term'])
):
// Sanitize values
$more_tax_queries = true;
$taxonomy = sanitize_key($original_atts['taxonomy_' . $count]);
$terms = explode(', ', sanitize_text_field($original_atts['tax_' . $count . '_term']));
$tax_operator = isset($original_atts['tax_' . $count . '_operator']) ? $original_atts['tax_' . $count . '_operator'] : 'IN';
$tax_operator = in_array($tax_operator, array('IN', 'NOT IN', 'AND')) ? $tax_operator : 'IN';
$tax_args['tax_query'][] = array(
'taxonomy' => $taxonomy,
'field' => 'slug',
'terms' => $terms,
'operator' => $tax_operator
);
$count++;
endwhile;
if($more_tax_queries):
$tax_relation = 'AND';
if(isset($original_atts['tax_relation']) && in_array($original_atts['tax_relation'], array('AND', 'OR')))
$tax_relation = $original_atts['tax_relation'];
$args['tax_query']['relation'] = $tax_relation;
endif;
$args = array_merge($args, $tax_args);
}
// If post parent attribute, set up parent
if($post_parent) {
if('current' == $post_parent) {
global $post;
$post_parent = get_the_ID();
}
$args['post_parent'] = intval($post_parent);
}
// Set up html elements used to wrap the posts.
// Default is ul/li, but can also be ol/li and div/div
$wrapper_options = array('ul', 'ol', 'div');
if(! in_array($wrapper, $wrapper_options))
$wrapper = 'ul';
$inner_wrapper = 'div' == $wrapper ? 'div' : 'li';
$listing = new WP_Query(apply_filters('display_posts_shortcode_args', $args, $original_atts));
if (! $listing->have_posts())
return apply_filters('display_posts_shortcode_no_results', wpautop($no_posts_message));
$inner = '';
while ($listing->have_posts()): $listing->the_post(); global $post;
$image = $date = $author = $excerpt = $content = '';
if ($include_title)
$title = '<a class="title" href="' . apply_filters('the_permalink', get_permalink()) . '">' . get_the_title() . '</a>';
if ($image_size && has_post_thumbnail())
$image = '<a class="image" href="' . get_permalink() . '">' . get_the_post_thumbnail(get_the_ID(), $image_size) . '</a> ';
if ($include_date)
$date = ' <span class="date">' . get_the_date($date_format) . '</span>';
if($include_author)
$author = apply_filters('display_posts_shortcode_author', ' <span class="author">by ' . get_the_author() . '</span>');
if ($include_excerpt)
$excerpt = ' <span class="excerpt-dash">-</span> <span class="excerpt">' . get_the_excerpt() . '</span>';
if($include_content) {
add_filter('shortcode_atts_display-posts', 'be_display_posts_off', 10, 3);
$content = '<div class="content">' . apply_filters('the_content', get_the_content()) . '</div>';
remove_filter('shortcode_atts_display-posts', 'be_display_posts_off', 10, 3);
}
$class = array('listing-item');
$class = sanitize_html_class(apply_filters('display_posts_shortcode_post_class', $class, $post, $listing, $original_atts));
$output = '<' . $inner_wrapper . ' class="' . implode(' ', $class) . '">' . $image . $title . $date . $author . $excerpt . $content . '</' . $inner_wrapper . '>';
// If post is set to private, only show to logged in users
if('private' == get_post_status(get_the_ID()) && !current_user_can('read_private_posts'))
$output = '';
$inner .= apply_filters('display_posts_shortcode_output', $output, $original_atts, $image, $title, $date, $excerpt, $inner_wrapper, $content, $class);
endwhile; wp_reset_postdata();
$open = apply_filters('display_posts_shortcode_wrapper_open', '<' . $wrapper . $wrapper_class . $wrapper_id . '>', $original_atts);
$close = apply_filters('display_posts_shortcode_wrapper_close', '</' . $wrapper . '>', $original_atts);
$return = $open;
if($shortcode_title) {
$title_tag = apply_filters('display_posts_shortcode_title_tag', 'h2', $original_atts);
$return .= '<' . $title_tag . ' class="display-posts-title">' . $shortcode_title . '</' . $title_tag . '>' . "\n";
}
$return .= $inner . $close;
return $return;
}
/**
* Turn off display posts shortcode
* If display full post content, any uses of [display-posts] are disabled
*
* @param array $out, returned shortcode values
* @param array $pairs, list of supported attributes and their defaults
* @param array $atts, original shortcode attributes
* @return array $out
*/
function be_display_posts_off($out, $pairs, $atts) {
$out['display_posts_off'] = true;
return $out;
}
/**
* Convert string to boolean
* because (bool) "false" == true
*
*/
function be_display_posts_bool($value) {
return !empty($value) && 'true' == $value ? true : false;
}
Редактируйте PHP-код короткого кода, чтобы добавить URL-адрес! –
Итак, вы хотите добавить статическую ссылку на каждую запись результата короткого кода? Можете ли вы показать нам код для этого короткого кода? – Jerodev
Как мне сделать это Ахилеш? – Ricky