From 53bb53191b4e689266ec839bd02a7a3cc009153f Mon Sep 17 00:00:00 2001 From: Jordan Doyle Date: Tue, 11 Oct 2016 23:52:53 +0100 Subject: [PATCH] ACF formatted fields --- src/Exceptions/UnsatisfiedDependencyException.php | 15 +++++++++++++++ src/Models/Meta.php | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 71 insertions(+), 4 deletions(-) diff --git a/src/Exceptions/UnsatisfiedDependencyException.php b/src/Exceptions/UnsatisfiedDependencyException.php new file mode 100644 index 0000000..fa4b67c 100644 --- /dev/null +++ a/src/Exceptions/UnsatisfiedDependencyException.php @@ -1,0 +1,15 @@ + + */ +class UnsatisfiedDependencyException extends RuntimeException +{ + // +} diff --git a/src/Models/Meta.php b/src/Models/Meta.php index 03c6973..e11de6b 100644 --- a/src/Models/Meta.php +++ a/src/Models/Meta.php @@ -1,8 +1,10 @@ get(); + static::$cache[$page] = static::where('post_id', $page)->get(); } if ($name === null) { - return self::$cache[$page]->mapWithKeys(function ($item) { + return static::$cache[$page]->mapWithKeys(function ($item) { return [$item->meta_key => $item->meta_value]; })->all(); } - $value = self::$cache[$page]->where('meta_key', $name)->first(); + $value = static::$cache[$page]->where('meta_key', $name)->first(); return empty($value) ? null : $value->meta_value; + } + + /** + * Grab an ACF field from the database. + * + * @see Meta::get() + * @param int|string|null $page page to get meta for (or name of the meta item to get + * if you want to get the current page's meta) + * @param string|null $name + * @param bool $format whether to format this field or not + * @return mixed + * @throws UnsatisfiedDependencyException + */ + public static function field($page = null, $name = null, $format = true) + { + if (!ctype_digit((string) $page) && $name === null) { + $name = $page; + $page = null; + } + + if ($page === null) { + $page = Wordpress::id(); + } + + if (!function_exists('acf_format_value')) { + throw new UnsatisfiedDependencyException('Advanced Custom Fields must be installed to use field'); + } + + $value = static::get($page, $name); + + if (is_serialized($value)) + $value = @unserialize($value); + + $field = static::get($page, '_' . $name); + + if (!acf_is_field_key($field)) { + return null; + } + + $field = get_field_object($field, $name, false, false); + $value = Action::filter('acf/load_value', $value, $page, $field); + $value = Action::filter('acf/load_value/type=' . $field['type'], $value, $page, $field); + $value = Action::filter('acf/load_value/name=' . $field['_name'], $value, $page, $field); + $value = Action::filter('acf/load_value/key=' . $field['key'], $value, $page, $field); + + if ($format) { + $value = acf_format_value($value, $page, $field); + } + + return $value; } /** -- rgit 0.1.5