You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

208 lines
4.7 KiB
PHP

<?php
/**
* The Post Class
*
* @since 0.9.0
* @package RankMath
* @subpackage RankMath\Core
* @author Rank Math <support@rankmath.com>
*
* @copyright Copyright (C) 2008-2019, Yoast BV
* The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
*/
namespace RankMath;
use WP_Post;
defined( 'ABSPATH' ) || exit;
/**
* Post class.
*/
class Post extends Metadata {
/**
* Type of object metadata is for (e.g., comment, post, or user).
*
* @var string
*/
protected $meta_type = 'post';
/**
* Retrieve Post instance.
*
* @param WP_Post|object|int $post Post to get either (int) post ID or (WP_Post|object) post.
* @return Post|false Post object, false otherwise.
*/
public static function get( $post = 0 ) {
$post = self::get_post_id( $post );
if ( false === $post ) {
return null;
}
if ( isset( self::$objects[ $post ] ) && 'post' === self::$objects[ $post ]->meta_type ) {
return self::$objects[ $post ];
}
$_post = new self( WP_Post::get_instance( $post ) );
$_post->object_id = $post;
self::$objects[ $post ] = $_post;
return $_post;
}
/**
* Get the post ID.
*
* @param integer $post Post ID.
* @return integer
*/
private static function get_post_id( $post = 0 ) {
if ( is_object( $post ) && isset( $post->ID ) ) {
return $post->ID;
}
$post = absint( $post );
if ( $post > 0 ) {
return $post;
}
if ( 0 === $post ) {
$post = get_post();
}
return ! is_null( $post ) ? $post->ID : false;
}
/**
* Get a post meta value.
*
* @param string $key Value to get, without prefix.
* @param integer $post_id ID of the post.
* @param string $default Default value to use when metadata does not exists.
* @return mixed
*/
public static function get_meta( $key, $post_id = 0, $default = '' ) {
$post = self::get( $post_id );
if ( is_null( $post ) || ! $post->is_found() || 'auto-draft' === $post->post_status ) {
return '';
}
return $post->get_metadata( $key, $default );
}
/**
* Get the ID of the current page.
*
* @return int The ID of the page.
*/
public static function get_page_id() {
/**
* Filter: Allow changing the page ID before we process anything.
*
* @param unsigned int $page_id The default page ID.
*/
$page_id = apply_filters( 'rank_math/pre_simple_page_id', false );
if ( false !== $page_id ) {
return $page_id;
}
if ( \is_singular() ) {
return get_the_ID();
}
if ( self::is_posts_page() ) {
return get_option( 'page_for_posts' );
}
if ( self::is_shop_page() ) {
return self::get_shop_page_id();
}
/**
* Filter: Allow changing the page ID.
*
* @param unsigned int $page_id The page ID.
*/
return apply_filters( 'rank_math/simple_page_id', 0 );
}
/**
* Returns the ID of the selected WooCommerce shop page.
*
* @return int The ID of the Shop page.
*/
public static function get_shop_page_id() {
static $shop_page_id;
if ( ! $shop_page_id ) {
$shop_page_id = function_exists( 'wc_get_page_id' ) ? wc_get_page_id( 'shop' ) : ( -1 );
}
return $shop_page_id;
}
/**
* Checks if the current page is a simple page.
*
* @return bool Whether the current page is a simple page.
*/
public static function is_simple_page() {
return self::get_page_id() > 0;
}
/**
* Checks if the current page is the WooCommerce "Shop" page.
*
* @return bool Whether the current page is the shop page.
*/
public static function is_shop_page() {
if ( function_exists( 'is_shop' ) && function_exists( 'wc_get_page_id' ) ) {
return \is_shop() && ! \is_search();
}
return false;
}
/**
* Checks if the current page is one of the WooCommerce pages: Cart/Account/Checkout.
*
* @return bool Whether the current page is a WooCommerce page.
*/
public static function is_woocommerce_page() {
if ( Helper::is_woocommerce_active() ) {
return \is_cart() || \is_checkout() || \is_account_page();
}
return false;
}
/**
* Check whether this is the homepage and if it shows the posts.
*
* @return bool
*/
public static function is_home_posts_page() {
return ( \is_home() && 'posts' === get_option( 'show_on_front' ) );
}
/**
* Check whether this is the static frontpage.
*
* @return bool
*/
public static function is_home_static_page() {
return ( \is_front_page() && 'page' === get_option( 'show_on_front' ) && \is_page( get_option( 'page_on_front' ) ) );
}
/**
* Check if this is the posts page and that it's not the frontpage.
*
* @return bool
*/
public static function is_posts_page() {
return ( \is_home() && 'page' === get_option( 'show_on_front' ) );
}
}