Skip to content

Instantly share code, notes, and snippets.

@peterwilsoncc
Created April 17, 2023 02:38
Show Gist options
  • Save peterwilsoncc/aaa5940052d6ce19bb7a80b2c287e98d to your computer and use it in GitHub Desktop.
Save peterwilsoncc/aaa5940052d6ce19bb7a80b2c287e98d to your computer and use it in GitHub Desktop.
<?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