{"id":304808,"date":"2026-05-15T02:03:45","date_gmt":"2026-05-15T02:03:45","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/maya-team-directory\/"},"modified":"2026-05-15T02:29:22","modified_gmt":"2026-05-15T02:29:22","slug":"maya-team-directory","status":"publish","type":"plugin","link":"https:\/\/test.wordpress.org\/plugins\/maya-team-directory\/","author":23487279,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.2","stable_tag":"1.0.2","tested":"6.9.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Maya Team Directory","header_author":"Abraham Yalip","header_description":"Beautiful team \/ staff directory with custom post type, group taxonomy, social links, a responsive grid layout, and single-member templates. Optional companion add-ons available separately.","assets_banners_color":"","last_updated":"2026-05-15 02:29:22","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/mayanaikotech.com\/maya-team-directory","header_author_uri":"https:\/\/mayanaikotech.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":27,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.2":{"tag":"1.0.2","author":"ayalip","date":"2026-05-15 02:29:22"}},"upgrade_notice":{"1.0.2":"<p>Plugin Check clean. Fixes two output-escaping errors in the shortcode and renames template variables to use the <code>$maya_<\/code> prefix. No data, settings, or feature changes.<\/p>","1.0.1":"<p>Security and code-quality hardening based on WordPress.org review feedback. No data, settings, or feature changes.<\/p>","1.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.2"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Frontend grid layout with search and filter","2":"Single member profile page","3":"Admin member editor","4":"Settings page"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[2466,1919,435,11420,3491],"plugin_category":[43,58],"plugin_contributors":[262997],"plugin_business_model":[],"class_list":["post-304808","plugin","type-plugin","status-publish","hentry","plugin_tags-directory","plugin_tags-members","plugin_tags-profile","plugin_tags-staff","plugin_tags-team","plugin_category-customization","plugin_category-user-management","plugin_contributors-ayalip","plugin_committers-ayalip"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/maya-team-directory.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Maya Team Directory lets you create and display a clean, fast team directory on your WordPress site. Add team members with profile photos, positions, departments, contact details, and bios, then display them with a simple <code>[maya_team]<\/code> shortcode.<\/p>\n\n<p>The free plugin is intentionally lean and focused. It ships with everything you need to publish a working team page: the custom post type, group taxonomy, a responsive grid layout, search, group filtering, pagination, and a single-member template.<\/p>\n\n<p>This plugin makes no remote calls, has no license key, no in-plugin upsell prompts, and never asks for your credit card to unlock built-in features.<\/p>\n\n<p>Optional companion add-ons (CSV import\/export, REST API endpoints, extra layouts, sidebar widget, custom CSS, accent color picker, social-network fields and icons \u2014 LinkedIn, X, Facebook, Instagram, GitHub, YouTube \u2014 featured-member highlighting, per-group layout overrides, and more) are available separately at https:\/\/mayanaikotech.com\/maya-team-directory\/. They install as their own plugin and are 100% optional \u2014 this plugin works fully without them.<\/p>\n\n<h4>What's Included (Free)<\/h4>\n\n<ul>\n<li>Custom post type for team members<\/li>\n<li>Group taxonomy for organizing members<\/li>\n<li>Custom fields: Position, Department, Email, Phone, Website<\/li>\n<li>Responsive grid layout<\/li>\n<li>Search bar and group filter<\/li>\n<li>Pagination<\/li>\n<li>Single-member profile template<\/li>\n<li>Mobile responsive<\/li>\n<li>Admin photo thumbnails and sortable columns<\/li>\n<li>Translation-ready (.pot file included)<\/li>\n<li>A documented hook &amp; filter API for add-ons (see below)<\/li>\n<\/ul>\n\n<h4>Shortcode Usage<\/h4>\n\n<p>Display all team members:\n    [maya_team]<\/p>\n\n<p>Filter by group:\n    [maya_team group=\"management\"]<\/p>\n\n<p>Show multiple groups:\n    [maya_team groups=\"management,board\"]<\/p>\n\n<p>Hide members in a specific group:\n    [maya_team exclude_groups=\"alumni\"]<\/p>\n\n<p>Custom pagination and ordering:\n    [maya_team per_page=\"8\" orderby=\"title\" order=\"ASC\"]<\/p>\n\n<p>Hide controls:\n    [maya_team search=\"false\" filter=\"false\"]<\/p>\n\n<p>Force grid column count (1\u20136):\n    [maya_team columns=\"4\"]<\/p>\n\n<h4>Template Overrides<\/h4>\n\n<p>Copy templates from <code>maya-team-directory\/templates\/<\/code> to your theme:<\/p>\n\n<ul>\n<li><code>your-theme\/maya-team-directory\/single-maya_member.php<\/code><\/li>\n<li><code>your-theme\/maya-team-directory\/archive-maya_member.php<\/code><\/li>\n<li><code>your-theme\/maya-team-directory\/taxonomy-maya_group.php<\/code><\/li>\n<\/ul>\n\n<h4>Hooks &amp; Filters<\/h4>\n\n<p>These hooks form the public API that companion add-ons (and any third-party plugin) can use to extend the free plugin without modifying its files.<\/p>\n\n<p>Filters:<\/p>\n\n<ul>\n<li><code>maya_td_query_args<\/code> \u2014 Modify the main member query (receives <code>$query_args<\/code>, <code>$atts<\/code>).<\/li>\n<li><code>maya_td_card_data<\/code> \u2014 Modify card template data before rendering (receives <code>$data<\/code>, <code>$post_id<\/code>).<\/li>\n<li><code>maya_td_card_renderer<\/code> \u2014 Return a callable to take over rendering for a non-grid layout (receives <code>null<\/code>, <code>$layout<\/code>, <code>$data<\/code>, <code>$post_id<\/code>).<\/li>\n<li><code>maya_td_card_social_keys<\/code> \u2014 Add extra social networks to read for each card (receives <code>network-slug =&gt; meta-key<\/code> map).<\/li>\n<li><code>maya_td_meta_fields<\/code> \u2014 Add extra fields to the Member Details meta box.<\/li>\n<li><code>maya_td_social_fields<\/code> \u2014 Add extra fields to the Social Links meta box.<\/li>\n<li><code>maya_td_social_icons<\/code> \u2014 Provide SVG icon markup for additional social networks.<\/li>\n<li><code>maya_td_member_meta_keys<\/code> \u2014 Extend the list of meta keys cleaned up on uninstall.<\/li>\n<li><code>maya_td_available_layouts<\/code> \u2014 Register additional layouts (list, compact, masonry, etc.) so they appear in the layout toggle and validate as shortcode <code>layout=\"\"<\/code> values.<\/li>\n<li><code>maya_td_layout_icon<\/code> \u2014 Provide the SVG icon for a registered layout's toggle button.<\/li>\n<li><code>maya_td_single_member_template<\/code> \u2014 Override the path of the single-member template file.<\/li>\n<li><code>maya_td_sanitize_settings<\/code> \u2014 Sanitize and persist add-on-registered settings fields.<\/li>\n<li><code>maya_td_resource_links<\/code> \u2014 Add, remove, or reorder links in the Settings page Resources sidebar.<\/li>\n<\/ul>\n\n<p>Actions:<\/p>\n\n<ul>\n<li><code>maya_td_init<\/code> \u2014 Fires after the free plugin's core classes are instantiated. Add-ons should bootstrap from here.<\/li>\n<li><code>maya_td_register_admin_menu<\/code> \u2014 Fires after the Settings submenu is registered, so add-ons can add their own submenus under the Maya Team Directory menu.<\/li>\n<li><code>maya_td_settings_sections<\/code> \u2014 Render extra <code>&lt;div class=\"maya-settings-section\"&gt;<\/code> blocks inside the settings form.<\/li>\n<li><code>maya_td_settings_sidebar<\/code> \u2014 Render extra panels in the settings sidebar.<\/li>\n<li><code>maya_td_before_directory<\/code> \u2014 Fires before the directory wrapper opens (receives <code>$atts<\/code>, <code>$members<\/code> WP_Query).<\/li>\n<li><code>maya_td_after_directory<\/code> \u2014 Fires after the directory wrapper closes (receives <code>$atts<\/code>, <code>$members<\/code> WP_Query).<\/li>\n<li><code>maya_td_after_card_content<\/code> \u2014 Add content inside each card, after the bio (receives <code>$data<\/code>, <code>$post_id<\/code>).<\/li>\n<li><code>maya_td_after_member_details_fields<\/code> \u2014 Add inputs inside the Member Details meta box.<\/li>\n<li><code>maya_td_after_social_fields<\/code> \u2014 Add inputs inside the Social Links meta box.<\/li>\n<li><code>maya_td_display_options_fields<\/code> \u2014 Add inputs inside the Display Options side meta box.<\/li>\n<li><code>maya_td_save_member_meta<\/code> \u2014 Persist add-on-owned member meta keys when a member post is saved.<\/li>\n<\/ul>\n\n<h4>External Services<\/h4>\n\n<p>This plugin does not connect to any external services. All processing happens locally on your WordPress site. No data is sent to any third-party server.<\/p>\n\n<h3>Support<\/h3>\n\n<p>For support, please email ayalip@mayanaikotech.com or visit https:\/\/mayanaikotech.com\/maya-team-directory.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>maya-team-directory<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress<\/li>\n<li>Go to Team Members &gt; Add New to create team members<\/li>\n<li>Use the <code>[maya_team]<\/code> shortcode on any page or post<\/li>\n<li>Configure settings at Team Members &gt; Settings<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20display%20team%20members%3F\"><h3>How do I display team members?<\/h3><\/dt>\n<dd><p>Use the shortcode <code>[maya_team]<\/code> on any page or post. You can filter by group with <code>[maya_team group=\"your-group-slug\"]<\/code>.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20page%20builders%3F\"><h3>Does it work with page builders?<\/h3><\/dt>\n<dd><p>Yes. The shortcode works with Elementor, Beaver Builder, Divi, and any builder that supports WordPress shortcodes.<\/p><\/dd>\n<dt id=\"can%20i%20customize%20the%20design%3F\"><h3>Can I customize the design?<\/h3><\/dt>\n<dd><p>Override any template by copying it from the plugin's <code>templates\/<\/code> folder into your theme under <code>your-theme\/maya-team-directory\/<\/code>. You can also style the front-end output from your theme's stylesheet \u2014 every element has a stable <code>.maya-*<\/code> class.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20call%20any%20external%20services%3F\"><h3>Does the plugin call any external services?<\/h3><\/dt>\n<dd><p>No. The plugin operates entirely on your own WordPress install. Nothing is sent to any third-party server.<\/p><\/dd>\n<dt id=\"where%20did%20import%2Fexport%2C%20the%20rest%20api%2C%20the%20sidebar%20widget%2C%20list%2Fcompact%20layouts%2C%20custom%20css%2C%20accent%20color%2C%20and%20the%20social-network%20fields%20go%3F\"><h3>Where did Import\/Export, the REST API, the sidebar widget, list\/compact layouts, custom CSS, accent color, and the social-network fields go?<\/h3><\/dt>\n<dd><p>They were moved to a separately-distributed companion add-on so the free plugin can stay small and focused. The hooks and filters required to add them back are documented above. The add-on is available at https:\/\/mayanaikotech.com\/maya-team-directory\/ and is entirely optional.<\/p><\/dd>\n<dt id=\"why%20are%20there%20no%20linkedin%20%2F%20x%20%2F%20facebook%20fields%20in%20the%20member%20editor%3F\"><h3>Why are there no LinkedIn \/ X \/ Facebook fields in the member editor?<\/h3><\/dt>\n<dd><p>Social-network fields and their icons (LinkedIn, X, Facebook, Instagram, GitHub, YouTube, etc.) are entirely owned by the optional companion add-on. The free plugin exposes the <code>maya_td_social_fields<\/code>, <code>maya_td_social_icons<\/code>, and <code>maya_td_card_social_keys<\/code> filters so any plugin can register networks and have them appear in the Social Links meta box and on member cards.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Plugin Check pass. Fixed two <code>WordPress.Security.EscapeOutput.OutputNotEscaped<\/code> errors in <code>Maya_Shortcode::render_shortcode()<\/code>: the wrapper inline-style is now built as a value-only string and escaped with <code>esc_attr()<\/code> at the point of output, and the <code>&lt;option selected&gt;<\/code> attribute now uses the core <code>selected()<\/code> helper instead of a hand-rolled string. Renamed every template-scope variable in <code>templates\/single-maya_member.php<\/code>, <code>templates\/archive-maya_member.php<\/code>, and <code>templates\/taxonomy-maya_group.php<\/code> to use the <code>$maya_<\/code> prefix so Plugin Check's <code>WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound<\/code> rule no longer fires. Added narrowly-scoped <code>phpcs:ignore<\/code> annotations (with justifications) for the unavoidable <code>tax_query<\/code>, <code>meta_query<\/code>, and <code>post__not_in<\/code> query parameters that are inherent to the directory's filtering and ordering features.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Pre-release hardening based on the WordPress.org plugin review feedback. Updated the readme <code>Contributors<\/code> field to use the correct WordPress.org username (<code>ayalip<\/code>). Sanitized the nonce input in <code>Maya_Meta_Fields::save_meta()<\/code> with <code>sanitize_text_field( wp_unslash( ... ) )<\/code> before passing it to <code>wp_verify_nonce()<\/code>. Captured the <code>ob_start()<\/code> buffer in <code>Maya_Shortcode::ajax_load_more()<\/code> into an explicit <code>$html<\/code> variable via <code>ob_get_clean()<\/code> in the same function scope, so the buffer is unambiguously paired and cannot be left open by any code path. Replaced the <code>Maya_Meta_Fields::kses_svg()<\/code> echo helper with direct <code>wp_kses( $svg, Maya_Meta_Fields::svg_allowed_tags() )<\/code> calls at every echo site (front-end card renderer and the single-member template) so Plugin Check sees a recognised core escaper at the point of output. Wrapped the imploded group-link list in <code>wp_kses_post()<\/code> instead of relying on a phpcs ignore comment. The <code>kses_svg()<\/code> helper itself is kept as a thin wrapper around <code>wp_kses()<\/code> for backwards compatibility.<\/li>\n<\/ul>\n\n<h4>1.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"A focused team \/ staff directory with a custom post type, group taxonomy, a responsive grid layout, and a single-member template.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/304808","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=304808"}],"author":[{"embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ayalip"}],"wp:attachment":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=304808"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=304808"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=304808"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=304808"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=304808"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=304808"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}