-
-
Save peterwilsoncc/aaa5940052d6ce19bb7a80b2c287e98d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Plugin Name: 58116 - Taxo Filters | |
*/ | |
namespace PWCC\NopeNotProduction\WP58116\TaxoTest; | |
// return; | |
add_action( 'init', __NAMESPACE__ . '\\register_objects' ); | |
function register_objects() { | |
$labels = array( | |
'name' => _x( '58116 CPTs', 'Post Type General Name', 'text_domain' ), | |
'singular_name' => _x( '58116', 'Post Type Singular Name', 'text_domain' ), | |
'menu_name' => __( '58116 Types', 'text_domain' ), | |
'name_admin_bar' => __( '58116 Type', 'text_domain' ), | |
'archives' => __( 'Item Archives', 'text_domain' ), | |
'attributes' => __( 'Item Attributes', 'text_domain' ), | |
'parent_item_colon' => __( 'Parent Item:', 'text_domain' ), | |
'all_items' => __( 'All Items', 'text_domain' ), | |
'add_new_item' => __( 'Add New Item', 'text_domain' ), | |
'add_new' => __( 'Add New', 'text_domain' ), | |
'new_item' => __( 'New Item', 'text_domain' ), | |
'edit_item' => __( 'Edit Item', 'text_domain' ), | |
'update_item' => __( 'Update Item', 'text_domain' ), | |
'view_item' => __( 'View Item', 'text_domain' ), | |
'view_items' => __( 'View Items', 'text_domain' ), | |
'search_items' => __( 'Search Item', 'text_domain' ), | |
'not_found' => __( 'Not found', 'text_domain' ), | |
'not_found_in_trash' => __( 'Not found in Trash', 'text_domain' ), | |
'featured_image' => __( 'Featured Image', 'text_domain' ), | |
'set_featured_image' => __( 'Set featured image', 'text_domain' ), | |
'remove_featured_image' => __( 'Remove featured image', 'text_domain' ), | |
'use_featured_image' => __( 'Use as featured image', 'text_domain' ), | |
'insert_into_item' => __( 'Insert into item', 'text_domain' ), | |
'uploaded_to_this_item' => __( 'Uploaded to this item', 'text_domain' ), | |
'items_list' => __( 'Items list', 'text_domain' ), | |
'items_list_navigation' => __( 'Items list navigation', 'text_domain' ), | |
'filter_items_list' => __( 'Filter items list', 'text_domain' ), | |
); | |
$args = array( | |
'label' => __( '58116', 'text_domain' ), | |
'description' => __( 'Post Type Description', 'text_domain' ), | |
'labels' => $labels, | |
'supports' => array( 'title', 'editor' ), | |
'hierarchical' => false, | |
'public' => true, | |
'show_ui' => true, | |
'show_in_menu' => true, | |
'menu_position' => 5, | |
'show_in_admin_bar' => true, | |
'show_in_nav_menus' => true, | |
'can_export' => true, | |
'has_archive' => true, | |
'exclude_from_search' => false, | |
'publicly_queryable' => true, | |
'capability_type' => 'page', | |
); | |
register_post_type( '58116_post', $args ); | |
$labels = array( | |
'name' => _x( '58116 Terms', 'Taxonomy General Name', 'text_domain' ), | |
'singular_name' => _x( '58116 Term', 'Taxonomy Singular Name', 'text_domain' ), | |
'menu_name' => __( '58116 Taxo', 'text_domain' ), | |
'all_items' => __( 'All Terms', 'text_domain' ), | |
'parent_item' => __( 'Parent Term', 'text_domain' ), | |
'parent_item_colon' => __( 'Parent Term:', 'text_domain' ), | |
'new_item_name' => __( 'New Term Name', 'text_domain' ), | |
'add_new_item' => __( 'Add New Term', 'text_domain' ), | |
'edit_item' => __( 'Edit Term', 'text_domain' ), | |
'update_item' => __( 'Update Term', 'text_domain' ), | |
'view_item' => __( 'View Term', 'text_domain' ), | |
'separate_items_with_commas' => __( 'Separate terms with commas', 'text_domain' ), | |
'add_or_remove_items' => __( 'Add or remove terms', 'text_domain' ), | |
'choose_from_most_used' => __( 'Choose from the most used', 'text_domain' ), | |
'popular_items' => __( 'Popular Terms', 'text_domain' ), | |
'search_items' => __( 'Search Terms', 'text_domain' ), | |
'not_found' => __( 'Not Found', 'text_domain' ), | |
'no_terms' => __( 'No terms', 'text_domain' ), | |
'items_list' => __( 'Terms list', 'text_domain' ), | |
'items_list_navigation' => __( 'Terms list navigation', 'text_domain' ), | |
); | |
$args = array( | |
'labels' => $labels, | |
'hierarchical' => false, | |
'public' => true, | |
'show_ui' => true, | |
'show_admin_column' => true, | |
'show_in_nav_menus' => true, | |
'show_tagcloud' => true, | |
'show_in_rest' => true, | |
); | |
register_taxonomy( '58116_taxo', array( 'post', '58116_post' ), $args ); | |
} | |
function my_rest_some_taxonomy_query( $params ) { | |
$params['post_type'] = 'post'; | |
$params['post_status'] = 'publish'; | |
return $params; | |
} | |
add_filter( 'rest_58116_taxo_query', __NAMESPACE__ . '\\my_rest_some_taxonomy_query' ); | |
function terms_clauses( $clauses, $taxos, $args ) { | |
global $wpdb; | |
// Set to query specific posts types if set. | |
if ( ! empty( $args[ 'post_type' ] ) ) { | |
$post_types = array( $args['post_type'] ); | |
$clauses['fields'] = 'DISTINCT ' . str_replace( 'tt.*', 'tt.term_taxonomy_id, tt.taxonomy, tt.description, tt.parent', $clauses['fields'] ) . ', COUNT(p.post_type) AS count'; | |
$clauses['join'] .= ' LEFT JOIN ' . $wpdb->term_relationships . ' AS r ON r.term_taxonomy_id = tt.term_taxonomy_id LEFT JOIN ' . $wpdb->posts . ' AS p ON p.ID = r.object_id'; | |
$clauses['where'] .= ' AND (p.post_type IN (\'' . implode( '\',\'', $post_types ) . '\') OR p.post_type IS NULL)'; | |
$clauses['orderby'] = 'GROUP BY t.term_id ' . $clauses['orderby']; | |
} | |
// Set to query posts with specific status. | |
if ( ! empty( $args[ 'post_status' ] ) ) { | |
$post_status = array( $args['post_status'] ); | |
$clauses['where'] .= ' AND (p.post_status IN (\'' . implode( '\',\'', $post_status ) . '\'))'; | |
} | |
return $clauses; | |
} | |
add_filter( 'terms_clauses', __NAMESPACE__ . '\\terms_clauses', 10, 3 ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment