HEX
Server: Apache/2.4.65 (Debian)
System: Linux 88f31f35b0b8 6.1.0-38-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.147-1 (2025-08-02) x86_64
User: www-data (33)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: /var/www/html/wp-content/plugins/wp-seopress/src/Helpers/Metas/RobotSettings.php
<?php // phpcs:ignore

namespace SEOPress\Helpers\Metas;

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * RobotSettings
 */
abstract class RobotSettings {
	/**
	 * The getRobotPrimaryCats function.
	 *
	 * @param int|null $id The ID.
	 * @param string   $post_type The post type.
	 *
	 * @return array
	 */
	protected static function getRobotPrimaryCats( $id, $post_type ) { // phpcs:ignore -- TODO: check if method is outside this class before renaming.
		$cats = get_categories();

		if ( 'product' === $post_type ) {
			$cats = get_the_terms( $id, 'product_cat' );
		}

		$cats = apply_filters( 'seopress_primary_category_list', $cats );

		$default = array(
			'term_id' => 'none',
			'name'    => __( 'None (will disable this feature)', 'wp-seopress' ),
		);

		if ( ! is_array( $cats ) ) {
			$cats = array();
		}

		array_unshift( $cats, $default );

		return $cats;
	}

	/**
	 * The getMetaKeys function.
	 *
	 * @since 5.0.0
	 *
	 * @param int|null $id The ID.
	 *
	 * @return array[]
	 *
	 *    key: string post meta
	 *    use_default: default value need to use
	 *    default: default value
	 *    label: string label
	 *    placeholder
	 */
	public static function getMetaKeys( $id = null ) { // phpcs:ignore -- TODO: check if method is outside this class before renaming.
		$title_option_service = seopress_get_service( 'TitleOption' );

		$post_type = get_post_type( $id );

		$data = apply_filters(
			'seopress_api_meta_robot_settings',
			array(
				array(
					'key'         => '_seopress_robots_index',
					'type'        => 'checkbox',
					'use_default' => $title_option_service->getSingleCptNoIndex( $id ) || $title_option_service->getTitleNoIndex() || true === post_password_required( $id ),
					'default'     => 'yes',
					'label'       => __( 'Do not display this page in search engine results / XML - HTML sitemaps (noindex)', 'wp-seopress' ),
					'visible'     => true,
				),
				array(
					'key'         => '_seopress_robots_follow',
					'type'        => 'checkbox',
					'use_default' => $title_option_service->getSingleCptNoFollow( $id ) || $title_option_service->getTitleNoFollow(),
					'default'     => 'yes',
					'label'       => __( 'Do not follow links for this page (nofollow)', 'wp-seopress' ),
					'visible'     => true,
				),
				array(
					'key'         => '_seopress_robots_snippet',
					'type'        => 'checkbox',
					'use_default' => $title_option_service->getTitleNoSnippet(),
					'default'     => 'yes',
					'label'       => __( 'Do not display a description in search results for this page (nosnippet)', 'wp-seopress' ),
					'visible'     => true,
				),
				array(
					'key'         => '_seopress_robots_imageindex',
					'type'        => 'checkbox',
					'use_default' => $title_option_service->getTitleNoImageIndex(),
					'default'     => 'yes',
					'label'       => __( 'Do not index images for this page (noimageindex)', 'wp-seopress' ),
					'visible'     => true,
				),
				array(
					'key'         => '_seopress_robots_canonical',
					'type'        => 'input',
					'use_default' => '',
					'placeholder' => sprintf( '%s %s', __( 'Default value: ', 'wp-seopress' ), urldecode( get_permalink( $id ) ) ),
					'default'     => '',
					'label'       => __( 'Canonical URL', 'wp-seopress' ),
					'visible'     => true,
				),
				array(
					'key'         => '_seopress_robots_primary_cat',
					'type'        => 'select',
					'use_default' => '',
					'placeholder' => '',
					'default'     => '',
					'label'       => __( 'Select a primary category', 'wp-seopress' ),
					'description' => /* translators: category permalink structure */ wp_kses_post( sprintf( __( 'Set thee category that gets used in the %s permalink and in our breadcrumbs if you have multiple categories.', 'wp-seopress' ), '<code>%category%</code>' ) ),
					'options'     => self::getRobotPrimaryCats( $id, $post_type ),
					'visible'     => ( 'post' === $post_type || 'product' === $post_type ),
				),
				array(
					'key'         => '_seopress_robots_freeze_modified_date',
					'type'        => 'checkbox',
					'use_default' => '1' === seopress_get_service( 'AdvancedOption' )->getAppearanceFreezeModifiedDate(),
					'default'     => 'yes',
					'label'       => __( 'Freeze the last modified date (recommended for minor updates)', 'wp-seopress' ),
					'description' => __( 'Prevent the last modified date from being updated on save. Recommended for minor updates like typos or formatting.', 'wp-seopress' ),
					'visible'     => true,
				),
				array(
					'key'         => '_seopress_robots_custom_modified_date',
					'type'        => 'input',
					'use_default' => '',
					'placeholder' => 'YYYY-MM-DD',
					'default'     => '',
					'label'       => __( 'Set a custom last modified date', 'wp-seopress' ),
					'description' => __( 'Override the last modified date with a custom value. Leave empty to use the current post modified date.', 'wp-seopress' ),
					'visible'     => true,
				),
			),
			$id
		);

		return $data;
	}
}