Sync plugins from current page
Signed-off-by: Adrian Nöthlich <git@promasu.tech>
This commit is contained in:
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,501 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* acf_get_taxonomies
|
||||
*
|
||||
* Returns an array of taxonomy names.
|
||||
*
|
||||
* @date 7/10/13
|
||||
* @since 5.0.0
|
||||
*
|
||||
* @param array $args An array of args used in the get_taxonomies() function.
|
||||
* @return array An array of taxonomy names.
|
||||
*/
|
||||
|
||||
function acf_get_taxonomies( $args = array() ) {
|
||||
|
||||
// vars
|
||||
$taxonomies = array();
|
||||
|
||||
// get taxonomy objects
|
||||
$objects = get_taxonomies( $args, 'objects' );
|
||||
|
||||
// loop
|
||||
foreach( $objects as $i => $object ) {
|
||||
|
||||
// bail early if is builtin (WP) private post type
|
||||
// - nav_menu_item, revision, customize_changeset, etc
|
||||
if( $object->_builtin && !$object->public ) continue;
|
||||
|
||||
// append
|
||||
$taxonomies[] = $i;
|
||||
}
|
||||
|
||||
// custom post_type arg which does not yet exist in core
|
||||
if( isset($args['post_type']) ) {
|
||||
$taxonomies = acf_get_taxonomies_for_post_type($args['post_type']);
|
||||
}
|
||||
|
||||
// filter
|
||||
$taxonomies = apply_filters('acf/get_taxonomies', $taxonomies, $args);
|
||||
|
||||
// return
|
||||
return $taxonomies;
|
||||
}
|
||||
|
||||
/**
|
||||
* acf_get_taxonomies_for_post_type
|
||||
*
|
||||
* Returns an array of taxonomies for a given post type(s)
|
||||
*
|
||||
* @date 7/9/18
|
||||
* @since 5.7.5
|
||||
*
|
||||
* @param string|array $post_types The post types to compare against.
|
||||
* @return array
|
||||
*/
|
||||
function acf_get_taxonomies_for_post_type( $post_types = 'post' ) {
|
||||
|
||||
// vars
|
||||
$taxonomies = array();
|
||||
|
||||
// loop
|
||||
foreach( (array) $post_types as $post_type ) {
|
||||
$object_taxonomies = get_object_taxonomies( $post_type );
|
||||
foreach( (array) $object_taxonomies as $taxonomy ) {
|
||||
$taxonomies[] = $taxonomy;
|
||||
}
|
||||
}
|
||||
|
||||
// remove duplicates
|
||||
$taxonomies = array_unique($taxonomies);
|
||||
|
||||
// return
|
||||
return $taxonomies;
|
||||
}
|
||||
|
||||
/*
|
||||
* acf_get_taxonomy_labels
|
||||
*
|
||||
* Returns an array of taxonomies in the format "name => label" for use in a select field.
|
||||
*
|
||||
* @date 3/8/18
|
||||
* @since 5.7.2
|
||||
*
|
||||
* @param array $taxonomies Optional. An array of specific taxonomies to return.
|
||||
* @return array
|
||||
*/
|
||||
|
||||
function acf_get_taxonomy_labels( $taxonomies = array() ) {
|
||||
|
||||
// default
|
||||
if( empty($taxonomies) ) {
|
||||
$taxonomies = acf_get_taxonomies();
|
||||
}
|
||||
|
||||
// vars
|
||||
$ref = array();
|
||||
$data = array();
|
||||
|
||||
// loop
|
||||
foreach( $taxonomies as $taxonomy ) {
|
||||
|
||||
// vars
|
||||
$object = get_taxonomy( $taxonomy );
|
||||
$label = $object->labels->singular_name;
|
||||
|
||||
// append
|
||||
$data[ $taxonomy ] = $label;
|
||||
|
||||
// increase counter
|
||||
if( !isset($ref[ $label ]) ) {
|
||||
$ref[ $label ] = 0;
|
||||
}
|
||||
$ref[ $label ]++;
|
||||
}
|
||||
|
||||
// show taxonomy name next to label for shared labels
|
||||
foreach( $data as $taxonomy => $label ) {
|
||||
if( $ref[$label] > 1 ) {
|
||||
$data[ $taxonomy ] .= ' (' . $taxonomy . ')';
|
||||
}
|
||||
}
|
||||
|
||||
// return
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* acf_get_term_title
|
||||
*
|
||||
* Returns the title for this term object.
|
||||
*
|
||||
* @date 10/9/18
|
||||
* @since 5.0.0
|
||||
*
|
||||
* @param object $term The WP_Term object.
|
||||
* @return string
|
||||
*/
|
||||
|
||||
function acf_get_term_title( $term ) {
|
||||
|
||||
// set to term name
|
||||
$title = $term->name;
|
||||
|
||||
// allow for empty name
|
||||
if( $title === '' ) {
|
||||
$title = __('(no title)', 'acf');
|
||||
}
|
||||
|
||||
// prepent ancestors indentation
|
||||
if( is_taxonomy_hierarchical($term->taxonomy) ) {
|
||||
$ancestors = get_ancestors( $term->term_id, $term->taxonomy );
|
||||
$title = str_repeat('- ', count($ancestors)) . $title;
|
||||
}
|
||||
|
||||
// return
|
||||
return $title;
|
||||
}
|
||||
|
||||
/**
|
||||
* acf_get_grouped_terms
|
||||
*
|
||||
* Returns an array of terms for the given query $args and groups by taxonomy name.
|
||||
*
|
||||
* @date 2/8/18
|
||||
* @since 5.7.2
|
||||
*
|
||||
* @param array $args An array of args used in the get_terms() function.
|
||||
* @return array
|
||||
*/
|
||||
|
||||
function acf_get_grouped_terms( $args ) {
|
||||
|
||||
// vars
|
||||
$data = array();
|
||||
|
||||
// defaults
|
||||
$args = wp_parse_args($args, array(
|
||||
'taxonomy' => null,
|
||||
'hide_empty' => false,
|
||||
'update_term_meta_cache' => false,
|
||||
));
|
||||
|
||||
// vars
|
||||
$taxonomies = acf_get_taxonomy_labels( acf_get_array($args['taxonomy']) );
|
||||
$is_single = (count($taxonomies) == 1);
|
||||
|
||||
// specify exact taxonomies required for _acf_terms_clauses() to work.
|
||||
$args['taxonomy'] = array_keys($taxonomies);
|
||||
|
||||
// add filter to group results by taxonomy
|
||||
if( !$is_single ) {
|
||||
add_filter('terms_clauses', '_acf_terms_clauses', 10, 3);
|
||||
}
|
||||
|
||||
// get terms
|
||||
$terms = get_terms( $args );
|
||||
|
||||
// remove this filter (only once)
|
||||
if( !$is_single ) {
|
||||
remove_filter('terms_clauses', '_acf_terms_clauses', 10, 3);
|
||||
}
|
||||
|
||||
// loop
|
||||
foreach( $taxonomies as $taxonomy => $label ) {
|
||||
|
||||
// vars
|
||||
$this_terms = array();
|
||||
|
||||
// populate $this_terms
|
||||
foreach( $terms as $term ) {
|
||||
if( $term->taxonomy == $taxonomy ) {
|
||||
$this_terms[] = $term;
|
||||
}
|
||||
}
|
||||
|
||||
// bail early if no $items
|
||||
if( empty($this_terms) ) continue;
|
||||
|
||||
// sort into hierachial order
|
||||
// this will fail if a search has taken place because parents wont exist
|
||||
if( is_taxonomy_hierarchical($taxonomy) && empty($args['s'])) {
|
||||
|
||||
// get all terms from this taxonomy
|
||||
$all_terms = get_terms(array_merge($args, array(
|
||||
'number' => 0,
|
||||
'offset' => 0,
|
||||
'taxonomy' => $taxonomy
|
||||
)));
|
||||
|
||||
// vars
|
||||
$length = count($this_terms);
|
||||
$offset = 0;
|
||||
|
||||
// find starting point (offset)
|
||||
foreach( $all_terms as $i => $term ) {
|
||||
if( $term->term_id == $this_terms[0]->term_id ) {
|
||||
$offset = $i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// order terms
|
||||
$parent = acf_maybe_get( $args, 'parent', 0 );
|
||||
$parent = acf_maybe_get( $args, 'child_of', $parent );
|
||||
$ordered_terms = _get_term_children( $parent, $all_terms, $taxonomy );
|
||||
|
||||
// compare aray lengths
|
||||
// if $ordered_posts is smaller than $all_posts, WP has lost posts during the get_page_children() function
|
||||
// this is possible when get_post( $args ) filter out parents (via taxonomy, meta and other search parameters)
|
||||
if( count($ordered_terms) == count($all_terms) ) {
|
||||
$this_terms = array_slice($ordered_terms, $offset, $length);
|
||||
}
|
||||
}
|
||||
|
||||
// populate group
|
||||
$data[ $label ] = array();
|
||||
foreach( $this_terms as $term ) {
|
||||
$data[ $label ][ $term->term_id ] = $term;
|
||||
}
|
||||
}
|
||||
|
||||
// return
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* _acf_terms_clauses
|
||||
*
|
||||
* Used in the 'terms_clauses' filter to order terms by taxonomy name.
|
||||
*
|
||||
* @date 2/8/18
|
||||
* @since 5.7.2
|
||||
*
|
||||
* @param array $pieces Terms query SQL clauses.
|
||||
* @param array $taxonomies An array of taxonomies.
|
||||
* @param array $args An array of terms query arguments.
|
||||
* @return array $pieces
|
||||
*/
|
||||
|
||||
function _acf_terms_clauses( $pieces, $taxonomies, $args ) {
|
||||
|
||||
// prepend taxonomy to 'orderby' SQL
|
||||
if( is_array($taxonomies) ) {
|
||||
$sql = "FIELD(tt.taxonomy,'" . implode("', '", array_map('esc_sql', $taxonomies)) . "')";
|
||||
$pieces['orderby'] = str_replace("ORDER BY", "ORDER BY $sql,", $pieces['orderby']);
|
||||
}
|
||||
|
||||
// return
|
||||
return $pieces;
|
||||
}
|
||||
|
||||
/**
|
||||
* acf_get_pretty_taxonomies
|
||||
*
|
||||
* Deprecated in favor of acf_get_taxonomy_labels() function.
|
||||
*
|
||||
* @date 7/10/13
|
||||
* @since 5.0.0
|
||||
* @deprecated 5.7.2
|
||||
*/
|
||||
|
||||
function acf_get_pretty_taxonomies( $taxonomies = array() ) {
|
||||
return acf_get_taxonomy_labels( $taxonomies );
|
||||
}
|
||||
|
||||
/**
|
||||
* acf_get_term
|
||||
*
|
||||
* Similar to get_term() but with some extra functionality.
|
||||
*
|
||||
* @date 19/8/18
|
||||
* @since 5.7.3
|
||||
*
|
||||
* @param mixed $term_id The term ID or a string of "taxonomy:slug".
|
||||
* @param string $taxonomy The taxonomyname.
|
||||
* @return WP_Term
|
||||
*/
|
||||
|
||||
function acf_get_term( $term_id, $taxonomy = '' ) {
|
||||
|
||||
// allow $term_id parameter to be a string of "taxonomy:slug" or "taxonomy:id"
|
||||
if( is_string($term_id) && strpos($term_id, ':') ) {
|
||||
list( $taxonomy, $term_id ) = explode(':', $term_id);
|
||||
$term = get_term_by( 'slug', $term_id, $taxonomy );
|
||||
if( $term ) return $term;
|
||||
}
|
||||
|
||||
// return
|
||||
return get_term( $term_id, $taxonomy );
|
||||
}
|
||||
|
||||
/**
|
||||
* acf_encode_term
|
||||
*
|
||||
* Returns a "taxonomy:slug" string for a given WP_Term.
|
||||
*
|
||||
* @date 27/8/18
|
||||
* @since 5.7.4
|
||||
*
|
||||
* @param WP_Term $term The term object.
|
||||
* @return string
|
||||
*/
|
||||
function acf_encode_term( $term ) {
|
||||
return "{$term->taxonomy}:{$term->slug}";
|
||||
}
|
||||
|
||||
/**
|
||||
* acf_decode_term
|
||||
*
|
||||
* Decodes a "taxonomy:slug" string into an array of taxonomy and slug.
|
||||
*
|
||||
* @date 27/8/18
|
||||
* @since 5.7.4
|
||||
*
|
||||
* @param WP_Term $term The term object.
|
||||
* @return string
|
||||
*/
|
||||
function acf_decode_term( $string ) {
|
||||
if( is_string($string) && strpos($string, ':') ) {
|
||||
list( $taxonomy, $slug ) = explode(':', $string);
|
||||
return array(
|
||||
'taxonomy' => $taxonomy,
|
||||
'slug' => $slug
|
||||
);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* acf_get_encoded_terms
|
||||
*
|
||||
* Returns an array of WP_Term objects from an array of encoded strings
|
||||
*
|
||||
* @date 9/9/18
|
||||
* @since 5.7.5
|
||||
*
|
||||
* @param array $values The array of encoded strings.
|
||||
* @return array
|
||||
*/
|
||||
function acf_get_encoded_terms( $values ) {
|
||||
|
||||
// vars
|
||||
$terms = array();
|
||||
|
||||
// loop over values
|
||||
foreach( (array) $values as $value ) {
|
||||
|
||||
// find term from string
|
||||
$term = acf_get_term( $value );
|
||||
|
||||
// append
|
||||
if( $term instanceof WP_Term ) {
|
||||
$terms[] = $term;
|
||||
}
|
||||
}
|
||||
|
||||
// return
|
||||
return $terms;
|
||||
}
|
||||
|
||||
/**
|
||||
* acf_get_choices_from_terms
|
||||
*
|
||||
* Returns an array of choices from the terms provided.
|
||||
*
|
||||
* @date 8/9/18
|
||||
* @since 5.7.5
|
||||
*
|
||||
* @param array $values and array of WP_Terms objects or encoded strings.
|
||||
* @param string $format The value format (term_id, slug).
|
||||
* @return array
|
||||
*/
|
||||
function acf_get_choices_from_terms( $terms, $format = 'term_id' ) {
|
||||
|
||||
// vars
|
||||
$groups = array();
|
||||
|
||||
// get taxonomy lables
|
||||
$labels = acf_get_taxonomy_labels();
|
||||
|
||||
// convert array of encoded strings to terms
|
||||
$term = reset($terms);
|
||||
if( !$term instanceof WP_Term ) {
|
||||
$terms = acf_get_encoded_terms( $terms );
|
||||
}
|
||||
|
||||
// loop over terms
|
||||
foreach( $terms as $term ) {
|
||||
$group = $labels[ $term->taxonomy ];
|
||||
$choice = acf_get_choice_from_term( $term, $format );
|
||||
$groups[ $group ][ $choice['id'] ] = $choice['text'];
|
||||
}
|
||||
|
||||
// return
|
||||
return $groups;
|
||||
}
|
||||
|
||||
/**
|
||||
* acf_get_choices_from_grouped_terms
|
||||
*
|
||||
* Returns an array of choices from the grouped terms provided.
|
||||
*
|
||||
* @date 8/9/18
|
||||
* @since 5.7.5
|
||||
*
|
||||
* @param array $value A grouped array of WP_Terms objects.
|
||||
* @param string $format The value format (term_id, slug).
|
||||
* @return array
|
||||
*/
|
||||
function acf_get_choices_from_grouped_terms( $value, $format = 'term_id' ) {
|
||||
|
||||
// vars
|
||||
$groups = array();
|
||||
|
||||
// loop over values
|
||||
foreach( $value as $group => $terms ) {
|
||||
$groups[ $group ] = array();
|
||||
foreach( $terms as $term_id => $term ) {
|
||||
$choice = acf_get_choice_from_term( $term, $format );
|
||||
$groups[ $group ][ $choice['id'] ] = $choice['text'];
|
||||
}
|
||||
}
|
||||
|
||||
// return
|
||||
return $groups;
|
||||
}
|
||||
|
||||
/**
|
||||
* acf_get_choice_from_term
|
||||
*
|
||||
* Returns an array containing the id and text for this item.
|
||||
*
|
||||
* @date 10/9/18
|
||||
* @since 5.7.6
|
||||
*
|
||||
* @param object $item The item object such as WP_Post or WP_Term.
|
||||
* @param string $format The value format (term_id, slug)
|
||||
* @return array
|
||||
*/
|
||||
function acf_get_choice_from_term( $term, $format = 'term_id' ) {
|
||||
|
||||
// vars
|
||||
$id = $term->term_id;
|
||||
$text = acf_get_term_title( $term );
|
||||
|
||||
// return format
|
||||
if( $format == 'slug' ) {
|
||||
$id = acf_encode_term($term);
|
||||
}
|
||||
|
||||
// return
|
||||
return array(
|
||||
'id' => $id,
|
||||
'text' => $text
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user