GRAYBYTE WORDPRESS FILE MANAGER6903

Server IP : 149.255.58.128 / Your IP : 216.73.216.24
System : Linux cloud516.thundercloud.uk 5.14.0-427.26.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jul 17 15:51:13 EDT 2024 x86_64
PHP Version : 8.2.28
Disable Function : allow_url_include, apache_child_terminate, apache_setenv, exec, passthru, pcntl_exec, posix_kill, posix_mkfifo, posix_getpwuid, posix_setpgid, posix_setsid, posix_setuid, posix_setgid, posix_seteuid, posix_setegid, posix_uname, proc_close, proc_get_status, proc_open, proc_terminate, shell_exec, show_source, system
cURL : ON | WGET : ON | Sudo : OFF | Pkexec : OFF
Directory : /home/wheelch2/www.wheelchairantalya.co.uk/wp-includes/
Upload Files :
Current_dir [ Writeable ] Document_root [ Writeable ]

Command :


Current File : /home/wheelch2/www.wheelchairantalya.co.uk/wp-includes//post-template.php
<?php
/**
 * WordPress Post Template Functions.
 *
 * Gets content for the current post in the loop.
 *
 * @package WordPress
 * @subpackage Template
 */

/**
 * Displays the ID of the current item in the WordPress Loop.
 *
 * @since 0.71
 */
function the_ID() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionNameInvalid
	echo get_the_ID();
}

/**
 * Retrieves the ID of the current item in the WordPress Loop.
 *
 * @since 2.1.0
 *
 * @return int|false The ID of the current item in the WordPress Loop. False if $post is not set.
 */
function get_the_ID() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionNameInvalid
	$post = get_post();
	return ! empty( $post ) ? $post->ID : false;
}

/**
 * Displays or retrieves the current post title with optional markup.
 *
 * @since 0.71
 *
 * @param string $before  Optional. Markup to prepend to the title. Default empty.
 * @param string $after   Optional. Markup to append to the title. Default empty.
 * @param bool   $display Optional. Whether to echo or return the title. Default true for echo.
 * @return void|string Void if `$display` argument is true or the title is empty,
 *                     current post title if `$display` is false.
 */
function the_title( $before = '', $after = '', $display = true ) {
	$title = get_the_title();

	if ( strlen( $title ) === 0 ) {
		return;
	}

	$title = $before . $title . $after;

	if ( $display ) {
		echo $title;
	} else {
		return $title;
	}
}

/**
 * Sanitizes the current title when retrieving or displaying.
 *
 * Works like the_title(), except the parameters can be in a string or
 * an array. See the function for what can be override in the $args parameter.
 *
 * The title before it is displayed will have the tags stripped and esc_attr()
 * before it is passed to the user or displayed. The default as with the_title(),
 * is to display the title.
 *
 * @since 2.3.0
 *
 * @param string|array $args {
 *     Title attribute arguments. Optional.
 *
 *     @type string  $before Markup to prepend to the title. Default empty.
 *     @type string  $after  Markup to append to the title. Default empty.
 *     @type bool    $echo   Whether to echo or return the title. Default true for echo.
 *     @type WP_Post $post   Current post object to retrieve the title for.
 * }
 * @return void|string Void if 'echo' argument is true, the title attribute if 'echo' is false.
 */
function the_title_attribute( $args = '' ) {
	$defaults    = array(
		'before' => '',
		'after'  => '',
		'echo'   => true,
		'post'   => get_post(),
	);
	$parsed_args = wp_parse_args( $args, $defaults );

	$title = get_the_title( $parsed_args['post'] );

	if ( strlen( $title ) === 0 ) {
		return;
	}

	$title = $parsed_args['before'] . $title . $parsed_args['after'];
	$title = esc_attr( strip_tags( $title ) );

	if ( $parsed_args['echo'] ) {
		echo $title;
	} else {
		return $title;
	}
}

/**
 * Retrieves the post title.
 *
 * If the post is protected and the visitor is not an admin, then "Protected"
 * will be inserted before the post title. If the post is private, then
 * "Private" will be inserted before the post title.
 *
 * @since 0.71
 *
 * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global $post.
 * @return string
 */
function get_the_title( $post = 0 ) {
	$post = get_post( $post );

	$post_title = isset( $post->post_title ) ? $post->post_title : '';
	$post_id    = isset( $post->ID ) ? $post->ID : 0;

	if ( ! is_admin() ) {
		if ( ! empty( $post->post_password ) ) {

			/* translators: %s: Protected post title. */
			$prepend = __( 'Protected: %s' );

			/**
			 * Filters the text prepended to the post title for protected posts.
			 *
			 * The filter is only applied on the front end.
			 *
			 * @since 2.8.0
			 *
			 * @param string  $prepend Text displayed before the post title.
			 *                         Default 'Protected: %s'.
			 * @param WP_Post $post    Current post object.
			 */
			$protected_title_format = apply_filters( 'protected_title_format', $prepend, $post );

			$post_title = sprintf( $protected_title_format, $post_title );
		} elseif ( isset( $post->post_status ) && 'private' === $post->post_status ) {

			/* translators: %s: Private post title. */
			$prepend = __( 'Private: %s' );

			/**
			 * Filters the text prepended to the post title of private posts.
			 *
			 * The filter is only applied on the front end.
			 *
			 * @since 2.8.0
			 *
			 * @param string  $prepend Text displayed before the post title.
			 *                         Default 'Private: %s'.
			 * @param WP_Post $post    Current post object.
			 */
			$private_title_format = apply_filters( 'private_title_format', $prepend, $post );

			$post_title = sprintf( $private_title_format, $post_title );
		}
	}

	/**
	 * Filters the post title.
	 *
	 * @since 0.71
	 *
	 * @param string $post_title The post title.
	 * @param int    $post_id    The post ID.
	 */
	return apply_filters( 'the_title', $post_title, $post_id );
}

/**
 * Displays the Post Global Unique Identifier (guid).
 *
 * The guid will appear to be a link, but should not be used as a link to the
 * post. The reason you should not use it as a link, is because of moving the
 * blog across domains.
 *
 * URL is escaped to make it XML-safe.
 *
 * @since 1.5.0
 *
 * @param int|WP_Post $post Optional. Post ID or post object. Default is global $post.
 */
function the_guid( $post = 0 ) {
	$post = get_post( $post );

	$post_guid = isset( $post->guid ) ? get_the_guid( $post ) : '';
	$post_id   = isset( $post->ID ) ? $post->ID : 0;

	/**
	 * Filters the escaped Global Unique Identifier (guid) of the post.
	 *
	 * @since 4.2.0
	 *
	 * @see get_the_guid()
	 *
	 * @param string $post_guid Escaped Global Unique Identifier (guid) of the post.
	 * @param int    $post_id   The post ID.
	 */
	echo apply_filters( 'the_guid', $post_guid, $post_id );
}

/**
 * Retrieves the Post Global Unique Identifier (guid).
 *
 * The guid will appear to be a link, but should not be used as an link to the
 * post. The reason you should not use it as a link, is because of moving the
 * blog across domains.
 *
 * @since 1.5.0
 *
 * @param int|WP_Post $post Optional. Post ID or post object. Default is global $post.
 * @return string
 */
function get_the_guid( $post = 0 ) {
	$post = get_post( $post );

	$post_guid = isset( $post->guid ) ? $post->guid : '';
	$post_id   = isset( $post->ID ) ? $post->ID : 0;

	/**
	 * Filters the Global Unique Identifier (guid) of the post.
	 *
	 * @since 1.5.0
	 *
	 * @param string $post_guid Global Unique Identifier (guid) of the post.
	 * @param int    $post_id   The post ID.
	 */
	return apply_filters( 'get_the_guid', $post_guid, $post_id );
}

/**
 * Displays the post content.
 *
 * @since 0.71
 *
 * @param string $more_link_text Optional. Content for when there is more text.
 * @param bool   $strip_teaser   Optional. Strip teaser content before the more text. Default false.
 */
function the_content( $more_link_text = null, $strip_teaser = false ) {
	$content = get_the_content( $more_link_text, $strip_teaser );

	/**
	 * Filters the post content.
	 *
	 * @since 0.71
	 *
	 * @param string $content Content of the current post.
	 */
	$content = apply_filters( 'the_content', $content );
	$content = str_replace( ']]>', ']]&gt;', $content );
	echo $content;
}

/**
 * Retrieves the post content.
 *
 * @since 0.71
 * @since 5.2.0 Added the `$post` parameter.
 *
 * @global int   $page      Page number of a single post/page.
 * @global int   $more      Boolean indicator for whether single post/page is being viewed.
 * @global bool  $preview   Whether post/page is in preview mode.
 * @global array $pages     Array of all pages in post/page. Each array element contains
 *                          part of the content separated by the `<!--nextpage-->` tag.
 * @global int   $multipage Boolean indicator for whether multiple pages are in play.
 *
 * @param string             $more_link_text Optional. Content for when there is more text.
 * @param bool               $strip_teaser   Optional. Strip teaser content before the more text. Default false.
 * @param WP_Post|object|int $post           Optional. WP_Post instance or Post ID/object. Default null.
 * @return string
 */
function get_the_content( $more_link_text = null, $strip_teaser = false, $post = null ) {
	global $page, $more, $preview, $pages, $multipage;

	$_post = get_post( $post );

	if ( ! ( $_post instanceof WP_Post ) ) {
		return '';
	}

	/*
	 * Use the globals if the $post parameter was not specified,
	 * but only after they have been set up in setup_postdata().
	 */
	if ( null === $post && did_action( 'the_post' ) ) {
		$elements = compact( 'page', 'more', 'preview', 'pages', 'multipage' );
	} else {
		$elements = generate_postdata( $_post );
	}

	if ( null === $more_link_text ) {
		$more_link_text = sprintf(
			'<span aria-label="%1$s">%2$s</span>',
			sprintf(
				/* translators: %s: Post title. */
				__( 'Continue reading %s' ),
				the_title_attribute(
					array(
						'echo' => false,
						'post' => $_post,
					)
				)
			),
			__( '(more&hellip;)' )
		);
	}

	$output     = '';
	$has_teaser = false;

	// If post password required and it doesn't match the cookie.
	if ( post_password_required( $_post ) ) {
		return get_the_password_form( $_post );
	}

	// If the requested page doesn't exist.
	if ( $elements['page'] > count( $elements['pages'] ) ) {
		// Give them the highest numbered page that DOES exist.
		$elements['page'] = count( $elements['pages'] );
	}

	$page_no = $elements['page'];
	$content = $elements['pages'][ $page_no - 1 ];
	if ( preg_match( '/<!--more(.*?)?-->/', $content, $matches ) ) {
		if ( has_block( 'more', $content ) ) {
			// Remove the core/more block delimiters. They will be left over after $content is split up.
			$content = preg_replace( '/<!-- \/?wp:more(.*?) -->/', '', $content );
		}

		$content = explode( $matches[0], $content, 2 );

		if ( ! empty( $matches[1] ) && ! empty( $more_link_text ) ) {
			$more_link_text = strip_tags( wp_kses_no_null( trim( $matches[1] ) ) );
		}

		$has_teaser = true;
	} else {
		$content = array( $content );
	}

	if ( str_contains( $_post->post_content, '<!--noteaser-->' )
		&& ( ! $elements['multipage'] || 1 === $elements['page'] )
	) {
		$strip_teaser = true;
	}

	$teaser = $content[0];

	if ( $elements['more'] && $strip_teaser && $has_teaser ) {
		$teaser = '';
	}

	$output .= $teaser;

	if ( count( $content ) > 1 ) {
		if ( $elements['more'] ) {
			$output .= '<span id="more-' . $_post->ID . '"></span>' . $content[1];
		} else {
			if ( ! empty( $more_link_text ) ) {

				/**
				 * Filters the Read More link text.
				 *
				 * @since 2.8.0
				 *
				 * @param string $more_link_element Read More link element.
				 * @param string $more_link_text    Read More text.
				 */
				$output .= apply_filters( 'the_content_more_link', ' <a href="' . get_permalink( $_post ) . "#more-{$_post->ID}\" class=\"more-link\">$more_link_text</a>", $more_link_text );
			}
			$output = force_balance_tags( $output );
		}
	}

	return $output;
}

/**
 * Displays the post excerpt.
 *
 * @since 0.71
 */
function the_excerpt() {

	/**
	 * Filters the displayed post excerpt.
	 *
	 * @since 0.71
	 *
	 * @see get_the_excerpt()
	 *
	 * @param string $post_excerpt The post excerpt.
	 */
	echo apply_filters( 'the_excerpt', get_the_excerpt() );
}

/**
 * Retrieves the post excerpt.
 *
 * @since 0.71
 * @since 4.5.0 Introduced the `$post` parameter.
 *
 * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global $post.
 * @return string Post excerpt.
 */
function get_the_excerpt( $post = null ) {
	if ( is_bool( $post ) ) {
		_deprecated_argument( __FUNCTION__, '2.3.0' );
	}

	$post = get_post( $post );
	if ( empty( $post ) ) {
		return '';
	}

	if ( post_password_required( $post ) ) {
		return __( 'There is no excerpt because this is a protected post.' );
	}

	/**
	 * Filters the retrieved post excerpt.
	 *
	 * @since 1.2.0
	 * @since 4.5.0 Introduced the `$post` parameter.
	 *
	 * @param string  $post_excerpt The post excerpt.
	 * @param WP_Post $post         Post object.
	 */
	return apply_filters( 'get_the_excerpt', $post->post_excerpt, $post );
}

/**
 * Determines whether the post has a custom excerpt.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 2.3.0
 *
 * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global $post.
 * @return bool True if the post has a custom excerpt, false otherwise.
 */
function has_excerpt( $post = 0 ) {
	$post = get_post( $post );
	return ( ! empty( $post->post_excerpt ) );
}

/**
 * Displays the classes for the post container element.
 *
 * @since 2.7.0
 *
 * @param string|string[] $css_class Optional. One or more classes to add to the class list.
 *                                   Default empty.
 * @param int|WP_Post     $post      Optional. Post ID or post object. Defaults to the global `$post`.
 */
function post_class( $css_class = '', $post = null ) {
	// Separates classes with a single space, collates classes for post DIV.
	echo 'class="' . esc_attr( implode( ' ', get_post_class( $css_class, $post ) ) ) . '"';
}

/**
 * Retrieves an array of the class names for the post container element.
 *
 * The class names are many:
 *
 *  - If the post has a post thumbnail, `has-post-thumbnail` is added as a class.
 *  - If the post is sticky, then the `sticky` class name is added.
 *  - The class `hentry` is always added to each post.
 *  - For each taxonomy that the post belongs to, a class will be added of the format
 *    `{$taxonomy}-{$slug}`, e.g. `category-foo` or `my_custom_taxonomy-bar`.
 *    The `post_tag` taxonomy is a special case; the class has the `tag-` prefix
 *    instead of `post_tag-`.
 *
 * All class names are passed through the filter, {@see 'post_class'}, followed by
 * `$css_class` parameter value, with the post ID as the last parameter.
 *
 * @since 2.7.0
 * @since 4.2.0 Custom taxonomy class names were added.
 *
 * @param string|string[] $css_class Optional. Space-separated string or array of class names
 *                                   to add to the class list. Default empty.
 * @param int|WP_Post     $post      Optional. Post ID or post object.
 * @return string[] Array of class names.
 */
function get_post_class( $css_class = '', $post = null ) {
	$post = get_post( $post );

	$classes = array();

	if ( $css_class ) {
		if ( ! is_array( $css_class ) ) {
			$css_class = preg_split( '#\s+#', $css_class );
		}
		$classes = array_map( 'esc_attr', $css_class );
	} else {
		// Ensure that we always coerce class to being an array.
		$css_class = array();
	}

	if ( ! $post ) {
		return $classes;
	}

	$classes[] = 'post-' . $post->ID;
	if ( ! is_admin() ) {
		$classes[] = $post->post_type;
	}
	$classes[] = 'type-' . $post->post_type;
	$classes[] = 'status-' . $post->post_status;

	// Post Format.
	if ( post_type_supports( $post->post_type, 'post-formats' ) ) {
		$post_format = get_post_format( $post->ID );

		if ( $post_format && ! is_wp_error( $post_format ) ) {
			$classes[] = 'format-' . sanitize_html_class( $post_format );
		} else {
			$classes[] = 'format-standard';
		}
	}

	$post_password_required = post_password_required( $post->ID );

	// Post requires password.
	if ( $post_password_required ) {
		$classes[] = 'post-password-required';
	} elseif ( ! empty( $post->post_password ) ) {
		$classes[] = 'post-password-protected';
	}

	// Post thumbnails.
	if ( current_theme_supports( 'post-thumbnails' ) && has_post_thumbnail( $post->ID ) && ! is_attachment( $post ) && ! $post_password_required ) {
		$classes[] = 'has-post-thumbnail';
	}

	// Sticky for Sticky Posts.
	if ( is_sticky( $post->ID ) ) {
		if ( is_home() && ! is_paged() ) {
			$classes[] = 'sticky';
		} elseif ( is_admin() ) {
			$classes[] = 'status-sticky';
		}
	}

	// hentry for hAtom compliance.
	$classes[] = 'hentry';

	// All public taxonomies.
	$taxonomies = get_taxonomies( array( 'public' => true ) );

	/**
	 * Filters the taxonomies to generate classes for each individual term.
	 *
	 * Default is all public taxonomies registered to the post type.
	 *
	 * @since 6.1.0
	 *
	 * @param string[] $taxonomies List of all taxonomy names to generate classes for.
	 * @param int      $post_id    The post ID.
	 * @param string[] $classes    An array of post class names.
	 * @param string[] $css_class  An array of additional class names added to the post.
	*/
	$taxonomies = apply_filters( 'post_class_taxonomies', $taxonomies, $post->ID, $classes, $css_class );

	foreach ( (array) $taxonomies as $taxonomy ) {
		if ( is_object_in_taxonomy( $post->post_type, $taxonomy ) ) {
			foreach ( (array) get_the_terms( $post->ID, $taxonomy ) as $term ) {
				if ( empty( $term->slug ) ) {
					continue;
				}

				$term_class = sanitize_html_class( $term->slug, $term->term_id );
				if ( is_numeric( $term_class ) || ! trim( $term_class, '-' ) ) {
					$term_class = $term->term_id;
				}

				// 'post_tag' uses the 'tag' prefix for backward compatibility.
				if ( 'post_tag' === $taxonomy ) {
					$classes[] = 'tag-' . $term_class;
				} else {
					$classes[] = sanitize_html_class( $taxonomy . '-' . $term_class, $taxonomy . '-' . $term->term_id );
				}
			}
		}
	}

	$classes = array_map( 'esc_attr', $classes );

	/**
	 * Filters the list of CSS class names for the current post.
	 *
	 * @since 2.7.0
	 *
	 * @param string[] $classes   An array of post class names.
	 * @param string[] $css_class An array of additional class names added to the post.
	 * @param int      $post_id   The post ID.
	 */
	$classes = apply_filters( 'post_class', $classes, $css_class, $post->ID );

	return array_unique( $classes );
}

/**
 * Displays the class names for the body element.
 *
 * @since 2.8.0
 *
 * @param string|string[] $css_class Optional. Space-separated string or array of class names
 *                                   to add to the class list. Default empty.
 */
function body_class( $css_class = '' ) {
	// Separates class names with a single space, collates class names for body element.
	echo 'class="' . esc_attr( implode( ' ', get_body_class( $css_class ) ) ) . '"';
}

/**
 * Retrieves an array of the class names for the body element.
 *
 * @since 2.8.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param string|string[] $css_class Optional. Space-separated string or array of class names
 *                                   to add to the class list. Default empty.
 * @return string[] Array of class names.
 */
function get_body_class( $css_class = '' ) {
	global $wp_query;

	$classes = array();

	if ( is_rtl() ) {
		$classes[] = 'rtl';
	}

	if ( is_front_page() ) {
		$classes[] = 'home';
	}
	if ( is_home() ) {
		$classes[] = 'blog';
	}
	if ( is_privacy_policy() ) {
		$classes[] = 'privacy-policy';
	}
	if ( is_archive() ) {
		$classes[] = 'archive';
	}
	if ( is_date() ) {
		$classes[] = 'date';
	}
	if ( is_search() ) {
		$classes[] = 'search';
		$classes[] = $wp_query->posts ? 'search-results' : 'search-no-results';
	}
	if ( is_paged() ) {
		$classes[] = 'paged';
	}
	if ( is_attachment() ) {
		$classes[] = 'attachment';
	}
	if ( is_404() ) {
		$classes[] = 'error404';
	}

	if ( is_singular() ) {
		$post      = $wp_query->get_queried_object();
		$post_id   = $post->ID;
		$post_type = $post->post_type;

		$classes[] = 'wp-singular';

		if ( is_page_template() ) {
			$classes[] = "{$post_type}-template";

			$template_slug  = get_page_template_slug( $post_id );
			$template_parts = explode( '/', $template_slug );

			foreach ( $template_parts as $part ) {
				$classes[] = "{$post_type}-template-" . sanitize_html_class( str_replace( array( '.', '/' ), '-', basename( $part, '.php' ) ) );
			}
			$classes[] = "{$post_type}-template-" . sanitize_html_class( str_replace( '.', '-', $template_slug ) );
		} else {
			$classes[] = "{$post_type}-template-default";
		}

		if ( is_single() ) {
			$classes[] = 'single';
			if ( isset( $post->post_type ) ) {
				$classes[] = 'single-' . sanitize_html_class( $post->post_type, $post_id );
				$classes[] = 'postid-' . $post_id;

				// Post Format.
				if ( post_type_supports( $post->post_type, 'post-formats' ) ) {
					$post_format = get_post_format( $post->ID );

					if ( $post_format && ! is_wp_error( $post_format ) ) {
						$classes[] = 'single-format-' . sanitize_html_class( $post_format );
					} else {
						$classes[] = 'single-format-standard';
					}
				}
			}
		}

		if ( is_attachment() ) {
			$mime_type   = get_post_mime_type( $post_id );
			$mime_prefix = array( 'application/', 'image/', 'text/', 'audio/', 'video/', 'music/' );
			$classes[]   = 'attachmentid-' . $post_id;
			$classes[]   = 'attachment-' . str_replace( $mime_prefix, '', $mime_type );
		} elseif ( is_page() ) {
			$classes[] = 'page';
			$classes[] = 'page-id-' . $post_id;

			if ( get_pages(
				array(
					'parent' => $post_id,
					'number' => 1,
				)
			) ) {
				$classes[] = 'page-parent';
			}

			if ( $post->post_parent ) {
				$classes[] = 'page-child';
				$classes[] = 'parent-pageid-' . $post->post_parent;
			}
		}
	} elseif ( is_archive() ) {
		if ( is_post_type_archive() ) {
			$classes[] = 'post-type-archive';
			$post_type = get_query_var( 'post_type' );
			if ( is_array( $post_type ) ) {
				$post_type = reset( $post_type );
			}
			$classes[] = 'post-type-archive-' . sanitize_html_class( $post_type );
		} elseif ( is_author() ) {
			$author    = $wp_query->get_queried_object();
			$classes[] = 'author';
			if ( isset( $author->user_nicename ) ) {
				$classes[] = 'author-' . sanitize_html_class( $author->user_nicename, $author->ID );
				$classes[] = 'author-' . $author->ID;
			}
		} elseif ( is_category() ) {
			$cat       = $wp_query->get_queried_object();
			$classes[] = 'category';
			if ( isset( $cat->term_id ) ) {
				$cat_class = sanitize_html_class( $cat->slug, $cat->term_id );
				if ( is_numeric( $cat_class ) || ! trim( $cat_class, '-' ) ) {
					$cat_class = $cat->term_id;
				}

				$classes[] = 'category-' . $cat_class;
				$classes[] = 'category-' . $cat->term_id;
			}
		} elseif ( is_tag() ) {
			$tag       = $wp_query->get_queried_object();
			$classes[] = 'tag';
			if ( isset( $tag->term_id ) ) {
				$tag_class = sanitize_html_class( $tag->slug, $tag->term_id );
				if ( is_numeric( $tag_class ) || ! trim( $tag_class, '-' ) ) {
					$tag_class = $tag->term_id;
				}

				$classes[] = 'tag-' . $tag_class;
				$classes[] = 'tag-' . $tag->term_id;
			}
		} elseif ( is_tax() ) {
			$term = $wp_query->get_queried_object();
			if ( isset( $term->term_id ) ) {
				$term_class = sanitize_html_class( $term->slug, $term->term_id );
				if ( is_numeric( $term_class ) || ! trim( $term_class, '-' ) ) {
					$term_class = $term->term_id;
				}

				$classes[] = 'tax-' . sanitize_html_class( $term->taxonomy );
				$classes[] = 'term-' . $term_class;
				$classes[] = 'term-' . $term->term_id;
			}
		}
	}

	if ( is_user_logged_in() ) {
		$classes[] = 'logged-in';
	}

	if ( is_admin_bar_showing() ) {
		$classes[] = 'admin-bar';
		$classes[] = 'no-customize-support';
	}

	if ( current_theme_supports( 'custom-background' )
		&& ( get_background_color() !== get_theme_support( 'custom-background', 'default-color' ) || get_background_image() ) ) {
		$classes[] = 'custom-background';
	}

	if ( has_custom_logo() ) {
		$classes[] = 'wp-custom-logo';
	}

	if ( current_theme_supports( 'responsive-embeds' ) ) {
		$classes[] = 'wp-embed-responsive';
	}

	$page = $wp_query->get( 'page' );

	if ( ! $page || $page < 2 ) {
		$page = $wp_query->get( 'paged' );
	}

	if ( $page && $page > 1 && ! is_404() ) {
		$classes[] = 'paged-' . $page;

		if ( is_single() ) {
			$classes[] = 'single-paged-' . $page;
		} elseif ( is_page() ) {
			$classes[] = 'page-paged-' . $page;
		} elseif ( is_category() ) {
			$classes[] = 'category-paged-' . $page;
		} elseif ( is_tag() ) {
			$classes[] = 'tag-paged-' . $page;
		} elseif ( is_date() ) {
			$classes[] = 'date-paged-' . $page;
		} elseif ( is_author() ) {
			$classes[] = 'author-paged-' . $page;
		} elseif ( is_search() ) {
			$classes[] = 'search-paged-' . $page;
		} elseif ( is_post_type_archive() ) {
			$classes[] = 'post-type-paged-' . $page;
		}
	}

	$classes[] = 'wp-theme-' . sanitize_html_class( get_template() );
	if ( is_child_theme() ) {
		$classes[] = 'wp-child-theme-' . sanitize_html_class( get_stylesheet() );
	}

	if ( ! empty( $css_class ) ) {
		if ( ! is_array( $css_class ) ) {
			$css_class = preg_split( '#\s+#', $css_class );
		}
		$classes = array_merge( $classes, $css_class );
	} else {
		// Ensure that we always coerce class to being an array.
		$css_class = array();
	}

	$classes = array_map( 'esc_attr', $classes );

	/**
	 * Filters the list of CSS body class names for the current post or page.
	 *
	 * @since 2.8.0
	 *
	 * @param string[] $classes   An array of body class names.
	 * @param string[] $css_class An array of additional class names added to the body.
	 */
	$classes = apply_filters( 'body_class', $classes, $css_class );

	return array_unique( $classes );
}

/**
 * Determines whether the post requires password and whether a correct password has been provided.
 *
 * @since 2.7.0
 *
 * @param int|WP_Post|null $post An optional post. Global $post used if not provided.
 * @return bool false if a password is not required or the correct password cookie is present, true otherwise.
 */
function post_password_required( $post = null ) {
	$post = get_post( $post );

	if ( empty( $post->post_password ) ) {
		/** This filter is documented in wp-includes/post-template.php */
		return apply_filters( 'post_password_required', false, $post );
	}

	if ( ! isset( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] ) ) {
		/** This filter is documented in wp-includes/post-template.php */
		return apply_filters( 'post_password_required', true, $post );
	}

	require_once ABSPATH . WPINC . '/class-phpass.php';
	$hasher = new PasswordHash( 8, true );

	$hash = wp_unslash( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] );
	if ( ! str_starts_with( $hash, '$P$B' ) ) {
		$required = true;
	} else {
		$required = ! $hasher->CheckPassword( $post->post_password, $hash );
	}

	/**
	 * Filters whether a post requires the user to supply a password.
	 *
	 * @since 4.7.0
	 *
	 * @param bool    $required Whether the user needs to supply a password. True if password has not been
	 *                          provided or is incorrect, false if password has been supplied or is not required.
	 * @param WP_Post $post     Post object.
	 */
	return apply_filters( 'post_password_required', $required, $post );
}

//
// Page Template Functions for usage in Themes.
//

/**
 * The formatted output of a list of pages.
 *
 * Displays page links for paginated posts (i.e. including the `<!--nextpage-->`
 * Quicktag one or more times). This tag must be within The Loop.
 *
 * @since 1.2.0
 * @since 5.1.0 Added the `aria_current` argument.
 *
 * @global int $page
 * @global int $numpages
 * @global int $multipage
 * @global int $more
 *
 * @param string|array $args {
 *     Optional. Array or string of default arguments.
 *
 *     @type string       $before           HTML or text to prepend to each link. Default is `<p> Pages:`.
 *     @type string       $after            HTML or text to append to each link. Default is `</p>`.
 *     @type string       $link_before      HTML or text to prepend to each link, inside the `<a>` tag.
 *                                          Also prepended to the current item, which is not linked. Default empty.
 *     @type string       $link_after       HTML or text to append to each Pages link inside the `<a>` tag.
 *                                          Also appended to the current item, which is not linked. Default empty.
 *     @type string       $aria_current     The value for the aria-current attribute. Possible values are 'page',
 *                                          'step', 'location', 'date', 'time', 'true', 'false'. Default is 'page'.
 *     @type string       $next_or_number   Indicates whether page numbers should be used. Valid values are number
 *                                          and next. Default is 'number'.
 *     @type string       $separator        Text between pagination links. Default is ' '.
 *     @type string       $nextpagelink     Link text for the next page link, if available. Default is 'Next Page'.
 *     @type string       $previouspagelink Link text for the previous page link, if available. Default is 'Previous Page'.
 *     @type string       $pagelink         Format string for page numbers. The % in the parameter string will be
 *                                          replaced with the page number, so 'Page %' generates "Page 1", "Page 2", etc.
 *                                          Defaults to '%', just the page number.
 *     @type int|bool     $echo             Whether to echo or not. Accepts 1|true or 0|false. Default 1|true.
 * }
 * @return string Formatted output in HTML.
 */
function wp_link_pages( $args = '' ) {
	global $page, $numpages, $multipage, $more;

	$defaults = array(
		'before'           => '<p class="post-nav-links">' . __( 'Pages:' ),
		'after'            => '</p>',
		'link_before'      => '',
		'link_after'       => '',
		'aria_current'     => 'page',
		'next_or_number'   => 'number',
		'separator'        => ' ',
		'nextpagelink'     => __( 'Next page' ),
		'previouspagelink' => __( 'Previous page' ),
		'pagelink'         => '%',
		'echo'             => 1,
	);

	$parsed_args = wp_parse_args( $args, $defaults );

	/**
	 * Filters the arguments used in retrieving page links for paginated posts.
	 *
	 * @since 3.0.0
	 *
	 * @param array $parsed_args An array of page link arguments. See wp_link_pages()
	 *                           for information on accepted arguments.
	 */
	$parsed_args = apply_filters( 'wp_link_pages_args', $parsed_args );

	$output = '';
	if ( $multipage ) {
		if ( 'number' === $parsed_args['next_or_number'] ) {
			$output .= $parsed_args['before'];
			for ( $i = 1; $i <= $numpages; $i++ ) {
				$link = $parsed_args['link_before'] . str_replace( '%', $i, $parsed_args['pagelink'] ) . $parsed_args['link_after'];

				if ( $i !== $page || ! $more && 1 === $page ) {
					$link = _wp_link_page( $i ) . $link . '</a>';
				} elseif ( $i === $page ) {
					$link = '<span class="post-page-numbers current" aria-current="' . esc_attr( $parsed_args['aria_current'] ) . '">' . $link . '</span>';
				}

				/**
				 * Filters the HTML output of individual page number links.
				 *
				 * @since 3.6.0
				 *
				 * @param string $link The page number HTML output.
				 * @param int    $i    Page number for paginated posts' page links.
				 */
				$link = apply_filters( 'wp_link_pages_link', $link, $i );

				// Use the custom links separator beginning with the second link.
				$output .= ( 1 === $i ) ? ' ' : $parsed_args['separator'];
				$output .= $link;
			}
			$output .= $parsed_args['after'];
		} elseif ( $more ) {
			$output .= $parsed_args['before'];
			$prev    = $page - 1;
			if ( $prev > 0 ) {
				$link = _wp_link_page( $prev ) . $parsed_args['link_before'] . $parsed_args['previouspagelink'] . $parsed_args['link_after'] . '</a>';

				/** This filter is documented in wp-includes/post-template.php */
				$output .= apply_filters( 'wp_link_pages_link', $link, $prev );
			}
			$next = $page + 1;
			if ( $next <= $numpages ) {
				if ( $prev ) {
					$output .= $parsed_args['separator'];
				}
				$link = _wp_link_page( $next ) . $parsed_args['link_before'] . $parsed_args['nextpagelink'] . $parsed_args['link_after'] . '</a>';

				/** This filter is documented in wp-includes/post-template.php */
				$output .= apply_filters( 'wp_link_pages_link', $link, $next );
			}
			$output .= $parsed_args['after'];
		}
	}

	/**
	 * Filters the HTML output of page links for paginated posts.
	 *
	 * @since 3.6.0
	 *
	 * @param string       $output HTML output of paginated posts' page links.
	 * @param array|string $args   An array or query string of arguments. See wp_link_pages()
	 *                             for information on accepted arguments.
	 */
	$html = apply_filters( 'wp_link_pages', $output, $args );

	if ( $parsed_args['echo'] ) {
		echo $html;
	}
	return $html;
}

/**
 * Helper function for wp_link_pages().
 *
 * @since 3.1.0
 * @access private
 *
 * @global WP_Rewrite $wp_rewrite WordPress rewrite component.
 *
 * @param int $i Page number.
 * @return string Link.
 */
function _wp_link_page( $i ) {
	global $wp_rewrite;
	$post       = get_post();
	$query_args = array();

	if ( 1 === $i ) {
		$url = get_permalink();
	} else {
		if ( ! get_option( 'permalink_structure' ) || in_array( $post->post_status, array( 'draft', 'pending' ), true ) ) {
			$url = add_query_arg( 'page', $i, get_permalink() );
		} elseif ( 'page' === get_option( 'show_on_front' ) && (int) get_option( 'page_on_front' ) === $post->ID ) {
			$url = trailingslashit( get_permalink() ) . user_trailingslashit( "$wp_rewrite->pagination_base/" . $i, 'single_paged' );
		} else {
			$url = trailingslashit( get_permalink() ) . user_trailingslashit( $i, 'single_paged' );
		}
	}

	if ( is_preview() ) {

		if ( ( 'draft' !== $post->post_status ) && isset( $_GET['preview_id'], $_GET['preview_nonce'] ) ) {
			$query_args['preview_id']    = wp_unslash( $_GET['preview_id'] );
			$query_args['preview_nonce'] = wp_unslash( $_GET['preview_nonce'] );
		}

		$url = get_preview_post_link( $post, $query_args, $url );
	}

	return '<a href="' . esc_url( $url ) . '" class="post-page-numbers">';
}

//
// Post-meta: Custom per-post fields.
//

/**
 * Retrieves post custom meta data field.
 *
 * @since 1.5.0
 *
 * @param string $key Meta data key name.
 * @return array|string|false Array of values, or single value if only one element exists.
 *                            False if the key does not exist.
 */
function post_custom( $key = '' ) {
	$custom = get_post_custom();

	if ( ! isset( $custom[ $key ] ) ) {
		return false;
	} elseif ( 1 === count( $custom[ $key ] ) ) {
		return $custom[ $key ][0];
	} else {
		return $custom[ $key ];
	}
}

/**
 * Displays a list of post custom fields.
 *
 * @since 1.2.0
 *
 * @deprecated 6.0.2 Use get_post_meta() to retrieve post meta and render manually.
 */
function the_meta() {
	_deprecated_function( __FUNCTION__, '6.0.2', 'get_post_meta()' );
	$keys = get_post_custom_keys();
	if ( $keys ) {
		$li_html = '';
		foreach ( (array) $keys as $key ) {
			$keyt = trim( $key );
			if ( is_protected_meta( $keyt, 'post' ) ) {
				continue;
			}

			$values = array_map( 'trim', get_post_custom_values( $key ) );
			$value  = implode( ', ', $values );

			$html = sprintf(
				"<li><span class='post-meta-key'>%s</span> %s</li>\n",
				/* translators: %s: Post custom field name. */
				esc_html( sprintf( _x( '%s:', 'Post custom field name' ), $key ) ),
				esc_html( $value )
			);

			/**
			 * Filters the HTML output of the li element in the post custom fields list.
			 *
			 * @since 2.2.0
			 *
			 * @param string $html  The HTML output for the li element.
			 * @param string $key   Meta key.
			 * @param string $value Meta value.
			 */
			$li_html .= apply_filters( 'the_meta_key', $html, $key, $value );
		}

		if ( $li_html ) {
			echo "<ul class='post-meta'>\n{$li_html}</ul>\n";
		}
	}
}

//
// Pages.
//

/**
 * Retrieves or displays a list of pages as a dropdown (select list).
 *
 * @since 2.1.0
 * @since 4.2.0 The `$value_field` argument was added.
 * @since 4.3.0 The `$class` argument was added.
 *
 * @see get_pages()
 *
 * @param array|string $args {
 *     Optional. Array or string of arguments to generate a page dropdown. See get_pages() for additional arguments.
 *
 *     @type int          $depth                 Maximum depth. Default 0.
 *     @type int          $child_of              Page ID to retrieve child pages of. Default 0.
 *     @type int|string   $selected              Value of the option that should be selected. Default 0.
 *     @type bool|int     $echo                  Whether to echo or return the generated markup. Accepts 0, 1,
 *                                               or their bool equivalents. Default 1.
 *     @type string       $name                  Value for the 'name' attribute of the select element.
 *                                               Default 'page_id'.
 *     @type string       $id                    Value for the 'id' attribute of the select element.
 *     @type string       $class                 Value for the 'class' attribute of the select element. Default: none.
 *                                               Defaults to the value of `$name`.
 *     @type string       $show_option_none      Text to display for showing no pages. Default empty (does not display).
 *     @type string       $show_option_no_change Text to display for "no change" option. Default empty (does not display).
 *     @type string       $option_none_value     Value to use when no page is selected. Default empty.
 *     @type string       $value_field           Post field used to populate the 'value' attribute of the option
 *                                               elements. Accepts any valid post field. Default 'ID'.
 * }
 * @return string HTML dropdown list of pages.
 */
function wp_dropdown_pages( $args = '' ) {
	$defaults = array(
		'depth'                 => 0,
		'child_of'              => 0,
		'selected'              => 0,
		'echo'                  => 1,
		'name'                  => 'page_id',
		'id'                    => '',
		'class'                 => '',
		'show_option_none'      => '',
		'show_option_no_change' => '',
		'option_none_value'     => '',
		'value_field'           => 'ID',
	);

	$parsed_args = wp_parse_args( $args, $defaults );

	$pages  = get_pages( $parsed_args );
	$output = '';
	// Back-compat with old system where both id and name were based on $name argument.
	if ( empty( $parsed_args['id'] ) ) {
		$parsed_args['id'] = $parsed_args['name'];
	}

	if ( ! empty( $pages ) ) {
		$class = '';
		if ( ! empty( $parsed_args['class'] ) ) {
			$class = " class='" . esc_attr( $parsed_args['class'] ) . "'";
		}

		$output = "<select name='" . esc_attr( $parsed_args['name'] ) . "'" . $class . " id='" . esc_attr( $parsed_args['id'] ) . "'>\n";
		if ( $parsed_args['show_option_no_change'] ) {
			$output .= "\t<option value=\"-1\">" . $parsed_args['show_option_no_change'] . "</option>\n";
		}
		if ( $parsed_args['show_option_none'] ) {
			$output .= "\t<option value=\"" . esc_attr( $parsed_args['option_none_value'] ) . '">' . $parsed_args['show_option_none'] . "</option>\n";
		}
		$output .= walk_page_dropdown_tree( $pages, $parsed_args['depth'], $parsed_args );
		$output .= "</select>\n";
	}

	/**
	 * Filters the HTML output of a list of pages as a dropdown.
	 *
	 * @since 2.1.0
	 * @since 4.4.0 `$parsed_args` and `$pages` added as arguments.
	 *
	 * @param string    $output      HTML output for dropdown list of pages.
	 * @param array     $parsed_args The parsed arguments array. See wp_dropdown_pages()
	 *                               for information on accepted arguments.
	 * @param WP_Post[] $pages       Array of the page objects.
	 */
	$html = apply_filters( 'wp_dropdown_pages', $output, $parsed_args, $pages );

	if ( $parsed_args['echo'] ) {
		echo $html;
	}

	return $html;
}

/**
 * Retrieves or displays a list of pages (or hierarchical post type items) in list (li) format.
 *
 * @since 1.5.0
 * @since 4.7.0 Added the `item_spacing` argument.
 *
 * @see get_pages()
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param array|string $args {
 *     Optional. Array or string of arguments to generate a list of pages. See get_pages() for additional arguments.
 *
 *     @type int          $child_of     Display only the sub-pages of a single page by ID. Default 0 (all pages).
 *     @type string       $authors      Comma-separated list of author IDs. Default empty (all authors).
 *     @type string       $date_format  PHP date format to use for the listed pages. Relies on the 'show_date' parameter.
 *                                      Default is the value of 'date_format' option.
 *     @type int          $depth        Number of levels in the hierarchy of pages to include in the generated list.
 *                                      Accepts -1 (any depth), 0 (all pages), 1 (top-level pages only), and n (pages to
 *                                      the given n depth). Default 0.
 *     @type bool         $echo         Whether or not to echo the list of pages. Default true.
 *     @type string       $exclude      Comma-separated list of page IDs to exclude. Default empty.
 *     @type array        $include      Comma-separated list of page IDs to include. Default empty.
 *     @type string       $link_after   Text or HTML to follow the page link label. Default null.
 *     @type string       $link_before  Text or HTML to precede the page link label. Default null.
 *     @type string       $post_type    Post type to query for. Default 'page'.
 *     @type string|array $post_status  Comma-separated list or array of post statuses to include. Default 'publish'.
 *     @type string       $show_date    Whether to display the page publish or modified date for each page. Accepts
 *                                      'modified' or any other value. An empty value hides the date. Default empty.
 *     @type string       $sort_column  Comma-separated list of column names to sort the pages by. Accepts 'post_author',
 *                                      'post_date', 'post_title', 'post_name', 'post_modified', 'post_modified_gmt',
 *                                      'menu_order', 'post_parent', 'ID', 'rand', or 'comment_count'. Default 'post_title'.
 *     @type string       $title_li     List heading. Passing a null or empty value will result in no heading, and the list
 *                                      will not be wrapped with unordered list `<ul>` tags. Default 'Pages'.
 *     @type string       $item_spacing Whether to preserve whitespace within the menu's HTML. Accepts 'preserve' or 'discard'.
 *                                      Default 'preserve'.
 *     @type Walker       $walker       Walker instance to use for listing pages. Default empty which results in a
 *                                      Walker_Page instance being used.
 * }
 * @return void|string Void if 'echo' argument is true, HTML list of pages if 'echo' is false.
 */
function wp_list_pages( $args = '' ) {
	$defaults = array(
		'depth'        => 0,
		'show_date'    => '',
		'date_format'  => get_option( 'date_format' ),
		'child_of'     => 0,
		'exclude'      => '',
		'title_li'     => __( 'Pages' ),
		'echo'         => 1,
		'authors'      => '',
		'sort_column'  => 'menu_order, post_title',
		'link_before'  => '',
		'link_after'   => '',
		'item_spacing' => 'preserve',
		'walker'       => '',
	);

	$parsed_args = wp_parse_args( $args, $defaults );

	if ( ! in_array( $parsed_args['item_spacing'], array( 'preserve', 'discard' ), true ) ) {
		// Invalid value, fall back to default.
		$parsed_args['item_spacing'] = $defaults['item_spacing'];
	}

	$output       = '';
	$current_page = 0;

	// Sanitize, mostly to keep spaces out.
	$parsed_args['exclude'] = preg_replace( '/[^0-9,]/', '', $parsed_args['exclude'] );

	// Allow plugins to filter an array of excluded pages (but don't put a nullstring into the array).
	$exclude_array = ( $parsed_args['exclude'] ) ? explode( ',', $parsed_args['exclude'] ) : array();

	/**
	 * Filters the array of pages to exclude from the pages list.
	 *
	 * @since 2.1.0
	 *
	 * @param string[] $exclude_array An array of page IDs to exclude.
	 */
	$parsed_args['exclude'] = implode( ',', apply_filters( 'wp_list_pages_excludes', $exclude_array ) );

	$parsed_args['hierarchical'] = 0;

	// Query pages.
	$pages = get_pages( $parsed_args );

	if ( ! empty( $pages ) ) {
		if ( $parsed_args['title_li'] ) {
			$output .= '<li class="pagenav">' . $parsed_args['title_li'] . '<ul>';
		}
		global $wp_query;
		if ( is_page() || is_attachment() || $wp_query->is_posts_page ) {
			$current_page = get_queried_object_id();
		} elseif ( is_singular() ) {
			$queried_object = get_queried_object();
			if ( is_post_type_hierarchical( $queried_object->post_type ) ) {
				$current_page = $queried_object->ID;
			}
		}

		$output .= walk_page_tree( $pages, $parsed_args['depth'], $current_page, $parsed_args );

		if ( $parsed_args['title_li'] ) {
			$output .= '</ul></li>';
		}
	}

	/**
	 * Filters the HTML output of the pages to list.
	 *
	 * @since 1.5.1
	 * @since 4.4.0 `$pages` added as arguments.
	 *
	 * @see wp_list_pages()
	 *
	 * @param string    $output      HTML output of the pages list.
	 * @param array     $parsed_args An array of page-listing arguments. See wp_list_pages()
	 *                               for information on accepted arguments.
	 * @param WP_Post[] $pages       Array of the page objects.
	 */
	$html = apply_filters( 'wp_list_pages', $output, $parsed_args, $pages );

	if ( $parsed_args['echo'] ) {
		echo $html;
	} else {
		return $html;
	}
}

/**
 * Displays or retrieves a list of pages with an optional home link.
 *
 * The arguments are listed below and part of the arguments are for wp_list_pages() function.
 * Check that function for more info on those arguments.
 *
 * @since 2.7.0
 * @since 4.4.0 Added `menu_id`, `container`, `before`, `after`, and `walker` arguments.
 * @since 4.7.0 Added the `item_spacing` argument.
 *
 * @param array|string $args {
 *     Optional. Array or string of arguments to generate a page menu. See wp_list_pages() for additional arguments.
 *
 *     @type string          $sort_column  How to sort the list of pages. Accepts post column names.
 *                                         Default 'menu_order, post_title'.
 *     @type string          $menu_id      ID for the div containing the page list. Default is empty string.
 *     @type string          $menu_class   Class to use for the element containing the page list. Default 'menu'.
 *     @type string          $container    Element to use for the element containing the page list. Default 'div'.
 *     @type bool            $echo         Whether to echo the list or return it. Accepts true (echo) or false (return).
 *                                         Default true.
 *     @type int|bool|string $show_home    Whether to display the link to the home page. Can just enter the text
 *                                         you'd like shown for the home link. 1|true defaults to 'Home'.
 *     @type string          $link_before  The HTML or text to prepend to $show_home text. Default empty.
 *     @type string          $link_after   The HTML or text to append to $show_home text. Default empty.
 *     @type string          $before       The HTML or text to prepend to the menu. Default is '<ul>'.
 *     @type string          $after        The HTML or text to append to the menu. Default is '</ul>'.
 *     @type string          $item_spacing Whether to preserve whitespace within the menu's HTML. Accepts 'preserve'
 *                                         or 'discard'. Default 'discard'.
 *     @type Walker          $walker       Walker instance to use for listing pages. Default empty which results in a
 *                                         Walker_Page instance being used.
 * }
 * @return void|string Void if 'echo' argument is true, HTML menu if 'echo' is false.
 */
function wp_page_menu( $args = array() ) {
	$defaults = array(
		'sort_column'  => 'menu_order, post_title',
		'menu_id'      => '',
		'menu_class'   => 'menu',
		'container'    => 'div',
		'echo'         => true,
		'link_before'  => '',
		'link_after'   => '',
		'before'       => '<ul>',
		'after'        => '</ul>',
		'item_spacing' => 'discard',
		'walker'       => '',
	);
	$args     = wp_parse_args( $args, $defaults );

	if ( ! in_array( $args['item_spacing'], array( 'preserve', 'discard' ), true ) ) {
		// Invalid value, fall back to default.
		$args['item_spacing'] = $defaults['item_spacing'];
	}

	if ( 'preserve' === $args['item_spacing'] ) {
		$t = "\t";
		$n = "\n";
	} else {
		$t = '';
		$n = '';
	}

	/**
	 * Filters the arguments used to generate a page-based menu.
	 *
	 * @since 2.7.0
	 *
	 * @see wp_page_menu()
	 *
	 * @param array $args An array of page menu arguments. See wp_page_menu()
	 *                    for information on accepted arguments.
	 */
	$args = apply_filters( 'wp_page_menu_args', $args );

	$menu = '';

	$list_args = $args;

	// Show Home in the menu.
	if ( ! empty( $args['show_home'] ) ) {
		if ( true === $args['show_home'] || '1' === $args['show_home'] || 1 === $args['show_home'] ) {
			$text = __( 'Home' );
		} else {
			$text = $args['show_home'];
		}
		$class = '';
		if ( is_front_page() && ! is_paged() ) {
			$class = 'class="current_page_item"';
		}
		$menu .= '<li ' . $class . '><a href="' . esc_url( home_url( '/' ) ) . '">' . $args['link_before'] . $text . $args['link_after'] . '</a></li>';
		// If the front page is a page, add it to the exclude list.
		if ( 'page' === get_option( 'show_on_front' ) ) {
			if ( ! empty( $list_args['exclude'] ) ) {
				$list_args['exclude'] .= ',';
			} else {
				$list_args['exclude'] = '';
			}
			$list_args['exclude'] .= get_option( 'page_on_front' );
		}
	}

	$list_args['echo']     = false;
	$list_args['title_li'] = '';
	$menu                 .= wp_list_pages( $list_args );

	$container = sanitize_text_field( $args['container'] );

	// Fallback in case `wp_nav_menu()` was called without a container.
	if ( empty( $container ) ) {
		$container = 'div';
	}

	if ( $menu ) {

		// wp_nav_menu() doesn't set before and after.
		if ( isset( $args['fallback_cb'] ) &&
			'wp_page_menu' === $args['fallback_cb'] &&
			'ul' !== $container ) {
			$args['before'] = "<ul>{$n}";
			$args['after']  = '</ul>';
		}

		$menu = $args['before'] . $menu . $args['after'];
	}

	$attrs = '';
	if ( ! empty( $args['menu_id'] ) ) {
		$attrs .= ' id="' . esc_attr( $args['menu_id'] ) . '"';
	}

	if ( ! empty( $args['menu_class'] ) ) {
		$attrs .= ' class="' . esc_attr( $args['menu_class'] ) . '"';
	}

	$menu = "<{$container}{$attrs}>" . $menu . "</{$container}>{$n}";

	/**
	 * Filters the HTML output of a page-based menu.
	 *
	 * @since 2.7.0
	 *
	 * @see wp_page_menu()
	 *
	 * @param string $menu The HTML output.
	 * @param array  $args An array of arguments. See wp_page_menu()
	 *                     for information on accepted arguments.
	 */
	$menu = apply_filters( 'wp_page_menu', $menu, $args );

	if ( $args['echo'] ) {
		echo $menu;
	} else {
		return $menu;
	}
}

//
// Page helpers.
//

/**
 * Retrieves HTML list content for page list.
 *
 * @uses Walker_Page to create HTML list content.
 * @since 2.1.0
 *
 * @param array $pages
 * @param int   $depth
 * @param int   $current_page
 * @param array $args
 * @return string
 */
function walk_page_tree( $pages, $depth, $current_page, $args ) {
	if ( empty( $args['walker'] ) ) {
		$walker = new Walker_Page();
	} else {
		/**
		 * @var Walker $walker
		 */
		$walker = $args['walker'];
	}

	foreach ( (array) $pages as $page ) {
		if ( $page->post_parent ) {
			$args['pages_with_children'][ $page->post_parent ] = true;
		}
	}

	return $walker->walk( $pages, $depth, $args, $current_page );
}

/**
 * Retrieves HTML dropdown (select) content for page list.
 *
 * @since 2.1.0
 * @since 5.3.0 Formalized the existing `...$args` parameter by adding it
 *              to the function signature.
 *
 * @uses Walker_PageDropdown to create HTML dropdown content.
 * @see Walker_PageDropdown::walk() for parameters and return description.
 *
 * @param mixed ...$args Elements array, maximum hierarchical depth and optional additional arguments.
 * @return string
 */
function walk_page_dropdown_tree( ...$args ) {
	if ( empty( $args[2]['walker'] ) ) { // The user's options are the third parameter.
		$walker = new Walker_PageDropdown();
	} else {
		/**
		 * @var Walker $walker
		 */
		$walker = $args[2]['walker'];
	}

	return $walker->walk( ...$args );
}

//
// Attachments.
//

/**
 * Displays an attachment page link using an image or icon.
 *
 * @since 2.0.0
 *
 * @param int|WP_Post $post       Optional. Post ID or post object.
 * @param bool        $fullsize   Optional. Whether to use full size. Default false.
 * @param bool        $deprecated Deprecated. Not used.
 * @param bool        $permalink Optional. Whether to include permalink. Default false.
 */
function the_attachment_link( $post = 0, $fullsize = false, $deprecated = false, $permalink = false ) {
	if ( ! empty( $deprecated ) ) {
		_deprecated_argument( __FUNCTION__, '2.5.0' );
	}

	if ( $fullsize ) {
		echo wp_get_attachment_link( $post, 'full', $permalink );
	} else {
		echo wp_get_attachment_link( $post, 'thumbnail', $permalink );
	}
}

/**
 * Retrieves an attachment page link using an image or icon, if possible.
 *
 * @since 2.5.0
 * @since 4.4.0 The `$post` parameter can now accept either a post ID or `WP_Post` object.
 *
 * @param int|WP_Post  $post      Optional. Post ID or post object.
 * @param string|int[] $size      Optional. Image size. Accepts any registered image size name, or an array
 *                                of width and height values in pixels (in that order). Default 'thumbnail'.
 * @param bool         $permalink Optional. Whether to add permalink to image. Default false.
 * @param bool         $icon      Optional. Whether the attachment is an icon. Default false.
 * @param string|false $text      Optional. Link text to use. Activated by passing a string, false otherwise.
 *                                Default false.
 * @param array|string $attr      Optional. Array or string of attributes. Default empty.
 * @return string HTML content.
 */
function wp_get_attachment_link( $post = 0, $size = 'thumbnail', $permalink = false, $icon = false, $text = false, $attr = '' ) {
	$_post = get_post( $post );

	if ( empty( $_post ) || ( 'attachment' !== $_post->post_type ) || ! wp_get_attachment_url( $_post->ID ) ) {
		return __( 'Missing Attachment' );
	}

	$url = wp_get_attachment_url( $_post->ID );

	if ( $permalink ) {
		$url = get_attachment_link( $_post->ID );
	}

	if ( $text ) {
		$link_text = $text;
	} elseif ( $size && 'none' !== $size ) {
		$link_text = wp_get_attachment_image( $_post->ID, $size, $icon, $attr );
	} else {
		$link_text = '';
	}

	if ( '' === trim( $link_text ) ) {
		$link_text = $_post->post_title;
	}

	if ( '' === trim( $link_text ) ) {
		$link_text = esc_html( pathinfo( get_attached_file( $_post->ID ), PATHINFO_FILENAME ) );
	}

	/**
	 * Filters the list of attachment link attributes.
	 *
	 * @since 6.2.0
	 *
	 * @param array $attributes An array of attributes for the link markup,
	 *                          keyed on the attribute name.
	 * @param int   $id         Post ID.
	 */
	$attributes = apply_filters( 'wp_get_attachment_link_attributes', array( 'href' => $url ), $_post->ID );

	$link_attributes = '';
	foreach ( $attributes as $name => $value ) {
		$value            = 'href' === $name ? esc_url( $value ) : esc_attr( $value );
		$link_attributes .= ' ' . esc_attr( $name ) . "='" . $value . "'";
	}

	$link_html = "<a$link_attributes>$link_text</a>";

	/**
	 * Filters a retrieved attachment page link.
	 *
	 * @since 2.7.0
	 * @since 5.1.0 Added the `$attr` parameter.
	 *
	 * @param string       $link_html The page link HTML output.
	 * @param int|WP_Post  $post      Post ID or object. Can be 0 for the current global post.
	 * @param string|int[] $size      Requested image size. Can be any registered image size name, or
	 *                                an array of width and height values in pixels (in that order).
	 * @param bool         $permalink Whether to add permalink to image. Default false.
	 * @param bool         $icon      Whether to include an icon.
	 * @param string|false $text      If string, will be link text.
	 * @param array|string $attr      Array or string of attributes.
	 */
	return apply_filters( 'wp_get_attachment_link', $link_html, $post, $size, $permalink, $icon, $text, $attr );
}

/**
 * Wraps attachment in paragraph tag before content.
 *
 * @since 2.0.0
 *
 * @param string $content
 * @return string
 */
function prepend_attachment( $content ) {
	$post = get_post();

	if ( empty( $post->post_type ) || 'attachment' !== $post->post_type ) {
		return $content;
	}

	if ( wp_attachment_is( 'video', $post ) ) {
		$meta = wp_get_attachment_metadata( get_the_ID() );
		$atts = array( 'src' => wp_get_attachment_url() );
		if ( ! empty( $meta['width'] ) && ! empty( $meta['height'] ) ) {
			$atts['width']  = (int) $meta['width'];
			$atts['height'] = (int) $meta['height'];
		}
		if ( has_post_thumbnail() ) {
			$atts['poster'] = wp_get_attachment_url( get_post_thumbnail_id() );
		}
		$p = wp_video_shortcode( $atts );
	} elseif ( wp_attachment_is( 'audio', $post ) ) {
		$p = wp_audio_shortcode( array( 'src' => wp_get_attachment_url() ) );
	} else {
		$p = '<p class="attachment">';
		// Show the medium sized image representation of the attachment if available, and link to the raw file.
		$p .= wp_get_attachment_link( 0, 'medium', false );
		$p .= '</p>';
	}

	/**
	 * Filters the attachment markup to be prepended to the post content.
	 *
	 * @since 2.0.0
	 *
	 * @see prepend_attachment()
	 *
	 * @param string $p The attachment HTML output.
	 */
	$p = apply_filters( 'prepend_attachment', $p );

	return "$p\n$content";
}

//
// Misc.
//

/**
 * Retrieves protected post password form content.
 *
 * @since 1.0.0
 *
 * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global $post.
 * @return string HTML content for password form for password protected post.
 */
function get_the_password_form( $post = 0 ) {
	$post                  = get_post( $post );
	$field_id              = 'pwbox-' . ( empty( $post->ID ) ? wp_rand() : $post->ID );
	$invalid_password      = '';
	$invalid_password_html = '';
	$aria                  = '';
	$class                 = '';
	$redirect_field        = '';

	// If the referrer is the same as the current request, the user has entered an invalid password.
	if ( ! empty( $post->ID ) && wp_get_raw_referer() === get_permalink( $post->ID ) && isset( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] ) ) {
		/**
		 * Filters the invalid password message shown on password-protected posts.
		 * The filter is only applied if the post is password protected.
		 *
		 * @since 6.8.0
		 *
		 * @param string  $text The message shown to users when entering an invalid password.
		 * @param WP_Post $post Post object.
		 */
		$invalid_password      = apply_filters( 'the_password_form_incorrect_password', __( 'Invalid password.' ), $post );
		$invalid_password_html = '<div class="post-password-form-invalid-password" role="alert"><p id="error-' . $field_id . '">' . $invalid_password . '</p></div>';
		$aria                  = ' aria-describedby="error-' . $field_id . '"';
		$class                 = ' password-form-error';
	}

	if ( ! empty( $post->ID ) ) {
		$redirect_field = sprintf(
			'<input type="hidden" name="redirect_to" value="%s" />',
			esc_attr( get_permalink( $post->ID ) )
		);
	}

	$output = '<form action="' . esc_url( site_url( 'wp-login.php?action=postpass', 'login_post' ) ) . '" class="post-password-form' . $class . '" method="post">' . $redirect_field . $invalid_password_html . '
	<p>' . __( 'This content is password protected. To view it please enter your password below:' ) . '</p>
	<p><label for="' . $field_id . '">' . __( 'Password:' ) . ' <input name="post_password" id="' . $field_id . '" type="password" spellcheck="false" required size="20"' . $aria . ' /></label> <input type="submit" name="Submit" value="' . esc_attr_x( 'Enter', 'post password form' ) . '" /></p></form>
	';

	/**
	 * Filters the HTML output for the protected post password form.
	 *
	 * If modifying the password field, please note that the WordPress database schema
	 * limits the password field to 255 characters regardless of the value of the
	 * `minlength` or `maxlength` attributes or other validation that may be added to
	 * the input.
	 *
	 * @since 2.7.0
	 * @since 5.8.0 Added the `$post` parameter.
	 * @since 6.8.0 Added the `$invalid_password` parameter.
	 *
	 * @param string  $output           The password form HTML output.
	 * @param WP_Post $post             Post object.
	 * @param string  $invalid_password The invalid password message.
	 */
	return apply_filters( 'the_password_form', $output, $post, $invalid_password );
}

/**
 * Determines whether the current post uses a page template.
 *
 * This template tag allows you to determine if you are in a page template.
 * You can optionally provide a template filename or array of template filenames
 * and then the check will be specific to that template.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 2.5.0
 * @since 4.2.0 The `$template` parameter was changed to also accept an array of page templates.
 * @since 4.7.0 Now works with any post type, not just pages.
 *
 * @param string|string[] $template The specific template filename or array of templates to match.
 * @return bool True on success, false on failure.
 */
function is_page_template( $template = '' ) {
	if ( ! is_singular() ) {
		return false;
	}

	$page_template = get_page_template_slug( get_queried_object_id() );

	if ( empty( $template ) ) {
		return (bool) $page_template;
	}

	if ( $template === $page_template ) {
		return true;
	}

	if ( is_array( $template ) ) {
		if ( ( in_array( 'default', $template, true ) && ! $page_template )
			|| in_array( $page_template, $template, true )
		) {
			return true;
		}
	}

	return ( 'default' === $template && ! $page_template );
}

/**
 * Gets the specific template filename for a given post.
 *
 * @since 3.4.0
 * @since 4.7.0 Now works with any post type, not just pages.
 *
 * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global $post.
 * @return string|false Page template filename. Returns an empty string when the default page template
 *                      is in use. Returns false if the post does not exist.
 */
function get_page_template_slug( $post = null ) {
	$post = get_post( $post );

	if ( ! $post ) {
		return false;
	}

	$template = get_post_meta( $post->ID, '_wp_page_template', true );

	if ( ! $template || 'default' === $template ) {
		return '';
	}

	return $template;
}

/**
 * Retrieves formatted date timestamp of a revision (linked to that revisions's page).
 *
 * @since 2.6.0
 *
 * @param int|WP_Post $revision Revision ID or revision object.
 * @param bool        $link     Optional. Whether to link to revision's page. Default true.
 * @return string|false i18n formatted datetimestamp or localized 'Current Revision'.
 */
function wp_post_revision_title( $revision, $link = true ) {
	$revision = get_post( $revision );

	if ( ! $revision ) {
		return $revision;
	}

	if ( ! in_array( $revision->post_type, array( 'post', 'page', 'revision' ), true ) ) {
		return false;
	}

	/* translators: Revision date format, see https://www.php.net/manual/datetime.format.php */
	$datef = _x( 'F j, Y @ H:i:s', 'revision date format' );
	/* translators: %s: Revision date. */
	$autosavef = __( '%s [Autosave]' );
	/* translators: %s: Revision date. */
	$currentf = __( '%s [Current Revision]' );

	$date      = date_i18n( $datef, strtotime( $revision->post_modified ) );
	$edit_link = get_edit_post_link( $revision->ID );
	if ( $link && current_user_can( 'edit_post', $revision->ID ) && $edit_link ) {
		$date = "<a href='$edit_link'>$date</a>";
	}

	if ( ! wp_is_post_revision( $revision ) ) {
		$date = sprintf( $currentf, $date );
	} elseif ( wp_is_post_autosave( $revision ) ) {
		$date = sprintf( $autosavef, $date );
	}

	return $date;
}

/**
 * Retrieves formatted date timestamp of a revision (linked to that revisions's page).
 *
 * @since 3.6.0
 *
 * @param int|WP_Post $revision Revision ID or revision object.
 * @param bool        $link     Optional. Whether to link to revision's page. Default true.
 * @return string|false gravatar, user, i18n formatted datetimestamp or localized 'Current Revision'.
 */
function wp_post_revision_title_expanded( $revision, $link = true ) {
	$revision = get_post( $revision );

	if ( ! $revision ) {
		return $revision;
	}

	if ( ! in_array( $revision->post_type, array( 'post', 'page', 'revision' ), true ) ) {
		return false;
	}

	$author = get_the_author_meta( 'display_name', $revision->post_author );
	/* translators: Revision date format, see https://www.php.net/manual/datetime.format.php */
	$datef = _x( 'F j, Y @ H:i:s', 'revision date format' );

	$gravatar = get_avatar( $revision->post_author, 24 );

	$date      = date_i18n( $datef, strtotime( $revision->post_modified ) );
	$edit_link = get_edit_post_link( $revision->ID );
	if ( $link && current_user_can( 'edit_post', $revision->ID ) && $edit_link ) {
		$date = "<a href='$edit_link'>$date</a>";
	}

	$revision_date_author = sprintf(
		/* translators: Post revision title. 1: Author avatar, 2: Author name, 3: Time ago, 4: Date. */
		__( '%1$s %2$s, %3$s ago (%4$s)' ),
		$gravatar,
		$author,
		human_time_diff( strtotime( $revision->post_modified_gmt ) ),
		$date
	);

	/* translators: %s: Revision date with author avatar. */
	$autosavef = __( '%s [Autosave]' );
	/* translators: %s: Revision date with author avatar. */
	$currentf = __( '%s [Current Revision]' );

	if ( ! wp_is_post_revision( $revision ) ) {
		$revision_date_author = sprintf( $currentf, $revision_date_author );
	} elseif ( wp_is_post_autosave( $revision ) ) {
		$revision_date_author = sprintf( $autosavef, $revision_date_author );
	}

	/**
	 * Filters the formatted author and date for a revision.
	 *
	 * @since 4.4.0
	 *
	 * @param string  $revision_date_author The formatted string.
	 * @param WP_Post $revision             The revision object.
	 * @param bool    $link                 Whether to link to the revisions page, as passed into
	 *                                      wp_post_revision_title_expanded().
	 */
	return apply_filters( 'wp_post_revision_title_expanded', $revision_date_author, $revision, $link );
}

/**
 * Displays a list of a post's revisions.
 *
 * Can output either a UL with edit links or a TABLE with diff interface, and
 * restore action links.
 *
 * @since 2.6.0
 *
 * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global $post.
 * @param string      $type 'all' (default), 'revision' or 'autosave'
 */
function wp_list_post_revisions( $post = 0, $type = 'all' ) {
	$post = get_post( $post );

	if ( ! $post ) {
		return;
	}

	// $args array with (parent, format, right, left, type) deprecated since 3.6.
	if ( is_array( $type ) ) {
		$type = ! empty( $type['type'] ) ? $type['type'] : $type;
		_deprecated_argument( __FUNCTION__, '3.6.0' );
	}

	$revisions = wp_get_post_revisions( $post->ID );

	if ( ! $revisions ) {
		return;
	}

	$rows = '';
	foreach ( $revisions as $revision ) {
		if ( ! current_user_can( 'read_post', $revision->ID ) ) {
			continue;
		}

		$is_autosave = wp_is_post_autosave( $revision );
		if ( ( 'revision' === $type && $is_autosave ) || ( 'autosave' === $type && ! $is_autosave ) ) {
			continue;
		}

		$rows .= "\t<li>" . wp_post_revision_title_expanded( $revision ) . "</li>\n";
	}

	echo "<div class='hide-if-js'><p>" . __( 'JavaScript must be enabled to use this feature.' ) . "</p></div>\n";

	echo "<ul class='post-revisions hide-if-no-js'>\n";
	echo $rows;
	echo '</ul>';
}

/**
 * Retrieves the parent post object for the given post.
 *
 * @since 5.7.0
 *
 * @param int|WP_Post|null $post Optional. Post ID or WP_Post object. Default is global $post.
 * @return WP_Post|null Parent post object, or null if there isn't one.
 */
function get_post_parent( $post = null ) {
	$wp_post = get_post( $post );
	return ! empty( $wp_post->post_parent ) ? get_post( $wp_post->post_parent ) : null;
}

/**
 * Returns whether the given post has a parent post.
 *
 * @since 5.7.0
 *
 * @param int|WP_Post|null $post Optional. Post ID or WP_Post object. Default is global $post.
 * @return bool Whether the post has a parent post.
 */
function has_post_parent( $post = null ) {
	return (bool) get_post_parent( $post );
}

[ Back ]
Name
Size
Last Modified
Owner / Group
Permissions
Options
..
--
May 22 2025 15:46:24
1032 / wheelch2
0755
ID3
--
May 21 2025 00:30:57
1032 / wheelch2
0755
IXR
--
May 21 2025 00:30:57
1032 / wheelch2
0755
PHPMailer
--
May 21 2025 00:30:57
1032 / wheelch2
0755
Requests
--
May 21 2025 00:30:57
1032 / wheelch2
0755
SimplePie
--
May 21 2025 00:30:57
1032 / wheelch2
0755
Text
--
May 21 2025 00:30:57
1032 / wheelch2
0755
assets
--
May 21 2025 00:30:57
1032 / wheelch2
0755
block-bindings
--
May 21 2025 00:30:57
1032 / wheelch2
0755
block-patterns
--
May 21 2025 00:30:57
1032 / wheelch2
0755
block-supports
--
May 21 2025 00:30:57
1032 / wheelch2
0755
blocks
--
May 21 2025 00:30:57
1032 / wheelch2
0755
certificates
--
May 21 2025 00:30:57
1032 / wheelch2
0755
css
--
May 21 2025 00:30:57
1032 / wheelch2
0755
customize
--
May 21 2025 00:30:57
1032 / wheelch2
0755
fonts
--
May 21 2025 00:30:57
1032 / wheelch2
0755
html-api
--
May 21 2025 00:30:57
1032 / wheelch2
0755
images
--
May 21 2025 00:30:57
1032 / wheelch2
0755
interactivity-api
--
May 21 2025 00:30:57
1032 / wheelch2
0755
js
--
May 21 2025 00:30:57
1032 / wheelch2
0755
l10n
--
May 21 2025 00:30:57
1032 / wheelch2
0755
php-compat
--
May 21 2025 00:30:57
1032 / wheelch2
0755
pomo
--
May 21 2025 00:30:57
1032 / wheelch2
0755
rest-api
--
May 21 2025 00:30:57
1032 / wheelch2
0755
sitemaps
--
May 21 2025 00:30:57
1032 / wheelch2
0755
sodium_compat
--
May 21 2025 00:30:57
1032 / wheelch2
0755
style-engine
--
May 21 2025 00:30:57
1032 / wheelch2
0755
theme-compat
--
May 21 2025 00:30:57
1032 / wheelch2
0755
widgets
--
May 21 2025 00:30:57
1032 / wheelch2
0755
wp-backup
--
May 21 2025 00:30:57
1032 / wheelch2
0755
.htaccess
0.124 KB
May 21 2025 00:30:57
1032 / wheelch2
0444
admin-bar.php
36.236 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
admin.php
0 KB
March 02 2024 06:00:08
1032 / wheelch2
0644
atomlib.php
11.795 KB
September 18 2024 20:20:16
1032 / wheelch2
0644
author-template.php
18.507 KB
May 14 2023 16:58:24
1032 / wheelch2
0644
block-bindings.php
5.463 KB
June 12 2024 11:44:14
1032 / wheelch2
0644
block-editor.php
28.122 KB
March 17 2025 13:03:30
1032 / wheelch2
0644
block-i18n.json
0.309 KB
August 11 2021 08:08:02
1032 / wheelch2
0644
block-patterns.php
12.903 KB
November 29 2024 22:46:22
1032 / wheelch2
0644
block-template-utils.php
60.456 KB
March 07 2025 17:55:24
1032 / wheelch2
0644
block-template.php
14.996 KB
March 18 2025 22:08:26
1032 / wheelch2
0644
blocks.php
109.113 KB
April 30 2025 18:30:12
1032 / wheelch2
0644
bookmark-template.php
12.469 KB
March 19 2025 23:15:36
1032 / wheelch2
0644
bookmark.php
15.065 KB
March 23 2024 14:20:12
1032 / wheelch2
0644
cache-compat.php
5.829 KB
October 10 2022 17:22:12
1032 / wheelch2
0644
cache.php
13.158 KB
October 10 2022 17:22:12
1032 / wheelch2
0644
canonical.php
33.714 KB
August 22 2024 22:47:16
1032 / wheelch2
0644
capabilities.php
41.717 KB
October 15 2024 13:13:20
1032 / wheelch2
0644
category-template.php
55.667 KB
September 25 2023 23:27:12
1032 / wheelch2
0644
category.php
12.528 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
class-IXR.php
2.555 KB
January 22 2025 19:48:26
1032 / wheelch2
0644
class-avif-info.php
28.921 KB
April 26 2024 14:02:14
1032 / wheelch2
0644
class-feed.php
0.526 KB
September 30 2024 21:50:20
1032 / wheelch2
0644
class-http.php
0.358 KB
June 17 2022 10:20:14
1032 / wheelch2
0644
class-json.php
42.66 KB
February 03 2023 13:35:20
1032 / wheelch2
0644
class-oembed.php
0.392 KB
June 17 2022 10:20:14
1032 / wheelch2
0644
class-phpass.php
6.612 KB
September 17 2024 20:08:16
1032 / wheelch2
0644
class-phpmailer.php
0.648 KB
July 21 2020 11:58:02
1032 / wheelch2
0644
class-pop3.php
20.626 KB
October 25 2024 19:26:20
1032 / wheelch2
0644
class-requests.php
2.185 KB
April 05 2023 12:12:26
1032 / wheelch2
0644
class-simplepie.php
0.442 KB
September 30 2024 21:50:20
1032 / wheelch2
0644
class-smtp.php
0.446 KB
January 26 2021 13:45:58
1032 / wheelch2
0644
class-snoopy.php
36.831 KB
February 03 2023 13:35:20
1032 / wheelch2
0644
class-walker-category-dropdown.php
2.411 KB
September 14 2023 11:46:20
1032 / wheelch2
0644
class-walker-category.php
8.278 KB
September 08 2023 08:32:24
1032 / wheelch2
0644
class-walker-comment.php
13.888 KB
March 18 2024 15:46:14
1032 / wheelch2
0644
class-walker-nav-menu.php
11.762 KB
January 21 2025 21:26:24
1032 / wheelch2
0644
class-walker-page-dropdown.php
2.646 KB
September 14 2023 11:46:20
1032 / wheelch2
0644
class-walker-page.php
7.434 KB
September 14 2023 11:46:20
1032 / wheelch2
0644
class-wp-admin-bar.php
17.455 KB
July 17 2024 23:52:18
1032 / wheelch2
0644
class-wp-ajax-response.php
5.143 KB
September 12 2022 14:47:14
1032 / wheelch2
0644
class-wp-application-passwords.php
16.698 KB
April 03 2025 13:38:28
1032 / wheelch2
0644
class-wp-block-bindings-registry.php
8.265 KB
September 23 2024 11:35:16
1032 / wheelch2
0644
class-wp-block-bindings-source.php
2.922 KB
September 03 2024 15:33:16
1032 / wheelch2
0644
class-wp-block-editor-context.php
1.318 KB
September 12 2022 14:47:14
1032 / wheelch2
0644
class-wp-block-list.php
4.646 KB
November 02 2023 00:04:24
1032 / wheelch2
0644
class-wp-block-metadata-registry.php
11.616 KB
March 05 2025 22:17:24
1032 / wheelch2
0644
class-wp-block-parser-block.php
2.495 KB
June 26 2023 23:45:38
1032 / wheelch2
0644
class-wp-block-parser-frame.php
1.97 KB
September 20 2024 00:55:36
1032 / wheelch2
0644
class-wp-block-parser.php
11.262 KB
May 02 2024 19:09:16
1032 / wheelch2
0644
class-wp-block-pattern-categories-registry.php
5.245 KB
September 12 2022 14:47:14
1032 / wheelch2
0644
class-wp-block-patterns-registry.php
10.53 KB
September 27 2024 08:20:18
1032 / wheelch2
0644
class-wp-block-styles-registry.php
6.253 KB
February 04 2025 08:42:26
1032 / wheelch2
0644
class-wp-block-supports.php
5.494 KB
March 04 2025 13:06:28
1032 / wheelch2
0644
class-wp-block-template.php
1.985 KB
September 20 2024 01:07:12
1032 / wheelch2
0644
class-wp-block-templates-registry.php
7.062 KB
January 30 2025 21:19:26
1032 / wheelch2
0644
class-wp-block-type-registry.php
4.896 KB
October 12 2023 11:34:34
1032 / wheelch2
0644
class-wp-block-type.php
16.86 KB
May 01 2024 23:01:10
1032 / wheelch2
0644
class-wp-block.php
22.501 KB
February 14 2025 18:38:22
1032 / wheelch2
0644
class-wp-classic-to-block-menu-converter.php
3.992 KB
August 21 2023 16:51:20
1032 / wheelch2
0644
class-wp-comment-query.php
47.261 KB
June 21 2024 16:26:14
1032 / wheelch2
0644
class-wp-comment.php
9.216 KB
February 11 2025 13:40:30
1032 / wheelch2
0644
class-wp-customize-control.php
25.245 KB
February 08 2025 12:00:20
1032 / wheelch2
0644
class-wp-customize-manager.php
197.845 KB
February 08 2025 16:00:20
1032 / wheelch2
0644
class-wp-customize-nav-menus.php
56.066 KB
March 06 2025 23:48:24
1032 / wheelch2
0644
class-wp-customize-panel.php
10.459 KB
January 22 2025 19:48:26
1032 / wheelch2
0644
class-wp-customize-section.php
10.946 KB
October 13 2024 18:09:12
1032 / wheelch2
0644
class-wp-customize-setting.php
29.26 KB
January 22 2025 19:48:26
1032 / wheelch2
0644
class-wp-customize-widgets.php
70.518 KB
January 21 2025 22:38:24
1032 / wheelch2
0644
class-wp-date-query.php
34.895 KB
November 27 2024 11:40:18
1032 / wheelch2
0644
class-wp-dependencies.php
14.784 KB
August 25 2024 22:48:14
1032 / wheelch2
0644
class-wp-dependency.php
2.565 KB
November 25 2022 15:12:16
1032 / wheelch2
0644
class-wp-duotone.php
39.827 KB
June 14 2024 11:18:12
1032 / wheelch2
0644
class-wp-editor.php
70.64 KB
April 30 2025 18:30:12
1032 / wheelch2
0644
class-wp-embed.php
15.558 KB
April 14 2025 13:31:24
1032 / wheelch2
0644
class-wp-error.php
7.326 KB
February 21 2023 16:39:20
1032 / wheelch2
0644
class-wp-exception.php
0.247 KB
September 27 2024 18:28:14
1032 / wheelch2
0644
class-wp-fatal-error-handler.php
7.959 KB
October 22 2024 09:16:16
1032 / wheelch2
0644
class-wp-feed-cache-transient.php
3.102 KB
September 30 2024 21:50:20
1032 / wheelch2
0644
class-wp-feed-cache.php
0.946 KB
September 30 2024 21:50:20
1032 / wheelch2
0644
class-wp-hook.php
15.625 KB
September 18 2023 11:41:18
1032 / wheelch2
0644
class-wp-http-cookie.php
7.216 KB
June 24 2023 16:17:24
1032 / wheelch2
0644
class-wp-http-curl.php
12.247 KB
September 21 2023 17:29:12
1032 / wheelch2
0644
class-wp-http-encoding.php
6.532 KB
June 22 2023 13:57:24
1032 / wheelch2
0644
class-wp-http-ixr-client.php
3.419 KB
September 12 2022 14:47:14
1032 / wheelch2
0644
class-wp-http-proxy.php
5.84 KB
June 22 2023 13:36:26
1032 / wheelch2
0644
class-wp-http-requests-hooks.php
1.975 KB
December 15 2022 21:32:18
1032 / wheelch2
0644
class-wp-http-requests-response.php
4.297 KB
October 11 2023 06:05:26
1032 / wheelch2
0644
class-wp-http-response.php
2.907 KB
September 12 2022 14:47:14
1032 / wheelch2
0644
class-wp-http-streams.php
16.464 KB
September 21 2023 17:29:12
1032 / wheelch2
0644
class-wp-http.php
40.604 KB
January 22 2025 19:48:26
1032 / wheelch2
0644
class-wp-image-editor-gd.php
19.689 KB
November 29 2024 23:48:16
1032 / wheelch2
0644
class-wp-image-editor-imagick.php
33.921 KB
March 18 2025 23:25:32
1032 / wheelch2
0644
class-wp-image-editor.php
17.116 KB
February 21 2025 20:25:24
1032 / wheelch2
0644
class-wp-list-util.php
7.269 KB
February 27 2024 22:38:16
1032 / wheelch2
0644
class-wp-locale-switcher.php
6.617 KB
January 08 2025 12:54:18
1032 / wheelch2
0644
class-wp-locale.php
16.487 KB
February 25 2025 22:40:22
1032 / wheelch2
0644
class-wp-matchesmapregex.php
1.785 KB
February 06 2024 01:25:14
1032 / wheelch2
0644
class-wp-meta-query.php
29.815 KB
April 22 2024 19:25:08
1032 / wheelch2
0644
class-wp-metadata-lazyloader.php
6.673 KB
May 11 2023 10:15:24
1032 / wheelch2
0644
class-wp-navigation-fallback.php
8.995 KB
October 06 2023 13:06:22
1032 / wheelch2
0644
class-wp-network-query.php
19.392 KB
June 21 2024 16:26:14
1032 / wheelch2
0644
class-wp-network.php
12.008 KB
September 13 2024 21:12:16
1032 / wheelch2
0644
class-wp-object-cache.php
17.113 KB
September 19 2024 11:12:16
1032 / wheelch2
0644
class-wp-oembed-controller.php
6.743 KB
March 06 2024 05:05:12
1032 / wheelch2
0644
class-wp-oembed.php
30.909 KB
February 28 2025 13:30:22
1032 / wheelch2
0644
class-wp-paused-extensions-storage.php
4.991 KB
September 03 2024 17:19:14
1032 / wheelch2
0644
class-wp-phpmailer.php
3.713 KB
January 08 2025 12:54:18
1032 / wheelch2
0644
class-wp-plugin-dependencies.php
24.722 KB
March 17 2025 22:40:26
1032 / wheelch2
0644
class-wp-post-type.php
29.961 KB
February 09 2025 11:09:22
1032 / wheelch2
0644
class-wp-post.php
6.336 KB
February 12 2025 18:11:26
1032 / wheelch2
0644
class-wp-query.php
154.319 KB
March 18 2025 23:34:26
1032 / wheelch2
0644
class-wp-recovery-mode-cookie-service.php
6.716 KB
October 04 2022 02:59:14
1032 / wheelch2
0644
class-wp-recovery-mode-email-service.php
10.921 KB
May 02 2023 14:45:22
1032 / wheelch2
0644
class-wp-recovery-mode-key-service.php
4.77 KB
February 17 2025 11:24:22
1032 / wheelch2
0644
class-wp-recovery-mode-link-service.php
3.382 KB
September 12 2022 14:47:14
1032 / wheelch2
0644
class-wp-recovery-mode.php
11.185 KB
February 23 2025 11:11:22
1032 / wheelch2
0644
class-wp-rewrite.php
62.195 KB
October 19 2024 22:54:18
1032 / wheelch2
0644
class-wp-role.php
2.464 KB
September 08 2023 08:32:24
1032 / wheelch2
0644
class-wp-roles.php
8.385 KB
September 03 2024 17:19:14
1032 / wheelch2
0644
class-wp-script-modules.php
19.007 KB
December 11 2024 15:20:18
1032 / wheelch2
0644
class-wp-scripts.php
27.68 KB
August 10 2024 22:00:14
1032 / wheelch2
0644
class-wp-session-tokens.php
7.147 KB
February 11 2025 11:14:22
1032 / wheelch2
0644
class-wp-simplepie-file.php
3.328 KB
September 30 2024 21:50:20
1032 / wheelch2
0644
class-wp-simplepie-sanitize-kses.php
1.865 KB
January 22 2025 19:48:26
1032 / wheelch2
0644
class-wp-site-query.php
30.884 KB
September 11 2024 11:08:20
1032 / wheelch2
0644
class-wp-site.php
7.279 KB
September 12 2022 14:47:14
1032 / wheelch2
0644
class-wp-speculation-rules.php
7.351 KB
February 18 2025 22:32:22
1032 / wheelch2
0644
class-wp-styles.php
10.752 KB
August 10 2024 22:00:14
1032 / wheelch2
0644
class-wp-tax-query.php
19.097 KB
February 16 2024 21:47:12
1032 / wheelch2
0644
class-wp-taxonomy.php
18.124 KB
March 26 2025 22:07:28
1032 / wheelch2
0644
class-wp-term-query.php
39.911 KB
October 30 2024 22:34:20
1032 / wheelch2
0644
class-wp-term.php
5.174 KB
September 12 2022 14:47:14
1032 / wheelch2
0644
class-wp-text-diff-renderer-inline.php
0.956 KB
February 14 2024 19:27:10
1032 / wheelch2
0644
class-wp-text-diff-renderer-table.php
18.438 KB
January 22 2025 19:48:26
1032 / wheelch2
0644
class-wp-textdomain-registry.php
10.235 KB
November 20 2024 02:50:24
1032 / wheelch2
0644
class-wp-theme-json-data.php
1.767 KB
June 04 2024 10:55:14
1032 / wheelch2
0644
class-wp-theme-json-resolver.php
34.9 KB
November 04 2024 02:34:16
1032 / wheelch2
0644
class-wp-theme-json-schema.php
7.194 KB
June 06 2024 07:02:16
1032 / wheelch2
0644
class-wp-theme-json.php
159.712 KB
March 19 2025 18:46:30
1032 / wheelch2
0644
class-wp-theme.php
64.268 KB
April 08 2025 13:18:28
1032 / wheelch2
0644
class-wp-token-map.php
27.947 KB
July 19 2024 22:44:16
1032 / wheelch2
0644
class-wp-url-pattern-prefixer.php
4.689 KB
February 18 2025 22:32:22
1032 / wheelch2
0644
class-wp-user-meta-session-tokens.php
2.92 KB
January 09 2019 05:04:50
1032 / wheelch2
0644
class-wp-user-query.php
42.632 KB
December 19 2024 10:24:24
1032 / wheelch2
0644
class-wp-user-request.php
2.251 KB
February 17 2025 11:24:22
1032 / wheelch2
0644
class-wp-user.php
22.455 KB
March 04 2025 14:19:22
1032 / wheelch2
0644
class-wp-walker.php
13.01 KB
July 26 2024 06:56:14
1032 / wheelch2
0644
class-wp-widget-factory.php
3.269 KB
September 12 2022 14:47:14
1032 / wheelch2
0644
class-wp-widget.php
17.997 KB
November 02 2024 15:01:20
1032 / wheelch2
0644
class-wp-xmlrpc-server.php
210.395 KB
February 08 2025 16:00:20
1032 / wheelch2
0644
class-wp.php
25.701 KB
January 29 2025 18:12:26
1032 / wheelch2
0644
class-wpdb.php
115.512 KB
February 11 2025 11:14:22
1032 / wheelch2
0644
class.wp-dependencies.php
0.364 KB
September 20 2022 13:17:12
1032 / wheelch2
0644
class.wp-scripts.php
0.335 KB
September 20 2022 13:17:12
1032 / wheelch2
0644
class.wp-styles.php
0.33 KB
September 20 2022 13:17:12
1032 / wheelch2
0644
comment-template.php
100.471 KB
December 08 2024 23:43:22
1032 / wheelch2
0644
comment.php
128.464 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
compat.php
15.992 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
cron.php
41.81 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
date.php
0.391 KB
June 17 2022 10:20:14
1032 / wheelch2
0644
default-constants.php
11.099 KB
September 30 2024 22:58:16
1032 / wheelch2
0644
default-filters.php
35.837 KB
March 25 2025 06:45:28
1032 / wheelch2
0644
default-widgets.php
2.241 KB
January 22 2025 19:48:26
1032 / wheelch2
0644
deprecated.php
187.073 KB
March 13 2025 23:00:32
1032 / wheelch2
0644
embed-template.php
0.33 KB
June 17 2022 10:20:14
1032 / wheelch2
0644
embed.php
37.277 KB
January 24 2025 13:32:22
1032 / wheelch2
0644
error-protection.php
4.024 KB
May 02 2023 14:45:22
1032 / wheelch2
0644
feed-atom-comments.php
5.375 KB
March 04 2024 12:41:10
1032 / wheelch2
0644
feed-atom.php
3.048 KB
January 22 2025 19:48:26
1032 / wheelch2
0644
feed-rdf.php
2.605 KB
January 29 2020 00:45:18
1032 / wheelch2
0644
feed-rss.php
1.161 KB
January 29 2020 00:45:18
1032 / wheelch2
0644
feed-rss2-comments.php
4.039 KB
March 04 2024 12:41:10
1032 / wheelch2
0644
feed-rss2.php
3.71 KB
January 29 2020 00:45:18
1032 / wheelch2
0644
feed.php
22.862 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
fonts.php
9.522 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
formatting.php
334.239 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
functions.php
280.946 KB
May 21 2025 00:30:01
1032 / wheelch2
0444
functions.wp-scripts.php
14.217 KB
May 26 2024 19:51:14
1032 / wheelch2
0644
functions.wp-styles.php
8.382 KB
May 26 2024 19:51:14
1032 / wheelch2
0644
general-template.php
168.58 KB
April 16 2025 09:38:42
1032 / wheelch2
0644
global-styles-and-settings.php
20.763 KB
February 14 2025 18:38:22
1032 / wheelch2
0644
http.php
24.719 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
https-detection.php
5.72 KB
February 24 2025 13:43:24
1032 / wheelch2
0644
https-migration.php
4.63 KB
July 10 2023 21:38:26
1032 / wheelch2
0644
kses.php
72.727 KB
January 21 2025 22:59:18
1032 / wheelch2
0644
l10n.php
66.924 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
link-template.php
154.103 KB
February 24 2025 13:43:24
1032 / wheelch2
0644
load.php
55.117 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
locale.php
0.158 KB
October 08 2019 16:19:04
1032 / wheelch2
0644
media-template.php
61.582 KB
February 17 2025 22:58:24
1032 / wheelch2
0644
media.php
215.115 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
meta.php
63.714 KB
February 23 2025 21:53:26
1032 / wheelch2
0644
ms-blogs.php
25.239 KB
January 22 2025 19:48:26
1032 / wheelch2
0644
ms-default-constants.php
4.806 KB
June 13 2024 19:50:14
1032 / wheelch2
0644
ms-default-filters.php
6.48 KB
February 24 2023 01:23:20
1032 / wheelch2
0644
ms-deprecated.php
21.249 KB
April 12 2024 16:47:14
1032 / wheelch2
0644
ms-files.php
2.68 KB
April 30 2025 18:30:12
1032 / wheelch2
0644
ms-functions.php
89.436 KB
February 03 2025 19:52:24
1032 / wheelch2
0644
ms-load.php
19.417 KB
March 25 2024 17:19:18
1032 / wheelch2
0644
ms-network.php
3.693 KB
May 02 2023 10:26:24
1032 / wheelch2
0644
ms-settings.php
4.099 KB
January 22 2025 19:48:26
1032 / wheelch2
0644
ms-site.php
40.352 KB
January 17 2025 00:12:26
1032 / wheelch2
0644
nav-menu-template.php
25.381 KB
January 22 2025 19:48:26
1032 / wheelch2
0644
nav-menu.php
43.333 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
option.php
100.649 KB
March 05 2025 22:59:22
1032 / wheelch2
0644
pluggable-deprecated.php
6.176 KB
February 03 2025 19:52:24
1032 / wheelch2
0644
pluggable.php
119.824 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
plugin.php
34.777 KB
May 21 2025 00:30:01
1032 / wheelch2
0444
post-formats.php
6.936 KB
May 27 2024 15:29:16
1032 / wheelch2
0644
post-template.php
67.039 KB
February 04 2025 00:32:24
1032 / wheelch2
0644
post-thumbnail-template.php
10.624 KB
December 20 2024 23:35:24
1032 / wheelch2
0644
post.php
284.875 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
query.php
36.167 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
registration-functions.php
0.195 KB
November 12 2020 11:17:08
1032 / wheelch2
0644
registration.php
0.195 KB
November 12 2020 11:17:08
1032 / wheelch2
0644
rest-api.php
97.907 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
revision.php
30.021 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
rewrite.php
19.083 KB
September 18 2024 18:08:12
1032 / wheelch2
0644
robots-template.php
5.063 KB
April 06 2022 14:33:04
1032 / wheelch2
0644
rss-functions.php
0.249 KB
November 16 2020 22:52:06
1032 / wheelch2
0644
rss.php
22.571 KB
September 18 2024 20:40:12
1032 / wheelch2
0644
script-loader.php
130.139 KB
April 30 2025 18:30:12
1032 / wheelch2
0644
script-modules.php
7.531 KB
October 13 2024 17:49:16
1032 / wheelch2
0644
session.php
0.252 KB
February 06 2020 06:33:12
1032 / wheelch2
0644
shortcodes.php
23.487 KB
May 25 2024 02:04:12
1032 / wheelch2
0644
sitemaps.php
3.162 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
speculative-loading.php
8.357 KB
February 27 2025 22:14:26
1032 / wheelch2
0644
spl-autoload-compat.php
0.431 KB
November 12 2020 11:17:08
1032 / wheelch2
0644
style-engine.php
7.386 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
taxonomy.php
172.097 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
template-canvas.php
0.531 KB
September 30 2023 23:22:28
1032 / wheelch2
0644
template-loader.php
3.093 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
template.php
23.588 KB
February 21 2024 19:26:08
1032 / wheelch2
0644
theme-i18n.json
1.49 KB
January 08 2025 12:36:24
1032 / wheelch2
0644
theme-previews.php
2.766 KB
December 08 2023 06:32:24
1032 / wheelch2
0644
theme-templates.php
6.092 KB
February 17 2025 17:49:20
1032 / wheelch2
0644
theme.json
8.5 KB
June 12 2024 05:11:14
1032 / wheelch2
0644
theme.php
131.155 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
update.php
36.624 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
user.php
171.702 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
vars.php
6.408 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
version.php
1.064 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
widgets.php
69.062 KB
May 21 2025 00:30:03
1032 / wheelch2
0644
wp-db.php
0.435 KB
July 21 2022 21:45:12
1032 / wheelch2
0644
wp-diff.php
0.78 KB
January 22 2025 19:48:26
1032 / wheelch2
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025
CONTACT ME
Static GIF