WordPress.org

Ready to get started?Download WordPress

Codex

FAQ Working with WordPress

Back to FAQ

Contents

CAUTION!
Many of the answers provided on this FAQ refer to outdated versions of WordPress. Use caution when following some instructions, as some specifics may have changed. In particular, be wary of instructions that direct you to edit WordPress core files. We don't do things that way any more. The best way to alter how your website looks and works is by creating your own Child Theme that overrides only the settings you want to change and interacts only as needed with WordPress (just like a Plugin does) through action and filter hooks. Since all your customizations are contained in your Child Theme, you don't have to worry about all your changes being overwritten during the next upgrade cycle.

Administration

Can my posts have titles instead of /index.php?p=76?

See:

How can I find out if I have mod_rewrite?

To get information about your server, you can use the PHP Info function:

  • Paste this into a new Notepad / BBEdit file
<?php phpinfo(); ?>
  • Save as info.php
  • Upload to server. Visit in your browser (www.example.com/info.php)

That will give you info about your php version and mod_rewrite.

The info.php file returns a page outlining the details of your PHP installation. You can see if mod_rewrite is loaded. Under the apache header, look in the Loaded Modules section and see if mod_rewiite is listed.

How do I change file and folder permissions?

See:

Why are the version numbers not in any particular periodic sequence?

The version number for improved versions of WordPress might not follow a strictly monotonic or periodic numerical (or in the case of test releases, alphabetical) sequence, since the version numbers reflect relative progress, and the changes made to existing or previous versions. So, for example, since v1.2 is a majorly revamped version of v1.0 (with about 60% of the code having been touched), 1.1 was ’skipped’ along the way.

How do I turn on Permalinks, and what do I do about the errors?

See:

What are User Levels for and what permissions do different User Levels have?

See:

Roles and Capabilities replaces the concept of User Levels in newer versions of WordPress.

Does the 644 permissions on wp-config.php compromise the username and password to all other users on my shared server?

This is a limitation of the way PHP is set up on your server. If you previously used MovableType, Perl was probably set up with suexec so Movable Type executed as your user. In this case, PHP is running as the web server user, which is why it has to be at least 444. There is phpsuexec but it seems many hosts don’t use it.

However this is often not an issue on modern shared hosts because even though the file is “world" readable each account is set up with a "jailshell" which keeps people locked in their home directory, and PHP can be easily modified with an open_basedir restriction to keep people from writing PHP scripts to read your files. If you are really concerned, you should contact your host to see what measures they are taking.

How do I redirect users back to my blog's main page after they login?

By default, WordPress reroutes a registered user to the Administration Panels after they log into the blog. To change the page, there are WordPress Plugins that can handle the redirect, or you can set the Theme function to handle it. See Function_Reference/wp_login_url.

How do I change permissions for my files so I can edit them using the Template Editor?

See:

How do I prevent my images from being hot-linked by another website?

You can use your .htaccess file to protect images from being hot linked, or, in other words, being linked-to from other websites. This can be a drain on your bandwidth, because if someone links directly to the image on your site, then you lose the bandwidth.

How do I backup and restore my WordPress database using phpMyadmin?

See:

How do I prevent comment flooding?

Comment flooding is when a lot of comments (probably spam) are posted to your website in a very short duration of time. This is only one aspect of the broader problem of comment spam in general, but it can quickly overwhelm a moderator's ability to manually delete the offending comments.

WordPress manages the worst floods automatically by default. Any commenters from the same IP or e-mail address (other than registered users with manage_options capabilities) that post within 15 seconds of their last comment gets their comment discarded. The time setting can be changed by a number of plugins that extend this functionality. You might also consider one of the many broader spam blocking plugins, such as Akismet, or even turning your comment system over to Disqus.

You could also just change the time setting by directly hacking the core file, but the correct way would be to create and install a very basic plugin and insert the following code:

function dam_the_flood( $dam_it, $time_last, $time_new ) {
	if ( ($time_new - $time_last) < 300 ) // time interval is 300
		return true;                  // seconds
	return false;
}
add_filter('comment_flood_filter', 'dam_the_flood', 10, 3);

Creating plugins can be very easy, the above code actually has most of the work done for you.

Why can't I delete the uncategorized Category?

Any Category with a non-zero value for # of Posts in the Administration > Manage > Categories cannot be deleted. The uncategorized Category might be assigned to some Posts, but all Pages are assigned the uncategorized Category. So even though there may be no posts assigned to the uncategorized Category, Pages are included in the count of # of Posts.

The default category cannot be deleted even if it is empty, however you can specify your default categories for posts or links on the Options - Writing page of the admin panel.

Why is there no Page Template option when writing or editing a Page?

If there is no Page Template option when writing or editing a Page it may because there is no template file with the proper structure. For the Page Template box to be available to assign to a Page there must be a least one template file in your theme that has a structure at the beginning of the template file that looks like this:

<?php
/*
Template Name: Links
*/
?>

That example is from the WordPress Default themes wp-content/themes/default/links.php file, so replace Links with your desired template name.

Note: Sometimes it is necessary to switch to the WordPress Default Theme, then back to your theme, for the Template choices to appear!


See also:

Page Templates

How can I have a static front page and posts display on a page called Blog?

If using WordPress as a CMS, you might want to present readers with a static front page, and then display your posts on another page called Blog. To accomplish that follow these instructions:

  • Create a Page and use "My Front Page" for the Page Title. Of course, in the content for that Page, you can enter the information you want presented on your site's front page (see example below if you want to display a post).
  • Create a Page and call it Blog. Nothing needs to be entered in the content field of this Page.
  • In Administration > Settings > Reading set the Front page displays to A static page, and select My Front Page for Front page:, and select Blog for the Posts page:.

If you want to further customize your front page, you can create a Template, and fit it to meet your needs:

  • With the help of the Template Hierarchy article, determine what Template is normally used to display your Pages (e.g. page.php or index.php).
  • Copy that template to myfront.php. If you were using the WordPress Default theme you would copy wp-content/themes/default/page.php to wp-content/themes/default/myfront.php.
  • In Administration > Appearance > Editor, edit the myfront.php and change the beginning of the file from:
<?php
/**
 * @package WordPress
 * @subpackage Default_Theme
 */

to:

<?php
/*
Template Name: MyFront
*/
?>
  • Then access the Page called Front in Administration > Page > Edit and set the Template to MyFront.
  • Once that's all working, begin changing myfront.php to make it look like what you want.
  • That's it. You are done.


Use this example for the 'MyFront' Page Template if you want to display one post, instead of the Page content, on your 'static front page':
<?php
/*
Template Name: MyFront
*/
?>

<?php get_header(); ?>

	<div id="content" class="narrowcolumn">

<?php
$args = array('posts_per_page' => 1, 'cat' => 1);
$the_query = new WP_Query( 'posts_per_page=1','cat=1' );
$the_query = new WP_Query( $args );
// The Loop
while ( $the_query->have_posts() ) :
	$the_query->the_post(); ?>

			<div <?php post_class() ?> id="post-<?php the_ID(); ?>">
				<h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
				<small><?php the_time('F jS, Y') ?> <!-- by <?php the_author() ?> --></small>

				<div class="entry">

					<?php	the_content('Read the rest of this entry »'); ?>
				</div>
				

				<p class="postmetadata"><?php the_tags('Tags: ', ', ', '<br />'); ?> Posted in <?php the_category(', ') ?> | <?php edit_post_link('Edit', '', ' | '); ?>  <?php comments_popup_link('No Comments »', '1 Comment »', '% Comments »'); ?></p>
			</div>
					
		<?php endwhile; ?>


		<div class="navigation">
			<div class="alignleft"><?php next_posts_link('« Older Entries') ?></div>
			<div class="alignright"><?php previous_posts_link('Newer Entries »') ?></div>
		</div>

	<?php else : ?>

		<h2 class="center">Not Found</h2>
		<p class="center">Sorry, but you are looking for something that isn't here.</p>
		<?php get_search_form(); ?>

<?php wp_reset_postdata(); ?>

	</div>

<?php get_sidebar(); ?>

<?php get_footer(); ?>

See:

How do I determine a Post, Page, Category, Tag, Link, Link Category, or User ID?

Sometimes it is necessary to know the ID of a particular Post, Page, Category, Tag, Link, Link Category, or User. To determine that ID, use one of these method:

  • Look in your browser status bar for the ID:
  1. Visit the related 'Edit' screen in your Administration Panel. For instance in the case of Posts visit Posts->Edit, for Pages visit Pages->Edit, and for Categories visit Posts->Categories.
  2. Now hover your mouse over the 'item' you need the ID. In the case of Pages, hover over that particular Page's title in the Title column and for Categories hover over the Categories Name in the Name column.
  3. Look at the status bar (at the bottom of your browser) and the you will find at the end of the line something like "post=123" or "cat_ID=67". In these cases, 123 is the Page ID, and 67 is the Category ID.
  • Install a plugin:
  1. Install and activate Reveal IDs for WP Admin, Simply Show IDs, or ShowID for Post/Page/Category/Tag/Comment.
  2. Find the ID displayed with each item.

Configuration

How can I change how the date and / or time is displayed?

See:

How can I control comments people make?

See:

What do the Discussion Options mean?

See:

How do I install plugins?

See:

How can I change what appears between Categories when I post in more than one Category?

To configure the way the post's categories display, open the index.php file and find the line <div class meta>. There you will see the following code:

<?php the_category() ?>

Inside of the parentheses ( ) and quote marks, add or change this to reflect the new look you desire.

If you would like to have commas between the categories, the tag should read:

<?php the_category(',') ?>

If you would like to have an arrow, the tag would look like this:

<?php the_category(' > ') ?>

If you would like to have a bullet, the tag would look like this:

<?php the_category(' &bull; ') ?>

If you would like the "pipe" ( | ) between the categories, the tag would look like this:

<?php the_category(' | ') ?>

Use your imagination and creativity to make the separations in the categories look any way you like.

Why are all the comments being moderated?

Go to the Options > Discussion panel and make sure that An administrator must approve the comment (regardless of any matches below) is unchecked. With that option selected, all comments are sent to the moderation queue to await approval. Make sure that Hold a comment in the queue if it contains more than x links is not blank and contains a number higher than zero. If this value is blank or zero, all comments containing links will be moderated. If the option mentioned above is unchecked, the link moderation value is higher than zero, and you still have this problem, your Spam Words list probably has blank lines, punctuation marks, or single letters between the information in the list. There should be spaces between the listed items or each item must be on its own line. If you have done this, then upgrade the comment spam plugins you have installed. If this continues to be a problem, deactivate the comment spam plugins one by one to determine the culprit and contact the plugin author for help.

How do I disable comments?

First, unchecked Allow people to post comments on the article on the Options > Discussion panel. This will only disable comments on future posts. Now, to completely disable comments, you will have to edit each past post and uncheck Allow Comments from the Write Post SubPanel. Alternatively, you could run this MySQL query from the command line on a shell account or using phpMyAdmin: UPDATE wp_posts SET comment_status="closed"; Or through a wp-cli `wp db query`.

If your goal is to permanently disable comments, then you should delete the wp-comments-post.php file as well.

How do I disable trackbacks and pingbacks?

First, unchecked Allow link notifications from other Weblogs (pingbacks and trackbacks.) on the Options > Discussion panel. This will only disable trackbacks and pingbacks on future posts. Now, to completely disable trackbacks and pingbacks, you will have to edit each past post and uncheck Allow Pings from the Write Post SubPanel. Alternatively, run this MySQL query from the command line on a shell account or using PHPMyAdmin: UPDATE wp_posts SET ping_status="closed";

If your goal is to permanently disable trackbacks and pingbacks, then you should delete the wp-trackback.php file as well.

How do I change the site admin name?

To change your Admin Name, in the Administration Panel, choose the Users->Your Profile tab. Make your changes there. However, you are not able to change the username from within the Administration panel. In order to do this you must directly edit the MySQL database, however this is not recommended as your username is not often seen by other users.

See:

How do I find the absolute path I need for uploading images?

To find the absolute path of a page, absolutepath.zip will help you. Download, unzip, ftp to the location of the page / image / directory and then call the file in your browser - http://www.example.com/images/absolutepath.php

Which files do I change to alter the way my blog looks?

The following files affect the public display of your site, and each can be easily changed by using the Built-in Editor from the Templates option in your admin screen:

   * index.php
     This affects the layout of your content.
   * style.css
     This is how the style and presentation of your blog is controlled.
   * wp-comments.php
     This controls the layout of user-submitted comments and trackbacks, 
     and the comments submission form.
   * wp-comments-popup.php
     Only needed if you decide to use a popup comments box.
     (Popup comments are off by default).

Be aware that if the theme you modify is updated, your modifications will be overwritten. To better organize your modifications and protect them from updates, consider creating a Child Theme in which to keep all your modifications.

Can I have popup comments?

Yes, but how to enable it and where is theme dependent. For your main page's comments links, converting them to a popup style is typically just a matter of adding the function call comments_popup_script() to your headers.php template <head> section. The best place to add it is just above the wp_head() call that should be right at the end of the <head> section.

<?php comments_popup_script() ?>
<?php wp_head(); ?>
</head>

You will also need the comments-popup.php template in your theme folder. If you don't have one, you can download an older version of WordPress from the release archive and extract it from the zip file. It will be in the default theme folder, the 2.7 version should do the trick.

If you want popup links on the single listing page as well, you'll need to locate the comments_template() call for the current comments, usually on the single.php template. Comment that call out and insert comments_popup_link(); right above it.

<?php comments_popup_link(); ?>
<? /* php comments_template( '', true ); */ ?>

How do I upload images?

To permit images to be uploaded to your site:

From the admin panel, go to Options -> Miscellaneous

Can I change the "Error establishing database connection" message to something more descriptive?

Just simply create a file to reside at wp-content/db-error.php, and in that file put the message you want displayed to users when WordPress determines the database connection is not available. That file will be used in place of "Error establishing database connection" message. You could even use the db-error.php to redirect users elsewhere. Here's an example for db-error.php:

<?php
  echo '<h2> This site is currently experiencing a problem with the database server.</h2>  Press your browser Reload button to try again!';
?>

Modifying

Can I change the Smilies?

See:

How do I edit files?

See:

What is The Loop?

See:

How can I change the URL-structure for my posts?

See:

How can I change URL-structure for my posts on a Windows server?

See:

How do I use WordPress Template Tags to change what is displayed on the blog?

See:

How do I get All links to open in a new window?

Put this inside the <head> section of your Theme's template header.php file:

<base target="_blank" />

See:

How can I add an image to my RSS feed?

See:

How can I stop my own comments being mailed to me?

WordPress version 1.2 This will stop WP from sending you a mail if the email address you used when you posted the comment was the same as the email address for the author of the post (which is the address the notification email gets sent to). This applies to v1.2 / 1.2.1 code ONLY.

In functions.php change the following line:

if ( == $user->user_email) return false; // If there's no email to send the comment to

to

if ( == $user->user_email || $comment->comment_author_email == $user->user_email) return false; // If there's no email to send the comment to

If I turn off comments, it says "Comments Off" on the weblog. so how do I remove that?

Depending on your theme, some other message of similar intent may be displayed. The specifics of how to remove this message is theme dependent. You should be able to find the offending text in your theme's comments.php file. If it's displayed by a PHP function, comment out the function with slash-asterisks '/*' and '*/' (without quotes) on either end of the function:

<?php /* _e( 'Comments are closed.' , 'twentytwelve' ); */ ?>

If it's simply HTML, comment out the enclosing HTML tags by adding '!-- ' after the first angle bracket and ' --' before the last angle bracket (not including the quotes, note the space after the first and before the last comment symbols):

<!-- p class="nocomments">Comments are closed.</p -->

If you decide later to restore the message, you can simply remove the comment symbols.

How do I change what is shown when I password protect a post?

Hook the filters 'the_title' and 'the_password_form'. Your filter function is passed exactly what the filter names imply. Use the str_replace() function to search out the offending text and replace it with your preference (or nothing). Note the 'the_title' filter fires for every single title, not just password protected posts, so you need to use the existence of the post_password property to know whether to apply the string replace function or not. Some themes may also have additional locations where content needs to be changed. For example, the twentyeleven theme requires a phrase to be changed on the comments.php template.

add_filter('the_title', 'replace_protected', 10, 2);
function replace_protected( $title, $id ) {
    $post = get_post( $id );
    if ( ! empty( $post->post_password ) ) {
        $title = str_replace('Protected:', 'Hidden:', $title);
    }
    return $title;
}
add_filter('the_password_form', 'replace_message');
function replace_message( $form ) {
    return str_replace('This post is password protected. To view it please enter your password below:',
        'Enter you password below to see the surprise:', $form);
}

How can I allow certain HTML tags in my comments?

WordPress versions prior to 1.2

If you would like to override the $allowedtags variable in kses.php you may do so in your my-hacks.php file, provided you add the following code after you set up the $allowedtags array.

define('CUSTOM_TAGS', true);

Later WordPress versions

Use a custom filter in your themes functions.php or plugin as explained here:

add_filter('preprocess_comment','fa_allow_tags_in_comments');
 
function fa_allow_tags_in_comments($data) {
	global $allowedtags; 
	$allowedtags['span'] = array('style'=>array());
	$allowedtags['p'] = array();   
	return $data;
}

How can I add advanced search ability to WordPress?

See:

Posts

How do I upload an image and display it in a post?

More recent versions of WordPress

More recent verions of WordPress allow uploads while writing posts by using the "Upload/Insert" or "Add Media" buttons found across the top of the posting panel on the new post screen (See Using Image and File Attachments). You can control where images are stored through the Miscellaneous panel in Settings.

  • From Administration > Settings > Miscellaneous
    • Make sure the correct information, such as wp-content/uploads is in Store uploads in this folder.
    • Don't forget to decide if you want to Organize my uploads into month- and year-based folders by checking that setting.
In older WordPress versions

To permit images to be uploaded to your site:

  • Then check main menu across the top. Click Upload

Refer to the following articles to align the image in the post:

See:

What is pingback?

See:

What is trackback?

See:

Where is the permalink to my post?

See:

Can I use desktop blogging software?

See

Can I blog by email?

See

Spam, Spammers, Comments

What can I do to stop comment spam?

See:

More Information on Comment Spam

See:

What Spam words do I need?

See:

Why are all the comments being moderated?

If you are getting all comments sent to moderation when they should not, it's probably your spam words list in Administration Panel->Options -> Discussion. It probably has either a single character, OR a blank line OR extra whitespace. Take those out.

Right click in the Spam Words box, Select All then Copy and paste it into Notepad to check it.

With spam plugins adding to that list, it's not easy to check for odd data, and it's easy to miss multiple blank lines. This way makes it easier.

Check it carefully :)

Importing and Exporting

How do I Import a WordPress WXR file when it says it is too large to import?

If a WordPress WXR file, an XML file exported from WordPress, is too large to import, there are several things you might try to overcome that limit.

  • Increase the amount of memory a PHP script may consume. Note: If using a shared hosting service, you may need to ask your host to increase the limit.
  1. Increase the memory limit setting in php.ini (e.g. memory_limit = 64M ;). Many hosts may not allow this.
  2. Increase the memory limit via .htaccess (e.g. php_value memory_limit 64M). Many hosts may not allow this.
  3. Increase the memory limit via wp-config.php (e.g. define('WP_MEMORY_LIMIT', '64MB');)
  • Increase the maximum amount of a time a PHP script will run. Note: If using a shared hosting service, you may need to ask your host to increase the limit.
  1. Increase the maximum execution time in php.ini (e.g. max_execution_time = 600 ;). Many hosts may not allow this.
  • Increase the PHP upload files size settings. Note: If using a shared hosting service, you may need to ask your host to increase the limit.
  1. Increase the setting values in php.ini (e.g. upload_max_filesize = 64M ; and post_max_size = 64M ;). Many hosts may not allow this.
  2. Increase the setting values via .htaccess (e.g. php_value upload_max_filesize 64M and php_value post_max_size = 64M). Many hosts may not allow this.
  3. Increase the setting values via ini_set lines in wp-config.php. Talk to your host for the correct values.
  • Increase the file upload size limit and/or file upload space limit:
  1. Login to wp-admin as an administrator.
  2. In the Site Admin navigation box, click "Options"
  3. Scroll down and change the settings for "Max upload file size" and/or "Blog upload space"
  • GZip the file. On some hosting services, a gzipped file can be automatically expanded in the background, without WordPress ever knowing the difference. This can allow you to make the file small enough to be fit into the maximum upload size constraints.
  1. On Windows, use 7Zip to create a gz archive out of the wxr file.
  2. On Linux, use the gzip command line.
  3. Make sure that the resulting file has the file extension of ".gz" before uploading it, as this is often necessary.
  4. This is not guaranteed to work, as it highly depends on the hosting configuration. If this fails, then try another method instead.
  • Break the WordPress WXR file into smaller pieces by separating the data between posts and pasting the header/footer into each file.
1. Always have the header
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:wp="http://wordpress.org/export/1.0/"
>
<channel>
including all info like category, tags, etc to just before the first  <item>
2. Always have the footer
</channel>
</rss>
3. In between, add the posts start with <item> end with </item> and check to see whether the XML file you're creating is less than or equal to 2MB. You'll get the hang of it.
4. As always, before importing the new XML's, backup the database of the blog you are importing the XML files to and might as well export XML file of that blog as well for good measure.

See:

How do I import links (blogroll) from another WordPress blog?

To import links (also called blogroll) from another WordPress blog is very easy. This assumes you have an 'old' blog where the links currently are stored, and a new blog where you want to import the links.

  • Visit http://oldblog.com/wp-links-opml.php. Then use SAVE AS to save the output, then use Administration > Tools > Import > Blogroll to import the file you saved.

or


Back to FAQ