{"id":50878889,"url":"https://github.com/patbaumgartner/cfp-dev-shortcodes","last_synced_at":"2026-06-15T12:03:07.681Z","repository":{"id":362307012,"uuid":"1258341672","full_name":"patbaumgartner/cfp-dev-shortcodes","owner":"patbaumgartner","description":"WordPress plugin providing shortcodes to display speakers, talks, schedule, and search results from a CFP.DEV instance (Devoxx/VoxxedDays)","archived":false,"fork":false,"pushed_at":"2026-06-03T14:20:24.000Z","size":850,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-03T15:22:37.173Z","etag":null,"topics":["cfp","devoxx","php","schedule","shortcode","speakers","voxxeddays","wordpress","wordpress-plugin"],"latest_commit_sha":null,"homepage":"https://cfp.dev","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/patbaumgartner.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-03T13:43:22.000Z","updated_at":"2026-06-03T14:32:26.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/patbaumgartner/cfp-dev-shortcodes","commit_stats":null,"previous_names":["patbaumgartner/cfp-dev-shortcodes"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/patbaumgartner/cfp-dev-shortcodes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patbaumgartner%2Fcfp-dev-shortcodes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patbaumgartner%2Fcfp-dev-shortcodes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patbaumgartner%2Fcfp-dev-shortcodes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patbaumgartner%2Fcfp-dev-shortcodes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/patbaumgartner","download_url":"https://codeload.github.com/patbaumgartner/cfp-dev-shortcodes/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patbaumgartner%2Fcfp-dev-shortcodes/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34361403,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-15T02:00:07.085Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cfp","devoxx","php","schedule","shortcode","speakers","voxxeddays","wordpress","wordpress-plugin"],"created_at":"2026-06-15T12:03:06.766Z","updated_at":"2026-06-15T12:03:07.673Z","avatar_url":"https://github.com/patbaumgartner.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CFP.DEV WordPress Shortcodes Plugin\n\n[![PHP Lint](https://github.com/patbaumgartner/cfp-dev-shortcodes/actions/workflows/lint.yml/badge.svg)](https://github.com/patbaumgartner/cfp-dev-shortcodes/actions/workflows/lint.yml)\n[![PHP Version](https://img.shields.io/badge/PHP-%3E%3D8.0-8892BF?logo=php)](https://php.net)\n[![WordPress](https://img.shields.io/badge/WordPress-6.0%2B-21759B?logo=wordpress)](https://wordpress.org)\n[![License: GPL v2+](https://img.shields.io/badge/License-GPL%20v2%2B-blue.svg)](https://www.gnu.org/licenses/gpl-2.0.html)\n[![Stable Tag](https://img.shields.io/badge/stable-4.1.0-brightgreen)](https://github.com/patbaumgartner/cfp-dev-shortcodes/releases)\n\n\u003e WordPress shortcodes plugin for [CFP.DEV](https://cfp.dev) — display speakers, talks, schedules, and search results from your CFP.DEV instance directly on your WordPress site (Devoxx, VoxxedDays, and more).\n\n---\n\n## Features\n\n- **Speakers list** — grid view with photos, sorted by last name or random; includes live search\n- **Speaker details** — full profile with bio, social links (Twitter, LinkedIn, Bluesky, Mastodon), and async Flickr photo gallery\n- **Talk details** — description, speakers, track, schedule info, YouTube embed, Spotify embed, related talks (semantic search), and star ratings\n- **Schedule** — time-grid per day with room columns, current-time indicator, and favorite counts\n- **Talks by track / by session type** — filterable tables with navigation tabs\n- **Search results** — exact keyword matches + semantic similarity results via [search.cfp.dev](https://search.cfp.dev)\n- **Offline mode** — crawls all API endpoints and CDN images into a local snapshot; serves everything locally with zero external requests\n- **Caching** — WordPress transient-based cache with configurable TTL (none, 1 h, 1 day, 1 week, 1 month)\n- **Theming** — light / dark theme with optional user toggle\n- **Admin UI** — API key, event settings, per-item cache management, offline crawl progress\n\n---\n\n## Requirements\n\n| Requirement | Version |\n|-------------|---------|\n| PHP | ≥ 8.0 |\n| WordPress | ≥ 6.0 |\n| CFP.DEV instance | any |\n\n---\n\n## Installation\n\n### Option A — Upload manually\n\n1. Download the latest release ZIP from the [Releases](https://github.com/patbaumgartner/cfp-dev-shortcodes/releases) page.\n2. In WordPress admin go to **Plugins → Add New → Upload Plugin** and upload the ZIP.\n3. Activate the plugin.\n\n### Option B — Copy to plugins directory\n\n```bash\ncp -r cfp-dev-shortcodes /var/www/html/wp-content/plugins/\n```\n\nActivate the plugin in **Plugins → Installed Plugins**.\n\n### First-time configuration\n\n1. Go to **Settings → CFP.DEV**.\n2. Enter your **CFP.DEV Key** (the subdomain of your CFP.DEV instance, e.g. `dvbe23`).\n3. Enter the **Event Name** used in page titles and meta tags.\n4. Set the desired **Cache Duration** and **Default Theme**.\n5. Save. The plugin automatically creates all required WordPress pages on first activation.\n\n---\n\n## Auto-created Pages\n\nWhen the plugin is activated it creates the following pages, each with the corresponding shortcode already inserted:\n\n| Page slug | Shortcode |\n|-----------|-----------|\n| `/speakers` | `[cfp_speakers]` |\n| `/speaker` | `[cfp_speaker_details]` |\n| `/talk` | `[cfp_talk_details]` |\n| `/schedule` | `[cfp_schedule]` |\n| `/talks-by-tracks` | `[cfp_talks_by_tracks]` |\n| `/talks-by-sessions` | `[cfp_talks_by_sessions]` |\n| `/search-results` | `[cfp_search_results]` |\n\n\u003e All pages must have **no parent page**.\n\n---\n\n## Shortcode Reference\n\n### `[cfp_speakers]`\n\nDisplays a grid of all speakers.\n\n| Attribute | Default | Description |\n|-----------|---------|-------------|\n| `size` | `300` | Maximum number of speakers to fetch |\n| `random` | `false` | Randomise the order (`yes` / `true`) |\n| `title` | — | Heading above the grid |\n| `subtitle` | — | Sub-heading |\n| `hide_search` | `false` | Hide the search form |\n\n```\n[cfp_speakers size=20 random=yes title=\"Our Speakers\" subtitle=\"Meet the lineup\"]\n```\n\n---\n\n### `[cfp_speaker_details]`\n\nRenders the full speaker profile page. Reads `speaker_slug` or `id` from the URL query string — no attributes needed.\n\n---\n\n### `[cfp_talk_details]`\n\nRenders the full talk details page. Reads `talk_slug` or `id` from the URL query string — no attributes needed.\n\n---\n\n### `[cfp_schedule]`\n\nDisplays the conference schedule grid.\n\n| Attribute | Default | Description |\n|-----------|---------|-------------|\n| `day` | *(from URL)* | Day name to display, e.g. `monday` |\n\n```\n[cfp_schedule]\n```\n\n---\n\n### `[cfp_talks_by_tracks]`\n\nLists talks grouped by track.\n\n| Attribute | Default | Description |\n|-----------|---------|-------------|\n| `all` | `false` | Show all tracks at once (`true`) instead of the tab selected by `id` |\n\n```\n[cfp_talks_by_tracks all=true]\n```\n\n---\n\n### `[cfp_talks_by_sessions]`\n\nLists talks grouped by session type (Conference, Workshop, BOF, Lightning Talk, …).\n\n---\n\n### `[cfp_search_results]`\n\nDisplays keyword search results and semantic similarity results. Reads `query` from the URL — no attributes needed.\n\n---\n\n## Offline Mode\n\nEnable **Offline Mode** in **Settings → CFP.DEV** to crawl the entire CFP.DEV API and all CDN images (speaker photos, track images, Flickr album thumbnails) into a local dated snapshot under `wp-content/uploads/cfp-dev-offline/`.\n\nOnce active:\n- All `getJSON()` calls are served from the local snapshot\n- No external requests to `*.cfp.dev` or CDN hosts are made\n- A `manifest.json` is written at crawl completion with per-URL stats\n- Click **Re-crawl Now** in the admin UI to refresh the snapshot at any time\n\n---\n\n## Development\n\n### Prerequisites\n\n- PHP ≥ 8.0\n- [Composer](https://getcomposer.org)\n\n### Setup\n\n```bash\ngit clone https://github.com/patbaumgartner/cfp-dev-shortcodes.git\ncd cfp-dev-shortcodes\ncomposer install\n```\n\n### Lint\n\n```bash\ncomposer lint         # PHP_CodeSniffer (WordPress Coding Standards)\ncomposer lint-fix     # phpcbf auto-fix\n```\n\n### CI\n\nGitHub Actions runs PHP syntax check (`php -l`) and PHPCS on every push and pull request to `main`.\n\n---\n\n## Contributing\n\nContributions are welcome! Please read [CONTRIBUTING.md](.github/CONTRIBUTING.md) and open a pull request or issue.\n\n---\n\n## Authors\n\n- **Stephan Janssen** — [@stephan007](https://x.com/stephan007)\n- **Patrick Baumgartner** — [@patbaumgartner](https://x.com/patbaumgartner)\n\n---\n\n## License\n\nGPL-2.0-or-later — see [LICENSE.txt](LICENSE.txt).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatbaumgartner%2Fcfp-dev-shortcodes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpatbaumgartner%2Fcfp-dev-shortcodes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatbaumgartner%2Fcfp-dev-shortcodes/lists"}