` markup.
*/
function openstation_my_wordpress_icon_svg() {
return '';
}
/**
* Whether the current user should see My WordPress.
*
* Mirrors the recycle-bin gate — anyone who can edit posts can
* browse posts and pages.
*
* @return bool
*/
function openstation_my_wordpress_user_can_use() {
$can = current_user_can( 'edit_posts' );
/**
* Filter whether the current user can see the My WordPress
* pinned icon and window.
*
* @param bool $can Default: edit_posts capability.
*/
return (bool) apply_filters( 'openstation_my_wordpress_user_can_use', $can );
}
/**
* Build the entity list shipped to the bundle. Posts, Pages,
* Users, and Media. Future phases add
* Comments, Tags, Categories, Themes, and Plugins.
*
* The optional `kind` field tells the bundle how to render entries
* of this entity: `'post'` (default) renders the standard
* title/excerpt/featured-image tile and the rendered-HTML preview;
* `'user'` renders an avatar + display-name tile and routes to the
* user dossier preview; `'media'` renders a thumbnail-grid tile and
* routes to the media preview pane. Plugins extending the entity
* list with a post-shaped collection can omit the field; user- and
* media-shaped collections must set `'user'` / `'media'`.
* The optional `post_type` field specifies the WP post-type
* slug used for `os..changed` cross-window broadcasts.
*
* @return array[] Each entry is `array( 'id', 'label', 'icon',
* 'restPath', 'kind', 'post_type' )`. `restPath` is appended to
* the `restRoot` config to derive the list URL.
*/
function openstation_my_wordpress_entities() {
$entities = array(
array(
'id' => 'posts',
'label' => __( 'Posts', 'desktop-mode' ),
'icon' => 'dashicons-admin-post',
'restPath' => 'wp/v2/posts',
'kind' => 'post',
'post_type' => 'post',
),
array(
'id' => 'pages',
'label' => __( 'Pages', 'desktop-mode' ),
'icon' => 'dashicons-admin-page',
'restPath' => 'wp/v2/pages',
'kind' => 'post',
'post_type' => 'page',
),
array(
'id' => 'users',
'label' => __( 'Users', 'desktop-mode' ),
'icon' => 'dashicons-admin-users',
'restPath' => 'wp/v2/users',
'kind' => 'user',
),
array(
'id' => 'media',
'label' => __( 'Media', 'desktop-mode' ),
'icon' => 'dashicons-admin-media',
'restPath' => 'wp/v2/media',
'kind' => 'media',
'post_type' => 'attachment',
),
);
/**
* Filter the list of entity types shown inside the My WordPress
* window. Each entry must declare `id`, `label`, `icon`, and
* `restPath`. Returning a reordered or extended array shows up
* in the bundle on the next render.
*
* **Status: Experimental** — the entity descriptor shape may
* gain fields as new entity kinds land (Comments, Tags,
* Categories, Themes, Plugins). Stable id/label/icon/restPath
* fields will continue to work; new optional fields will not
* break existing consumers. The `kind` field is optional and
* defaults to `'post'` for back-compat.
*
* Optional fields:
* - `kind` — render strategy (`'post'` default, `'user'`, `'media'`).
* - `post_type` — WP post-type slug for cross-window broadcast topic `os..changed`.
* - `thumbnails` — set false to keep the section icon on every tile
* instead of the entity's featured image.
* - `editAction` — who edits this section's rows. A preview-action id
* (see `openstation_my_wordpress_preview_actions`)
* replaces "Open in editor" everywhere — pane button,
* context-menu open entry, tile double-click. `false`
* removes every edit affordance (double-click falls
* back to the detail dossier; the bulk "Edit…" modal
* is suppressed). Omit for the classic editor.
* - `group` — folder id this section nests under at the root
* (null / omitted renders it loose at the root).
* - `groupLabel` — folder label. `groupIcon`, `groupOrder` follow.
*
* @param array[] $entities Default entities.
*/
$filtered = apply_filters( 'openstation_my_wordpress_entities', $entities );
return is_array( $filtered ) ? array_values( $filtered ) : $entities;
}
/*
* No window, no template, no launcher. The explorer people open is
* the `my-wordpress` APP (`apps/my-wordpress/`), which reclaimed the
* "WP Explorer" name and the folder mark from this module's helpers
* above. The legacy native window, its bundle and its pinned icon are
* gone; every deep surface it used to host moved with the port — the
* detail dossiers and the activity footprint render inside the app,
* "open this object" travels through the shared stores in
* `src/open-targets/explorer-open.ts` / `footprint-target.ts`, and
* the Recycle Bin trashes dropped rows by their payload's `restPath`.
*
* `openstation_my_wordpress_entities()` and its filter remain as an
* inert compatibility surface: subscribers registered against them
* (WooCommerce's own among them) still run, and the pure helpers are
* still what the tests pin — but nothing consumes the list to build a
* window any more. The `openstation_my_wordpress_window_args` /
* `openstation_my_wordpress_template_html` filters no longer fire.
*/