admin-functions.php

来自「php 开发的内容管理系统」· PHP 代码 · 共 1,864 行 · 第 1/4 页

PHP
1,864
字号

function get_default_link_to_edit() {
	if ( isset($_GET['linkurl']) )
		$link->link_url = wp_specialchars($_GET['linkurl'], 1);
	else
		$link->link_url = '';
	
	if ( isset($_GET['name']) )
		$link->link_name = wp_specialchars($_GET['name'], 1);
	else
		$link->link_name = '';
		
	return $link;
}

function add_link() {
	return edit_link();	
}

function edit_link($link_id = '') {
	if (!current_user_can('manage_links'))
		die(__("Cheatin' uh ?"));

	$_POST['link_url'] = wp_specialchars($_POST['link_url']);
	$_POST['link_url'] = preg_match('/^(https?|ftps?|mailto|news|gopher):/is', $_POST['link_url']) ? $_POST['link_url'] : 'http://' . $_POST['link_url'];
	$_POST['link_name'] = wp_specialchars($_POST['link_name']);
	$_POST['link_image'] = wp_specialchars($_POST['link_image']);
	$_POST['link_rss'] = wp_specialchars($_POST['link_rss']);
	$auto_toggle = get_autotoggle($_POST['link_category']);
	
	// if we are in an auto toggle category and this one is visible then we
	// need to make the others invisible before we add this new one.
	// FIXME Add category toggle func.
	//if (($auto_toggle == 'Y') && ($link_visible == 'Y')) {
	//	$wpdb->query("UPDATE $wpdb->links set link_visible = 'N' WHERE link_category = $link_category");
	//}

	if ( !empty($link_id) ) {
		$_POST['link_id'] = $link_id;
		return wp_update_link($_POST);
	} else {
		return wp_insert_link($_POST);
	}
}

function url_shorten($url) {
	$short_url = str_replace('http://', '', stripslashes($url));
	$short_url = str_replace('www.', '', $short_url);
	if ('/' == substr($short_url, -1))
		$short_url = substr($short_url, 0, -1);
	if (strlen($short_url) > 35)
		$short_url = substr($short_url, 0, 32).'...';
	return $short_url;
}

function selected($selected, $current) {
	if ($selected == $current)
		echo ' selected="selected"';
}

function checked($checked, $current) {
	if ($checked == $current)
		echo ' checked="checked"';
}

function return_categories_list($parent = 0) {
	global $wpdb;
	return $wpdb->get_col("SELECT cat_ID FROM $wpdb->categories WHERE category_parent = $parent ORDER BY category_count DESC");
}

function sort_cats($cat1, $cat2) {
	return strcasecmp($cat1['cat_name'], $cat2['cat_name']);
}

function get_nested_categories($default = 0, $parent = 0) {
	global $post_ID, $mode, $wpdb;

	if ($post_ID) {
		$checked_categories = $wpdb->get_col("
		     SELECT category_id
		     FROM $wpdb->categories, $wpdb->post2cat
		     WHERE $wpdb->post2cat.category_id = cat_ID AND $wpdb->post2cat.post_id = '$post_ID'
		     ");

		if (count($checked_categories) == 0) {
			// No selected categories, strange
			$checked_categories[] = $default;
		}

	} else {
		$checked_categories[] = $default;
	}

	$cats = return_categories_list($parent);
	$result = array ();

	if (is_array($cats)) {
		foreach ($cats as $cat) {
			$result[$cat]['children'] = get_nested_categories($default, $cat);
			$result[$cat]['cat_ID'] = $cat;
			$result[$cat]['checked'] = in_array($cat, $checked_categories);
			$result[$cat]['cat_name'] = get_the_category_by_ID($cat);
		}
	}
	
	usort($result, 'sort_cats');

	return $result;
}

function write_nested_categories($categories) {
	foreach ($categories as $category) {
		echo '<label for="category-', $category['cat_ID'], '" class="selectit"><input value="', $category['cat_ID'], '" type="checkbox" name="post_category[]" id="category-', $category['cat_ID'], '"', ($category['checked'] ? ' checked="checked"' : ""), '/> ', wp_specialchars($category['cat_name']), "</label>\n";

		if (isset ($category['children'])) {
			echo "\n<span class='cat-nest'>\n";
			write_nested_categories($category['children']);
			echo "</span>\n";
		}
	}
}

function dropdown_categories($default = 0) {
	write_nested_categories(get_nested_categories($default));
}

// Dandy new recursive multiple category stuff.
function cat_rows($parent = 0, $level = 0, $categories = 0) {
	global $wpdb, $class;

	if (!$categories)
		$categories = $wpdb->get_results("SELECT * FROM $wpdb->categories ORDER BY cat_name");

	if ($categories) {
		foreach ($categories as $category) {
			if ($category->category_parent == $parent) {
				$category->cat_name = wp_specialchars($category->cat_name);
				$pad = str_repeat('&#8212; ', $level);
				if ( current_user_can('manage_categories') ) {
					$edit = "<a href='categories.php?action=edit&amp;cat_ID=$category->cat_ID' class='edit'>".__('Edit')."</a></td>";
					$default_cat_id = get_option('default_category');

					if ($category->cat_ID != $default_cat_id)
						$edit .= "<td><a href='" . wp_nonce_url("categories.php?action=delete&amp;cat_ID=$category->cat_ID", 'delete-category_' . $category->cat_ID ) . "' onclick=\"return deleteSomething( 'cat', $category->cat_ID, '" . sprintf(__("You are about to delete the category &quot;%s&quot;.  All of its posts will go to the default category.\\n&quot;OK&quot; to delete, &quot;Cancel&quot; to stop."), js_escape($category->cat_name))."' );\" class='delete'>".__('Delete')."</a>";
					else
						$edit .= "<td style='text-align:center'>".__("Default");
				}
				else
					$edit = '';

				$class = ('alternate' == $class) ? '' : 'alternate';
				echo "<tr id='cat-$category->cat_ID' class='$class'><th scope='row'>$category->cat_ID</th><td>$pad $category->cat_name</td>
								<td>$category->category_description</td>
								<td>$category->category_count</td>
								<td>$edit</td>
								</tr>";
				cat_rows($category->cat_ID, $level +1, $categories);
			}
		}
	} else {
		return false;
	}
}

function page_rows($parent = 0, $level = 0, $pages = 0) {
	global $wpdb, $class, $post;
	if (!$pages)
		$pages = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_status = 'static' ORDER BY menu_order");

	if ($pages) {
		foreach ($pages as $post) {
			start_wp();
			if ($post->post_parent == $parent) {
				$post->post_title = wp_specialchars($post->post_title);
				$pad = str_repeat('&#8212; ', $level);
				$id = $post->ID;
				$class = ('alternate' == $class) ? '' : 'alternate';
?>
  <tr id='page-<?php echo $id; ?>' class='<?php echo $class; ?>'> 
    <th scope="row"><?php echo $post->ID; ?></th> 
    <td>
      <?php echo $pad; ?><?php the_title() ?> 
    </td> 
    <td><?php the_author() ?></td>
    <td><?php echo mysql2date('Y-m-d g:i a', $post->post_modified); ?></td> 
	<td><a href="<?php the_permalink(); ?>" rel="permalink" class="edit"><?php _e('View'); ?></a></td>
    <td><?php if ( current_user_can('edit_pages') ) { echo "<a href='post.php?action=edit&amp;post=$id' class='edit'>" . __('Edit') . "</a>"; } ?></td> 
    <td><?php if ( current_user_can('edit_pages') ) { echo "<a href='" . wp_nonce_url("post.php?action=delete&amp;post=$id", 'delete-post_' . $id) .  "' class='delete' onclick=\"return deleteSomething( 'page', " . $id . ", '" . sprintf(__("You are about to delete the &quot;%s&quot; page.\\n&quot;OK&quot; to delete, &quot;Cancel&quot; to stop."), js_escape(get_the_title()) ) . "' );\">" . __('Delete') . "</a>"; } ?></td> 
  </tr> 

<?php

				page_rows($id, $level +1, $pages);
			}
		}
	} else {
		return false;
	}
}

function wp_dropdown_cats($currentcat = 0, $currentparent = 0, $parent = 0, $level = 0, $categories = 0) {
	global $wpdb, $bgcolor;
	if (!$categories) {
		$categories = $wpdb->get_results("SELECT * FROM $wpdb->categories ORDER BY cat_name");
	}
	if ($categories) {
		foreach ($categories as $category) {
			if ($currentcat != $category->cat_ID && $parent == $category->category_parent) {
				$count = $wpdb->get_var("SELECT COUNT(post_id) FROM $wpdb->post2cat WHERE category_id = $category->cat_ID");
				$pad = str_repeat('&#8211; ', $level);
				$category->cat_name = wp_specialchars($category->cat_name);
				echo "\n\t<option value='$category->cat_ID'";
				if ($currentparent == $category->cat_ID)
					echo " selected='selected'";
				echo ">$pad$category->cat_name</option>";
				wp_dropdown_cats($currentcat, $currentparent, $category->cat_ID, $level +1, $categories);
			}
		}
	} else {
		return false;
	}
}

function link_category_dropdown($fieldname, $selected = 0) {
	global $wpdb;
	
	$results = $wpdb->get_results("SELECT cat_id, cat_name, auto_toggle FROM $wpdb->linkcategories ORDER BY cat_id");
	echo "\n<select name='$fieldname' size='1'>\n";
	foreach ($results as $row) {
		echo "\n\t<option value='$row->cat_id'";
		if ($row->cat_id == $selected)
			echo " selected='selected'";
		echo ">$row->cat_id : " . wp_specialchars($row->cat_name);
		if ($row->auto_toggle == 'Y')
			echo ' (auto toggle)';
		echo "</option>";
	}
	echo "\n</select>\n";
}

function wp_create_thumbnail($file, $max_side, $effect = '') {

		// 1 = GIF, 2 = JPEG, 3 = PNG

	if (file_exists($file)) {
		$type = getimagesize($file);

		// if the associated function doesn't exist - then it's not
		// handle. duh. i hope.

		if (!function_exists('imagegif') && $type[2] == 1) {
			$error = __('Filetype not supported. Thumbnail not created.');
		}
		elseif (!function_exists('imagejpeg') && $type[2] == 2) {
			$error = __('Filetype not supported. Thumbnail not created.');
		}
		elseif (!function_exists('imagepng') && $type[2] == 3) {
			$error = __('Filetype not supported. Thumbnail not created.');
		} else {

			// create the initial copy from the original file
			if ($type[2] == 1) {
				$image = imagecreatefromgif($file);
			}
			elseif ($type[2] == 2) {
				$image = imagecreatefromjpeg($file);
			}
			elseif ($type[2] == 3) {
				$image = imagecreatefrompng($file);
			}

			if (function_exists('imageantialias'))
				imageantialias($image, TRUE);

			$image_attr = getimagesize($file);

			// figure out the longest side

			if ($image_attr[0] > $image_attr[1]) {
				$image_width = $image_attr[0];
				$image_height = $image_attr[1];
				$image_new_width = $max_side;

				$image_ratio = $image_width / $image_new_width;
				$image_new_height = $image_height / $image_ratio;
				//width is > height
			} else {
				$image_width = $image_attr[0];
				$image_height = $image_attr[1];
				$image_new_height = $max_side;

				$image_ratio = $image_height / $image_new_height;
				$image_new_width = $image_width / $image_ratio;
				//height > width
			}

			$thumbnail = imagecreatetruecolor($image_new_width, $image_new_height);
			@ imagecopyresampled($thumbnail, $image, 0, 0, 0, 0, $image_new_width, $image_new_height, $image_attr[0], $image_attr[1]);

			// If no filters change the filename, we'll do a default transformation.
			if ( basename($file) == $thumb = apply_filters('thumbnail_filename', basename($file)) )
				$thumb = preg_replace('!(\.[^.]+)?$!', __('.thumbnail').'$1', basename($file), 1);

			$thumbpath = str_replace(basename($file), $thumb, $file);

			// move the thumbnail to it's final destination
			if ($type[2] == 1) {
				if (!imagegif($thumbnail, $thumbpath)) {
					$error = __("Thumbnail path invalid");
				}
			}
			elseif ($type[2] == 2) {
				if (!imagejpeg($thumbnail, $thumbpath)) {
					$error = __("Thumbnail path invalid");
				}
			}
			elseif ($type[2] == 3) {
				if (!imagepng($thumbnail, $thumbpath)) {
					$error = __("Thumbnail path invalid");
				}
			}

		}
	} else {
		$error = __('File not found');
	}

	if (!empty ($error)) {
		return $error;
	} else {
		return $thumbpath;
	}
}

// Some postmeta stuff
function has_meta($postid) {
	global $wpdb;

	return $wpdb->get_results("
			SELECT meta_key, meta_value, meta_id, post_id
			FROM $wpdb->postmeta
			WHERE post_id = '$postid'
			ORDER BY meta_key,meta_id", ARRAY_A);

}

function list_meta($meta) {
	global $post_ID;
	// Exit if no meta
	if (!$meta)
		return;
	$count = 0;
?>
<table id='meta-list' cellpadding="3">
	<tr>
		<th><?php _e('Key') ?></th>
		<th><?php _e('Value') ?></th>
		<th colspan='2'><?php _e('Action') ?></th>
	</tr>
<?php


	foreach ($meta as $entry) {
		++ $count;
		if ($count % 2)
			$style = 'alternate';
		else
			$style = '';
		if ('_' == $entry['meta_key'] { 0 })
			$style .= ' hidden';
		echo "
			<tr class='$style'>
				<td valign='top'><input name='meta[{$entry['meta_id']}][key]' tabindex='6' type='text' size='20' value='{$entry['meta_key']}' /></td>
				<td><textarea name='meta[{$entry['meta_id']}][value]' tabindex='6' rows='2' cols='30'>{$entry['meta_value']}</textarea></td>
				<td align='center'><input name='updatemeta' type='submit' class='updatemeta' tabindex='6' value='".__('Update')."' /><br />
				<input name='deletemeta[{$entry['meta_id']}]' type='submit' class='deletemeta' tabindex='6' value='".__('Delete')."' /></td>
			</tr>
		";
	}
	echo "
		</table>
	";
}

// Get a list of previously defined keys
function get_meta_keys() {
	global $wpdb;

	$keys = $wpdb->get_col("
			SELECT meta_key
			FROM $wpdb->postmeta
			GROUP BY meta_key
			ORDER BY meta_key");

	return $keys;
}

function meta_form() {
	global $wpdb;
	$keys = $wpdb->get_col("
			SELECT meta_key
			FROM $wpdb->postmeta
			GROUP BY meta_key
			ORDER BY meta_id DESC
			LIMIT 10");
?>
<h3><?php _e('Add a new custom field:') ?></h3>
<table cellspacing="3" cellpadding="3">
	<tr>
<th colspan="2"><?php _e('Key') ?></th>
<th><?php _e('Value') ?></th>
</tr>
	<tr valign="top">
		<td align="right" width="18%">
<?php if ($keys) : ?>
<select id="metakeyselect" name="metakeyselect" tabindex="7">
<option value="#NONE#"><?php _e('- Select -'); ?></option>
<?php

	foreach ($keys as $key) {
		echo "\n\t<option value='$key'>$key</option>";
	}
?>
</select> <?php _e('or'); ?>
<?php endif; ?>
</td>
<td><input type="text" id="metakeyinput" name="metakeyinput" tabindex="7" /></td>
		<td><textarea id="metavalue" name="metavalue" rows="3" cols="25" tabindex="8"></textarea></td>
	</tr>

</table>
<p class="submit"><input type="submit" name="updatemeta" tabindex="9" value="<?php _e('Add Custom Field &raquo;') ?>" /></p>
<?php

}

function add_meta($post_ID) {
	global $wpdb;

	$metakeyselect = $wpdb->escape(stripslashes(trim($_POST['metakeyselect'])));
	$metakeyinput = $wpdb->escape(stripslashes(trim($_POST['metakeyinput'])));
	$metavalue = $wpdb->escape(stripslashes(trim($_POST['metavalue'])));

	if ( ('0' === $metavalue || !empty ($metavalue)) && ((('#NONE#' != $metakeyselect) && !empty ($metakeyselect)) || !empty ($metakeyinput)) ) {
		// We have a key/value pair. If both the select and the 
		// input for the key have data, the input takes precedence:

		if ('#NONE#' != $metakeyselect)
			$metakey = $metakeyselect;

		if ($metakeyinput)
			$metakey = $metakeyinput; // default

		$result = $wpdb->query("
						INSERT INTO $wpdb->postmeta 
						(post_id,meta_key,meta_value) 
						VALUES ('$post_ID','$metakey','$metavalue')
					");
	}
} // add_meta

function delete_meta($mid) {
	global $wpdb;

	$result = $wpdb->query("DELETE FROM $wpdb->postmeta WHERE meta_id = '$mid'");
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?