76 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * WPSEO plugin file.
 | 
						|
 *
 | 
						|
 * @package WPSEO
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * WPSEO_Custom_Fields.
 | 
						|
 */
 | 
						|
class WPSEO_Custom_Fields {
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Custom fields cache.
 | 
						|
	 *
 | 
						|
	 * @var array
 | 
						|
	 */
 | 
						|
	protected static $custom_fields = null;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Retrieves the custom field names as an array.
 | 
						|
	 *
 | 
						|
	 * @link WordPress core: wp-admin/includes/template.php. Reused query from it.
 | 
						|
	 *
 | 
						|
	 * @return array The custom fields.
 | 
						|
	 */
 | 
						|
	public static function get_custom_fields() {
 | 
						|
		global $wpdb;
 | 
						|
 | 
						|
		// Use cached value if available.
 | 
						|
		if ( ! is_null( self::$custom_fields ) ) {
 | 
						|
			return self::$custom_fields;
 | 
						|
		}
 | 
						|
 | 
						|
		self::$custom_fields = [];
 | 
						|
 | 
						|
		/**
 | 
						|
		 * Filters the number of custom fields to retrieve for the drop-down
 | 
						|
		 * in the Custom Fields meta box.
 | 
						|
		 *
 | 
						|
		 * @param int $limit Number of custom fields to retrieve. Default 30.
 | 
						|
		 */
 | 
						|
		$limit  = apply_filters( 'postmeta_form_limit', 30 );
 | 
						|
		$sql    = "SELECT DISTINCT meta_key
 | 
						|
			FROM $wpdb->postmeta
 | 
						|
			WHERE meta_key NOT BETWEEN '_' AND '_z' AND SUBSTRING(meta_key, 1, 1) != '_'
 | 
						|
			LIMIT %d";
 | 
						|
		$fields = $wpdb->get_col( $wpdb->prepare( $sql, $limit ) );
 | 
						|
 | 
						|
		/**
 | 
						|
		 * Filters the custom fields that are auto-completed and replaced as replacement variables
 | 
						|
		 * in the meta box and sidebar.
 | 
						|
		 *
 | 
						|
		 * @param string[] $fields The custom field names.
 | 
						|
		 */
 | 
						|
		$fields = apply_filters( 'wpseo_replacement_variables_custom_fields', $fields );
 | 
						|
 | 
						|
		if ( is_array( $fields ) ) {
 | 
						|
			self::$custom_fields = array_map( [ 'WPSEO_Custom_Fields', 'add_custom_field_prefix' ], $fields );
 | 
						|
		}
 | 
						|
 | 
						|
		return self::$custom_fields;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Adds the cf_ prefix to a field.
 | 
						|
	 *
 | 
						|
	 * @param string $field The field to prefix.
 | 
						|
	 *
 | 
						|
	 * @return string The prefixed field.
 | 
						|
	 */
 | 
						|
	private static function add_custom_field_prefix( $field ) {
 | 
						|
		return 'cf_' . $field;
 | 
						|
	}
 | 
						|
}
 |