SoFunction
Updated on 2025-03-10

Analysis of the usage of PHP functions for getting page links and titles in WordPress

get_permalink() (get article or page link)
get_permalink() is used to return links to articles or pages based on fixed connections. When getting the link, the get_permalink() function needs to know the ID of the article to be retrieved, and if it is in the loop, the current article will be automatically used by default.

usage

get_permalink( $id, $leavename );

parameter

$id

(mixed) (optional) the ID (integral) of the article or page; it can also be an article object.

Default: Automatically call the current article in the loop

$leavename

(Bole) (optional) Convert to link is whether the article alias is ignored. If set to True, /%postname% will be returned instead of /my-post-name

Default value: None

Return value

(String | Boolean) If the link is successfully obtained, it will return the link, and if it fails, it will return False.

example

Get links to articles or pages by ID:

<a href="<?php echo get_permalink( 268 ); ?>">Get the specified ID Article or page link</a>

Get the link to the current article in a loop:

<?php echo get_permalink(); ?>

Get the page link according to the page title:

&lt;a href="&lt;?php echo esc_url( get_permalink( get_page_by_title( 'Message Board' ) ) ); ?&gt;"&gt;Message board&lt;/a&gt;

other

This function is located at: wp-includes/

wp_title() (get the web page title)
wp_title() is used to obtain the title of the current web page, which is the content in the title tag.

wp_title() can automatically generate different titles on different pages (for example, the home page is the website title, and the article page is the article title). Official WordPress themes use this function to generate titles, but they are always ignored in domestic themes (because by default this function is not very good for SEO).

I still recommend using this function to call the title, which is more in line with the theme development specifications. If you want to make it more in line with SEO, you can use filters to optimize. There is an optimization method at the end of this article.

usage

wp_title( $sep, $display, $seplocation );

parameter

$sep

(String) (Optional) The delimiter for the title content is generally set to "|" or "-".

Default value: &raquo;(»)

$display

(Boolean) (optional) Whether to print the title directly, if set to False, it returns the title and can be stored in a variable.

Default value: True (direct printout)

$seplocation

(String) (Optional) The position of the delimiter, left or right, if "right" is passed, it is the right, and anything else is the left.

Default value: empty string (left)

Return value

(String) If the $display parameter is set to False, the content of the title will be returned. Different content will be returned according to different titles. The content returned by default is as follows:

  • Article page: Article title
  • Date page: Date
  • Category Page: Category Title
  • Author page: Author name

If you want to know more in detail, you can read the function source code below:


/**
 * Display or retrieve page title for all areas of blog.
 *
 * By default, the page title will display the separator before the page title,
 * so that the blog title will be before the page title. This is not good for
 * title display, since the blog title shows up on most tabs and not what is
 * important, which is the page that the user is looking at.
 *
 * There are also SEO benefits to having the blog title after or to the 'right'
 * or the page title. However, it is mostly common sense to have the blog title
 * to the right with most browsers supporting tabs. You can achieve this by
 * using the seplocation parameter and setting the value to 'right'. This change
 * was introduced around 2.5.0, in case backwards compatibility of themes is
 * important.
 *
 * @since 1.0.0
 *
 * @param string $sep Optional, default is '»'. How to separate the various items within the page title.
 * @param bool $display Optional, default is true. Whether to display or retrieve title.
 * @param string $seplocation Optional. Direction to display title, 'right'.
 * @return string|null String on retrieve, null when displaying.
 */
function wp_title($sep = '»', $display = true, $seplocation = '') {
  global $wp_locale;
 
  $m = get_query_var('m');
  $year = get_query_var('year');
  $monthnum = get_query_var('monthnum');
  $day = get_query_var('day');
  $search = get_query_var('s');
  $title = '';
 
  $t_sep = '%WP_TITILE_SEP%'; // Temporary separator, for accurate flipping, if necessary
 
  // If there is a post
  if ( is_single() || ( is_home() && !is_front_page() ) || ( is_page() && !is_front_page() ) ) {
    $title = single_post_title( '', false );
  }
 
  // If there's a post type archive
  if ( is_post_type_archive() ) {
    $post_type = get_query_var( 'post_type' );
    if ( is_array( $post_type ) )
      $post_type = reset( $post_type );
    $post_type_object = get_post_type_object( $post_type );
    if ( ! $post_type_object->has_archive )
      $title = post_type_archive_title( '', false );
  }
 
  // If there's a category or tag
  if ( is_category() || is_tag() ) {
    $title = single_term_title( '', false );
  }
 
  // If there's a taxonomy
  if ( is_tax() ) {
    $term = get_queried_object();
    if ( $term ) {
      $tax = get_taxonomy( $term->taxonomy );
      $title = single_term_title( $tax->labels->name . $t_sep, false );
    }
  }
 
  // If there's an author
  if ( is_author() && ! is_post_type_archive() ) {
    $author = get_queried_object();
    if ( $author )
      $title = $author->display_name;
  }
 
  // Post type archives with has_archive should override terms.
  if ( is_post_type_archive() && $post_type_object->has_archive )
    $title = post_type_archive_title( '', false );
 
  // If there's a month
  if ( is_archive() && !empty($m) ) {
    $my_year = substr($m, 0, 4);
    $my_month = $wp_locale->get_month(substr($m, 4, 2));
    $my_day = intval(substr($m, 6, 2));
    $title = $my_year . ( $my_month ? $t_sep . $my_month : '' ) . ( $my_day ? $t_sep . $my_day : '' );
  }
 
  // If there's a year
  if ( is_archive() && !empty($year) ) {
    $title = $year;
    if ( !empty($monthnum) )
      $title .= $t_sep . $wp_locale->get_month($monthnum);
    if ( !empty($day) )
      $title .= $t_sep . zeroise($day, 2);
  }
 
  // If it's a search
  if ( is_search() ) {
    /* translators: 1: separator, 2: search phrase */
    $title = sprintf(__('Search Results %1$s %2$s'), $t_sep, strip_tags($search));
  }
 
  // If it's a 404 page
  if ( is_404() ) {
    $title = __('Page not found');
  }
 
  $prefix = '';
  if ( !empty($title) )
    $prefix = " $sep ";
 
  /**
   * Filter the parts of the page title.
   *
   * @since 4.0.0
   *
   * @param array $title_array Parts of the page title.
   */
  $title_array = apply_filters( 'wp_title_parts', explode( $t_sep, $title ) );
 
   // Determines position of the separator and direction of the breadcrumb
  if ( 'right' == $seplocation ) { // sep on right, so reverse the order
    $title_array = array_reverse( $title_array );
    $title = implode( " $sep ", $title_array ) . $prefix;
  } else {
    $title = $prefix . implode( " $sep ", $title_array );
  }
 
  /**
   * Filter the text of the page title.
   *
   * @since 2.0.0
   *
   * @param string $title    Page title.
   * @param string $sep     Title separator.
   * @param string $seplocation Location of the separator (left or right).
   */
  $title = apply_filters( 'wp_title', $title, $sep, $seplocation );
 
  // Send it out
  if ( $display )
    echo $title;
  else
    return $title;
 
}

Obviously, the title is relatively simple by default and is not very SEO-friendly.

example

<title><?php wp_title( '|', true, 'right' ); ?></title>

other

The title can be customized using the wp_title filter, which is located at: wp-includes/