GitHub Get was born as a personal need to embed code from GitHub in WordPress. GitHub Get uses the WordPress HTTP API, basic authentication and Personal access tokens for consuming GitHub Restful services. Among the features of GitHub Get we can mention
- It allows to embed code from a Repository or Gist
- It allows to embed code from a public or private Repository or Gist
- Based on shortcode syntax
- Caches the response using the native set_transient WordPress function, this allows to use the plugin on heavy load sites. If the Repo file or Gist changes it is not necessary to clean the cache, GitHub Get detects the change and updates the cache showing the updated version.
- Easy to use and setup.
- Compatible with WP Code Highlight.js
- Free software, released under the GPL v3.
Install and configure
The development model is based on a single branch (master) and each version is marked by a commit in the form: Release vx.x.x and a tag in the form: vx.x.x. This simple development model allows me to use GitHub Updater for get changes from one version to another. If you do not use GitHub Updater you can download the zipped from GitHub and follow the procedure described in Manual_Plugin_Installation
Configure
- Login to the WordPress Admin Panel
- Menu > Settings > GitHub Get
- Specify the user and GitHub Personal access tokens
- Save
Syntax
[ghget attr=val]content[/ghget]
Content
The content value for a Gist is the identifier of the Gist (the hash). In the case of a file that is in a repo is the path of the file within the repo. To find the path, navigate to the repository from GitHub until you find the file, then use the function "Copy path", paste the result in a text editor before to copy it in the WordPress editor (WordPress visual editor will copy the complete URL and we only need the path of the file).
Attributes
All attributes are optional. You can specify the following attributes (default values are in bold)
- ribbon = true | false. Show GitHub ribbon.
- repo = true | false, true to embed a file that is in a repository.
- container = container | ". Allows to specify the container of the embedded file. This attribute accepts a string with the following format: container1(classes){inline styles}.container2(classes){inline styles}. Useful when used with ribbon = true because it will show the ribbon out of the container.
- filename = gist-file-name |". If you have a Gist with multiple files you can specify what file you want to embed otherwise embed the first found.
- account = github-account-name = | ". By default GitHut Get will get the content of the file using the credentials provided in the configuration. This parameter overrides this behavior allowing you to embed content from any public repo or gist.
- htmlenc = true | false. By default, apply the htmlspecialchars function to avoid the browser renders html tags if you want to change this behavior, set the value of this attribute in false.
Examples
To embed content from GitHub insert the shortcode in a Post or Page.
Embedding content from a Repo
[ghget repo="true" container=pre.code(perl)]sysadmin/pscript/filereader[/ghget]
#!/usr/bin/env perl
# This script is released under GPL V2+
open(FILEREAD, "< /home/yoander/projects/cake/.perms");
my @arr;
while (<FILEREAD>) {
my($line) = $_;
chomp($line);
push(@arr,$line);
}
close FILEREAD;
exit join(' ',@arr);
Using the filename attribute for a Gist with multiple files
[ghget filename="file2.yaml" container=pre(yaml)]ca53e97e02cbd4e24dc2babc9b676bb7[/ghget]
--- firstName: John lastName: Smith age: 25 job: Software Developer address: streetAddress: 21 2nd Street city: New York state: NY postalCode: 10021 phoneNumber: - type: home number: 212 555-1234 - type: fax number: 646 555-4567 gender: type: male
Using the account attribute
[ghget repo="true" account=symfony container=pre(markdown)]symfony/README.md[/ghget]
<p align="center"><a href="https://symfony.com" target="_blank"> <img src="https://symfony.com/logos/symfony_dynamic_01.svg" alt="Symfony Logo"> </a></p> [Symfony][1] is a **PHP framework** for web and console applications and a set of reusable **PHP components**. Symfony is used by thousands of web applications and most of the [popular PHP projects][2]. Installation ------------ * [Install Symfony][4] with Composer (see [requirements details][3]). * Symfony follows the [semantic versioning][5] strictly, publishes "Long Term Support" (LTS) versions and has a [release process][6] that is predictable and business-friendly. Sponsor ------- Symfony 7.1 is [backed][27] by - [Rector][29] - [JoliCode][30] - [Les-Tilleuls.coop][31] **Rector** helps successful and growing companies to get the most of the code they already have. Including upgrading to the latest Symfony LTS. They deliver automated refactoring, reduce maintenance costs, speed up feature delivery, and transform legacy code into a strategic asset. They can handle the dirty work, so you can focus on the features. **JoliCode** is a team of passionate developers and open-source lovers, with a strong expertise in PHP & Symfony technologies. They can help you build your projects using state-of-the-art practices. **Les-Tilleuls.coop** is a team of 70+ Symfony experts who can help you design, develop and fix your projects. They provide a wide range of professional services including development, consulting, coaching, training and audits. They also are highly skilled in JS, Go and DevOps. They are a worker cooperative! Help Symfony by [sponsoring][28] its development! Documentation ------------- * Read the [Getting Started guide][7] if you are new to Symfony. * Try the [Symfony Demo application][23] to learn Symfony in practice. * Discover Symfony ecosystem in detail with [Symfony The Fast Track][26]. * Master Symfony with the [Guides and Tutorials][8], the [Components docs][9] and the [Best Practices][10] reference. Community --------- * [Join the Symfony Community][11] and meet other members at the [Symfony events][12]. * [Get Symfony support][13] on GitHub Discussions, Slack, etc. * Follow us on [GitHub][14], [Twitter][15] and [Facebook][16]. * Read our [Code of Conduct][24] and meet the [CARE Team][25]. Contributing ------------ Symfony is an Open Source, community-driven project with thousands of [contributors][19]. Join them [contributing code][17] or [contributing documentation][18]. Security Issues --------------- If you discover a security vulnerability within Symfony, please follow our [disclosure procedure][20]. About Us -------- Symfony development is led by the [Symfony Core Team][22] and supported by [Symfony contributors][19]. [1]: https://symfony.com [2]: https://symfony.com/projects [3]: https://symfony.com/doc/current/reference/requirements.html [4]: https://symfony.com/doc/current/setup.html [5]: https://semver.org [6]: https://symfony.com/doc/current/contributing/community/releases.html [7]: https://symfony.com/doc/current/page_creation.html [8]: https://symfony.com/doc/current/index.html [9]: https://symfony.com/doc/current/components/index.html [10]: https://symfony.com/doc/current/best_practices/index.html [11]: https://symfony.com/community [12]: https://symfony.com/events/ [13]: https://symfony.com/support [14]: https://github.com/symfony [15]: https://twitter.com/symfony [16]: https://www.facebook.com/SymfonyFramework/ [17]: https://symfony.com/doc/current/contributing/code/index.html [18]: https://symfony.com/doc/current/contributing/documentation/index.html [19]: https://symfony.com/contributors [20]: https://symfony.com/security [22]: https://symfony.com/doc/current/contributing/code/core_team.html [23]: https://github.com/symfony/symfony-demo [24]: https://symfony.com/coc [25]: https://symfony.com/doc/current/contributing/code_of_conduct/care_team.html [26]: https://symfony.com/book [27]: https://symfony.com/backers [28]: https://symfony.com/sponsor [29]: https://getrector.com [30]: https://jolicode.com [31]: https://les-tilleuls.coop
Exotic example
In this example we will use the attribute container creating 2 div and giving styles to create a quote effect
[ghget htmlenc=false container="div(myclass1){border-left:3px solid #2196f3;font-style:italic;}.div{background-color:#ddffff;padding:7px;}(myclass2)"]a9507adb2aa40a23ca7daa1d06ef183a[/ghget]
GNU, which stands for Gnu's Not Unix, is the name for the complete Unix-compatible software system which I am writing so that I can give it away free to everyone who can use it.
Richard Stallman.
Errors
If GitHub Get cannot get the desired file it will display an informational message in order to give you any hints about what may be wrong.
Invalid Repo file name
Invalid repo file: sysadmin/shscript/acl-webdev1 (Not Found), Repos
Invalid Gist file name
Invalid file name: file2.json, Gist
Invalid Gist hash
Invalid Gist: ca53e97e02cbd4e24dc2babc9b676bbss7 (Not Found), Gists
As a final note, it is recommended to use this plugin together with Transients Manager so that you can clear the cache if you wish. All the cache keys have the ghget word