我正在尝试动态生成<a name="">
Wordpress插件内部的链接引用。插件将在其生成的帖子中输出此链接引用。这个插件生成的帖子类别总是在变化,所以当我们从单独的页面链接到这些帖子时,我们仍然需要能够以某种方式单独识别每个帖子。我最好的猜测是用一个数字(即1、2、3、4等)来引用它们。
代码如下。。。。。在检查代码之前,请阅读本文的底部。
<?php
/*
Plugin Name: Posts for Page Plugin
Plugin URI: http://www.mywebdeveloperblog.com/development/wordpress/posts-for-page-
wordpress-plugin
Description: This plugin allows for posts to be assigned to pages as snippets or
full posts. Posts can be selected by category slug, category id, tag slug, single
post id, author and ordered by date or title.
Version: 1.5
Author: Simon Hibbard
Author URI: http://www.mywebdeveloperblog.com/
License: GPL2
*/
?>
<?php
//tell wordpress to register the children-excerpt shortcode
add_shortcode("posts-for-page", "sc_posts_for_page");
function remove_images( $content ) {
$postOutput = preg_replace(\'/<img[^>]+./\',\'\', $content);
return $postOutput;
}
//children excerpt shortcode worker function
function sc_posts_for_page($atts, $content = null){
if($atts[\'length\'] > 0 ){
}else{
$atts[\'length\'] = 50;
}
//echo $atts[\'read_more\'];
if($atts[\'read_more\'] != "" ){
$_opts[\'readMoreText\'] = $atts[\'read_more\'];
}else{
$_opts[\'readMoreText\'] = "Read More »";
}
if($atts[\'prev_text\'] != "" ){
$_opts[\'prevText\'] = $atts[\'prev_text\'];
}else{
$_opts[\'prevText\'] = "« Newer Entries";
}
if($atts[\'next_text\'] != "" ){
$_opts[\'nextText\'] = $atts[\'next_text\'];
}else{
$_opts[\'nextText\'] = "Older Entries » ";
}
// set values from the shortcode
$_opts[\'cat_slug\'] = $atts[\'cat_slug\'];
$_opts[\'cat\'] = $atts[\'cat\'];
$_opts[\'tag_slug\'] = $atts[\'tag_slug\'];
$_opts[\'order_by\'] = $atts[\'order_by\'];
$_opts[\'post_id\'] = $atts[\'post_id\'];
$_opts[\'author\'] = $atts[\'author\'];
$_opts[\'num\'] = $atts[\'num\'];
$_opts[\'showFullPost\'] = $atts[\'show_full_posts\'];
// handle paging if limit on posts set
//if($_opts[\'num\'] != "")
//{
// $thispage = get_permalink();
// $_opts[\'page_num\'] = get_query_var(\'page\');
// if($_opts[\'page_num\'] != "")
// {
// $prev = $_opts[\'page_num\'] - 1;
// $next = $_opts[\'page_num\'] + 1;
// if($prev == 0)
// {
// $prevLink = "<a href=\'" . $thispage . "\'
class=\'pfpPrev\'>Prev</a>";
// }
// else
// {
// $prevLink = "<a href=\'" . $thispage . "/?page=" .
$prev . "\' class=\'pfpPrev\'>Prev</a>";
// }
// $nextLink = "<a href=\'" . $thispage . "/?page=" . $next . "\'
class=\'pfpPrev\'>Next</a>";
// }
// else
// {
// $prevLink = "";
// $nextLink = "<a href=\'" . $thispage . "?page=1\'
class=\'pfpPrev\'>Next</a>";
// }
//}
global $paged;
if (empty($paged)) {
$_opts[\'cur_page\'] = 1;
}
else
{
$_opts[\'cur_page\'] = $paged;
}
// these do not currently work - wp needs the image already saved to a size we just use wp thumbnails for now
//$_opts[\'imageH\'] = $atts[\'thumb_h\'];
//$_opts[\'imageW\'] = $atts[\'thumb_w\'];
$_opts[\'hide_images\'] = $atts[\'hide_images\'];
//get the id of the current article that is calling the shortcode
$parent_id = get_the_ID();
$output = "";
$i = 0;
$children = pfp_get_posts($_opts);
if (is_array($children))
{
if(count($children) <= 0){
$out = "<strong>Items for Page:</strong> There are no posts that match the selection criteria.";
return $out;
}
foreach( $children as $child ) {
$title = $child->post_title;
$link = get_permalink($child->ID);
if($_opts[\'showFullPost\'] == "true")
{
$output .= "<div class=\'pfpItem entry-content\'>";
$output .= "<h2 class=\'entry-title\'><a href=\'$link\'>$title</a></h2>";
$output .= $child->post_content;
$output .= "<div class=\'clear\'></div>";
//$output .= "<hr>";
$output .= "</div>";
}
else
{
// remove all images from the post
$child->post_content = remove_images($child->post_content);
$args = array(
\'numberposts\' => 1,
\'order\'=> \'ASC\',
\'post_mime_type\' => \'image\',
\'post_parent\' => $child->ID ,
\'post_status\' => null,
\'post_type\' => \'attachment\'
);
if($_opts[\'hide_images\'] == \'true\')
{
$imageSrc = \'\';
}
else
{
//get the first image and resize it
$attachments = get_children( $args );
//echo "here" .$_opts[\'imageH\'];
if ($attachments) {
foreach($attachments as $attachment) {
//if(($_opts[\'imageH\'] > 0) && ($_opts[\'imageW\'] > 0)){
// // get size based on params
// $size = array($_opts[\'imageW\'], $_opts[\'imageH\']);
// echo "Here" . $size[0];
// $imageSrc = \'<img src="\'.wp_get_attachment_image_src( $attachment->ID, $size).\'" />\';
//}else{
$image_attributes = wp_get_attachment_image_src( $attachment->ID, \'thumbnail\' ) ? wp_get_attachment_image_src( $attachment->ID, \'thumbnail\' ) : wp_get_attachment_image_src( $attachment->ID, \'full\' );
$imageSrc = \'<img src="\'.wp_get_attachment_thumb_url( $attachment->ID ).\'" />\';
//}
}
}
else
{
$imageSrc = \'\';
}
}
//split excerpt into array for processing
$words = explode(\' \', strip_tags($child->post_content));
//chop off the excerpt based on the atts->lenth
$words = array_slice($words, 0, $atts[\'length\']);
//merge the array of words for the excerpt back into sentances
$child_excerpt = $imageSrc . implode(\' \', $words);
$output .= "<div class=\'box\'>";
$output .= "<div class=\'border-top\'>";
$output .= "<div class=\'border-bottom\'>";
$output .= "<div class=\'corner-top-right\'>";
$output .= "<div class=\'corner-top-left\'>";
$output .= "<div class=\'corner-bottom-left\'>";
$output .= "<div class=\'corner-bottom-right\'>";
$output .= "<div class=\'indent-box\' style=\'margin-top:-10px\'>";
$output .= "<div class=\'container\'>";
//original plugin display code starts here
$output .= "<div class=\'pfpItem entry-summary\'>";
$output .= "<h2 class=\'entry-title\'><a name=\'<?php echo $i++; ?>\' style=\'color:#4a79a4; font-family:comic; font-size:1em\' href=\'$link\'>$title</a></h2>";
$output .= $child_excerpt ."...";
$output .= "<a href=\'$link\' class=\'pfpReadMore\'>" . $_opts[\'readMoreText\'] . "</a>";
$output .= "<div class=\'clear\'></div>";
//$output .= "<hr>";
$output .= "</div>";
//original plugin display code
$output .= "<br/><br/>";
$output .= "<img class=\'centerad\' src=\'/wp-content/themes/twentyten/images/affiliate/footer-banner4.png\' width=\'540\' height=\'100\'/>";
$output .= "</div>";
$output .= "</div>";
$output .= "</div>";
$output .= "</div>";
$output .= "</div>";
$output .= "</div>";
$output .= "</div>";
$output .= "</div>";
$output .= "</div>";
$output .= "<br/><br/>";
}
}
}
// output links
//if($_opts[\'num\'] != "")
//{
//echo $wp_query->found_posts;
// $output .= $prevLink;
// if($wp_query->found_posts > ($_opts[\'num\'] * $_opts[\'page_num\']))
// {
// $output .= $nextLink;
// }
//}
global $wp_query;
$page_links_total = $wp_query->max_num_pages;
//echo "currentpage:" . $_opts[\'cur_page\'];
//echo "totalpages:" . $page_links_total;
if($_opts[\'cur_page\'] > 1)
{
// show prev
//previous_posts_link($_opts[\'prevText\']);
$output .= "<span class=\'pfpNav\'>" . get_previous_posts_link($_opts[\'prevText\']) . "</span>";
}
if($_opts[\'cur_page\'] < $page_links_total)
{
// show next
//next_posts_link($_opts[\'nextText\']);
$output .= "<span class=\'pfpNav\'>" . get_next_posts_link($_opts[\'nextText\']) . "</span>";
}
wp_reset_query();
return $output;
}
function pfp_get_posts($pfp_opts) {
$params = array();
if ($pfp_opts[\'post_id\'] == \'\') { // for multiposts
if ($pfp_opts[\'tag_slug\'] != \'\'){
$params[\'tag_slug__in\'] = explode(",", $pfp_opts[\'tag_slug\']);
}
if ($pfp_opts[\'cat\'] != \'\'){
$params[\'category__in\'] = explode(",", $pfp_opts[\'cat\']);
}
if ($pfp_opts[\'cat_slug\'] != \'\') {
$params[\'category_name\'] = $pfp_opts[\'cat_slug\'];
}
if($pfp_opts[\'author\'] != \'\') {
$params[\'author\'] = $pfp_opts[\'author\'];
}
if($pfp_opts[\'order_by\'] != \'\') {
$params[\'order_by\'] = $pfp_opts[\'order_by\'];
}
if($pfp_opts[\'num\'] != \'\') {
//$params[\'numberposts\'] = $pfp_opts[\'num\'];
$params[\'posts_per_page\'] = $pfp_opts[\'num\'];
$params[\'paged\'] = $pfp_opts[\'cur_page\'];
//if($pfp_opts[\'page_num\'] != \'\') {
// work out offset depending on page num
//$offset = $pfp_opts[\'page_num\'] * $pfp_opts[\'num\'];
//$params[\'offset\'] = $offset;
//}
}
else
{
$params[\'posts_per_page\'] = -1; // gets them all
}
// apply whatever the case:
$params[\'suppress_filters\'] = false;
// get the posts
//$postslist = get_posts($params);
$postslist = query_posts($params);
}else{ // for single posts
$postslist[0] = wp_get_single_post($pfp_opts[\'post_id\']);
}
return $postslist;
}
//add_action(\'admin_menu\', \'my_plugin_menu\');
//function my_plugin_menu() {
//add_options_page(\'Posts for Page Plugin Options\', \'Posts for Page Plugin\', \'manage_options\', \'pfp-unique-identifier\', \'my_plugin_options\');
//}
function my_plugin_options() {
if (!current_user_can(\'manage_options\')) {
wp_die( __(\'You do not have sufficient permissions to access this page.\') );
}
echo \'<div class="wrap">\';
echo \'<p>How to use: In your page (HTML view) add shortcode e.g. [posts-in-page cat_slug=\\\'asp-net-programming-2\\\'] </p><p>This will get all posts with the category slug \\\'asp-net-programming-2\\\'</p> \';
echo \'<p>post_id - Gets a post by ID, tag_slug - gets posts by tag slug, cat - gets posts with a category ID, cat_slug - gets posts with this category slug, author - gets posts by author, order_by - date or title, num - number of posts to show</p>\';
echo \'</div>\';
}
add_action(\'wp_head\', \'get_pfp_css\');
function get_pfp_css()
{
echo \'<link type="text/css" rel="stylesheet" href="\' . get_bloginfo(\'wpurl\') . \'/wp-content/plugins/posts-for-page/pfp.css" />\' . "\\n";
}
?>
下面是我正试图在上面的代码中修改的输出的精确行(在上面的代码中,大约是页面下方的2/3)。请注意,我试图使用“增量”向
<a name="">
参考我不在乎标识符名称是什么,但我需要它自动生成,以便我可以在另一个页面的链接中引用它。
$output .= "<h2 class=\'entry-title\'><a name=\'<?php echo $i++; ?>\' style=\'color:#4a79a4; font-family:comic; font-size:1em\' href=\'$link\'>$title</a></h2>";