Plugin info

Total downloads: 4,438
Active installs: 40
Total reviews: 2
Average rating: 5
Support threads opened: 0
Support threads resolved: 0 (0%)
Available in: 1 language(s)
Contributors: 1
Last updated: 6/23/2019 (2429 days ago)
Added to WordPress: 11/22/2010 (15 years old)
Minimum WordPress version: 4.2.0
Tested up to WordPress version: 5.2.23
Minimum PHP version: f

Maintenance & Compatibility

Maintenance score

Possibly abandoned • Last updated 2429 days ago • 2 reviews

22/100

Is TFO Graphviz abandoned?

Possibly abandoned (last update 2429 days ago).

Compatibility

Requires WordPress: 4.2.0
Tested up to: 5.2.23
Requires PHP: f

Languages

Similar & Alternatives

Explore plugins with similar tags, and compare key metrics like downloads, ratings, updates, support, and WP/PHP compatibility.

No similar plugins found yet.

Description

Graphviz is a powerful tool for visualizing network and tree structures that connect objects.

This WordPress plugin provides a shortcode mechanism to create Graphviz graphics within blogs, including image map generation and most other Graphviz features.

How to use TFO Graphviz

The shortcode syntax is:

[graphviz ]
 
[/graphviz]

Where is anything from this list. All are entirely optional:

  • class=""

    Adds an extra CSS class name (or names) to the img tag of the rendered graph. This is in addition to the graphviz class that is already applied.

  • emitjs="yes|no"

    Override the global setting that controls whether JavaScript is emitted as necessary. Typically this JavaScript is only produced when rendering SVG output and is intended to ensure SVG images work on most browsers. However this can sometimes be undesirable and thus this option gives some control over this.

  • height=""

    Adds a height attribute to the image tags to enable control of the image rendering. This is useful for making sure the graphic fits into a certain space and works well for SVG rendered graphs.

  • href="self|"

    Encompasses the generated image with a link either to the image itself (with the self value) or to the provided URL. If the option is empty (for example, href="") then no link is generated. This is the default.

  • id=""

    Provides the identifier used to link the generated image to an image map. If you use the simple option then it also provides the name of the generated DOT graph container (since Graphviz uses this to generate the image map). If not given then an identifier is generated with the form tfo_graphviz_N where N is an integer that starts at one when the plugin is loaded and is incremented with use.

  • imap="yes|no"

    Graphviz can generate image maps using any URL’s given in the DOT code so that clicking on objects in the resultant image will direct a web browser to a new page. The effect of this option is to both instruct Graphviz to generate a client-side image map and to also insert that map into the generated HTML. It will use the id value as the name of the map (see the id option for details). imap defaults to no.

    Take note that the id value specified in the shortcode tag must match the name of the graph inside your DOT; the HTML for the image map is generated by Graphviz using the name of the graph as the map id and name. This plugin uses the id specified in the shortcode tag to link the image to the map and thus these values need to match.

    For example, note that mymap is both the id and the graph name:

    [graphviz imap="yes" title="This is my map" id="mymap"]
    digraph mymap {
      input[shape="box", style="rounded", label="My label", URL="/myurl"];
    }
    [/graphviz]
    

    If you do not give the graph any name at all the results are undefined. Some versions of Graphviz use the string %3 as the identifier in the map but this may not be universally true.

  • lang=""

    Specifies the particular Graphviz interpreter to use. The options are dot, neato, twopi, circo and fdp. The default is dot.

  • output=""

    Indicates the desired image format. Defaults to png.

  • simple="yes|no"

    The simple option provides a very basic DOT wrapper around your code such that the following is possible:

    [graphviz simple="yes"] a -> b -> c; [/graphviz]
    

    The generated code would look like:

    digraph tfo_graphviz_1 {
        a -> b -> c;
    }
    

    See the id option for a description of how the name of the digraph is created. simple defaults to no.

  • title="</em><code>"</code></p> <p>Indicates the title of the image. This is used in the <code>alt</code> and <code>title</code> attributes of the image reference. This defaults to an empty string. Note that image maps may indicate a <code>title</code> string which will appear in tool-tips.</p> </li> <li> <p><code>width="</code><em><image_width></em><code>"</code></p> <p>Adds a <code>width</code> attribute to the image tags to enable control of the image rendering. This is useful for making sure the graphic fits into a certain space and works well for SVG rendered graphs.</p> </li> <li> <p><code>method="</code><em><Graphviz|Graphlib_Dot|PHP></em>`”</p> <p>Overrides the configured output generation method to use the one indicated. This is useful when the mechanism normally in use does not support a specific feature, or when developing new methods. Note that since this does not have the same tests that the settings page has it may fail in mysterious ways without letting you know that it did.</p> <p>In particular, note that the <code>Graphlib_Dot</code> method is <em>very</em> experimental at the moment.</p> </li> </ul> </div></div></div></div></section><section id="installation" class="scroll-mt-24"><div class="overflow-hidden rounded-2xl border border-gray-200 bg-white/80 shadow-sm backdrop-blur dark:border-gray-700 dark:bg-gray-900/40"><div class="flex items-center justify-between gap-3 border-b border-gray-200 px-4 py-4 dark:border-gray-700 md:px-6"><div class="flex items-center gap-3"><div class="flex h-9 w-9 items-center justify-center rounded-xl bg-indigo-50 text-indigo-700 dark:bg-indigo-900/40 dark:text-indigo-200"><svg stroke="currentColor" fill="none" stroke-width="0" viewBox="0 0 24 24" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M5 16C5 15.4477 5.44772 15 6 15H14C14.5523 15 15 15.4477 15 16C15 16.5523 14.5523 17 14 17H6C5.44772 17 5 16.5523 5 16Z" fill="currentColor"></path><path d="M18 11C18.5523 11 19 11.4477 19 12C19 12.5523 18.5523 13 18 13H10C9.44772 13 9 12.5523 9 12C9 11.4477 9.44772 11 10 11H18Z" fill="currentColor"></path><path d="M16 16C16 15.4477 16.4477 15 17 15H18C18.5523 15 19 15.4477 19 16C19 16.5523 18.5523 17 18 17H17C16.4477 17 16 16.5523 16 16Z" fill="currentColor"></path><path d="M7 11C7.55228 11 8 11.4477 8 12C8 12.5523 7.55228 13 7 13H6C5.44772 13 5 12.5523 5 12C5 11.4477 5.44772 11 6 11H7Z" fill="currentColor"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M4 3C2.34315 3 1 4.34315 1 6V18C1 19.6569 2.34315 21 4 21H20C21.6569 21 23 19.6569 23 18V6C23 4.34315 21.6569 3 20 3H4ZM20 5H4C3.44772 5 3 5.44772 3 6V18C3 18.5523 3.44772 19 4 19H20C20.5523 19 21 18.5523 21 18V6C21 5.44771 20.5523 5 20 5Z" fill="currentColor"></path></svg></div><h2 class="text-base font-semibold text-gray-900 dark:text-gray-100 md:text-lg">Installation</h2></div></div><div class="relative px-4 py-4 md:px-6"><div class="relative overflow-hidden prose prose-sm sm:prose md:prose-lg dark:prose-invert" style="max-width:100%;max-height:320px"><div><p>Installation is simple. Either install from directly within WordPress or:</p> <ol> <li>Download and unzip the plugin to the <code>/wp-content/plugins/tfo-graphviz</code> directory within your WordPress installation.</li> <li>Make the directory <code>/wp-content/tfo-graphviz</code> and make it writable by the web server – this is where generated images and image maps go.</li> <li>Activate the plugin through the ‘Plugins’ menu in WordPress.</li> <li>Choose a generation method on the plugin settings page.</li> <li>Use the <code>[graphviz]</code> shortcode to generate graphs.</li> </ol> <p>You need access to a Graphviz renderer:</p> <ul> <li>By using a local installation of Graphviz and the <code>dot</code> binary.</li> <li>By using a local installation and PHP bindings to the library.</li> </ul> <p>See the FAQ for more details on these options and http://www.graphviz.org/Download.php for details on installing Graphviz on your web server.</p> </div></div></div></div></section><section id="faq" class="scroll-mt-24"><div class="overflow-hidden rounded-2xl border border-gray-200 bg-white/80 shadow-sm backdrop-blur dark:border-gray-700 dark:bg-gray-900/40"><div class="flex items-center justify-between gap-3 border-b border-gray-200 px-4 py-4 dark:border-gray-700 md:px-6"><div class="flex items-center gap-3"><div class="flex h-9 w-9 items-center justify-center rounded-xl bg-indigo-50 text-indigo-700 dark:bg-indigo-900/40 dark:text-indigo-200"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 384 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423 19.86-82.299 44.576-82.299 106.405V320c0 13.255 10.745 24 24 24h72.471c13.255 0 24-10.745 24-24v-5.773c0-42.86 125.268-44.645 125.268-160.627C377.504 66.256 286.902 0 202.021 0zM192 373.459c-38.196 0-69.271 31.075-69.271 69.271 0 38.195 31.075 69.27 69.271 69.27s69.271-31.075 69.271-69.271-31.075-69.27-69.271-69.27z"></path></svg></div><h2 class="text-base font-semibold text-gray-900 dark:text-gray-100 md:text-lg">Frequently Asked Questions</h2></div></div><div class="relative px-4 py-4 md:px-6"><div class="relative overflow-hidden prose prose-sm sm:prose md:prose-lg dark:prose-invert" style="max-width:100%;max-height:320px"><div> <h4>What is Graphviz?</h4> <p> <p><a href="http://www.graphviz.org/" rel="nofollow ugc">Graphviz</a> is a way of generating visualisations of [structural relationships between objects. Almost any kind of diagram where [something <em>connects</em> to something else can be drawn and automatically laid [out using the language DOT.</p> </p> <h4>How do I use this plugin?</h4> <p> <p>Use the <code>[graphviz]</code> shortcode. Details are in the <em>Description</em> section.</p> </p> <h4>How to I write DOT?</h4> <p> <p>The online documentation for <a href="http://www.graphviz.org/" rel="nofollow ugc">Graphviz</a> is terse and not especially helpful, in particular the <a href="http://www.graphviz.org/doc/info/lang.html" rel="nofollow ugc">DOT language</a> page is only helpful if you happen to be able to read an approximation of <a href="http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form" rel="nofollow ugc">BNF</a>.</p> <p>There are however several other introductions to Graphviz and DOT, including <a href="http://linuxdevcenter.com/pub/a/linux/2004/05/06/graphviz_dot.html" rel="nofollow ugc">an excerpt on the O’Reilly LinuxDevCenter.com site</a>. Another approach would be to look at the examples in the <a href="http://www.graphviz.org/Gallery.php" rel="nofollow ugc">Graphviz gallery</a>.</p> <p>Users should note that DOT syntax varies between Graphviz processors and also between versions of those processors. If in doubt, find an example and experiment with it.</p> </p> <h4>Where can I see examples?</h4> <p> <ul> <li><a href="http://blog.flirble.org/2010/11/12/graphviz-demo/" rel="nofollow ugc">http://blog.flirble.org/2010/11/12/graphviz-demo/</a></li> <li><a href="http://blog.flirble.org/2015/11/15/adding-svg-support-tfo-graphviz/" rel="nofollow ugc">http://blog.flirble.org/2015/11/15/adding-svg-support-tfo-graphviz/</a></li> <li><a href="http://blog.flirble.org/2019/06/22/gv-example-state-machine/" rel="nofollow ugc">http://blog.flirble.org/2019/06/22/gv-example-state-machine/</a></li> <li><a href="http://blog.flirble.org/2019/06/22/gv-example-various-graphs/" rel="nofollow ugc">http://blog.flirble.org/2019/06/22/gv-example-various-graphs/</a></li> </ul> </p> <h4>Can I manipulate the rendered graph using CSS in my WordPress theme?</h4> <p> <p>The <code>img</code> elements are tagged with ‘<code>class="graphviz"</code>‘. Additionally, you can add <code>class="myclass"</code> to the shortcode to add additional classes to the <code>img</code> tag.</p> </p> <h4>How can I make my graph have a transparent background?</h4> <p> <p>Add the tag <code>bgcolor="transparent"</code> to the root graph node. For example placing <code>graph [bgcolor="transparent"]</code> near the top like this:</p> <pre><code>[graphviz] digraph test { graph [bgcolor="transparent"] a1 -> a2 -> a3 -> a1; } [/graphviz] </code></pre> </p> <h4>Nothing is being rendered, maybe my DOT is broken?</h4> <p> <p>If you’re using a local Graphviz renderer then errors from Graphviz should be presented where you expect the graph to appear. Note that because of how WordPress submits content to plugins the line numbering will not always match what you expect.</p> <p>The error message when using the <code>dot</code> binary will contain the command line used as well as a line-numbered copy of the DOT that was used.</p> </p> <h4>I’m getting strange errors that make no sense, what gives?</h4> <p> <p>WordPress encodes HTML entities inside the shortcode block which this plugin attempts to demangle.</p> <p>Unfortunately WordPress can also try to do smart character replacement, such as “…” into a UNICODE ellipsis character. The Graphviz plugin contains a mapping of many of these back to their ASCII equivalents, but it may not be complete. Let us know if you think this is breaking your DOT. It’s also possible that non-ASCII7 characters do strange things too.</p> <p>Adding <code>define("TFO_GV_DEBUG", true)</code> to wp_config.php will cause the plugin to create some diagnostic files in your system <code>tmp</code> directory. The file <code>pre-N.dot</code> is the contents of the DOT as given to the plugin by WordPress, <code>post-N.dot</code> is the results of the plugin attempting to demangle it. The <code>N</code> is a number that is incremented for each shortcode section interpreted. The plugin does not clean these files up.</p> </p> <h4>How do I install the Graphviz program (not this plugin) locally?</h4> <p> <p>This depends on your local operating system. You will find some details at http://www.graphviz.org/Download.php but many systems also have it in their own package management system, for example this is package <code>graphviz</code> on Debian, Ubuntu and Fedora systems.</p> <p>There are currently two ways to use a local installation of Graphviz. The settings page will only show options for those methods that are actually available and configured correctly.</p> <ol> <li>Using a local Graphviz installation and the <code>dot</code> binary. You configure the path to this binary on the admin settings page of the plugin.</li> <li>Using PHP bindings to the Graphviz library. This requires that <code>gv.php</code> is available.</li> </ol> </p> <h4>I’ve installed the PHP bindings but Graphviz doesn’t work!</h4> <p> <p>This requires that <code>gv.php</code> is available and that the associated module is either already loaded or loadable with <code>dl()</code>.</p> <p>The use of <code>dl()</code> is often disabled in <code>php.ini</code> (since it can have security implications) and doesn’t work on multithreaded webservers; it’s entirely disabled in modern Apache2 httpd modules.</p> <p>For these cases you must ensure the library is loaded with an entry like <code>extension=gv.so</code> or similar somewhere in the PHP configuration.</p> </p> </div></div></div></div></section><section id="reviews-list" class="scroll-mt-24"><div class="overflow-hidden rounded-2xl border border-gray-200 bg-white/80 shadow-sm backdrop-blur dark:border-gray-700 dark:bg-gray-900/40"><div class="flex items-center justify-between gap-3 border-b border-gray-200 px-4 py-4 dark:border-gray-700 md:px-6"><div class="flex items-center gap-3"><div class="flex h-9 w-9 items-center justify-center rounded-xl bg-indigo-50 text-indigo-700 dark:bg-indigo-900/40 dark:text-indigo-200"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0V0z"></path><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H5.17l-.59.59-.58.58V4h16v12zm-9.5-2H18v-2h-5.5zm3.86-5.87c.2-.2.2-.51 0-.71l-1.77-1.77c-.2-.2-.51-.2-.71 0L6 11.53V14h2.47l5.89-5.87z"></path></svg></div><h2 class="text-base font-semibold text-gray-900 dark:text-gray-100 md:text-lg">Review feed</h2></div></div><div class="relative px-4 py-4 md:px-6"><div class="relative overflow-hidden" style="max-height:520px"><div class="text-center text-gray-500 dark:text-gray-400">No reviews available</div></div></div></div></section><section id="screenshots" class="scroll-mt-24"><div class="overflow-hidden rounded-2xl border border-gray-200 bg-white/80 shadow-sm backdrop-blur dark:border-gray-700 dark:bg-gray-900/40"><div class="flex items-center justify-between gap-3 border-b border-gray-200 px-4 py-4 dark:border-gray-700 md:px-6"><div class="flex items-center gap-3"><div class="flex h-9 w-9 items-center justify-center rounded-xl bg-indigo-50 text-indigo-700 dark:bg-indigo-900/40 dark:text-indigo-200"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 576 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v208c0 44.112 35.888 80 80 80h336zm96-80V80c0-26.51-21.49-48-48-48H144c-26.51 0-48 21.49-48 48v256c0 26.51 21.49 48 48 48h384c26.51 0 48-21.49 48-48zM256 128c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-96 144l55.515-55.515c4.686-4.686 12.284-4.686 16.971 0L272 256l135.515-135.515c4.686-4.686 12.284-4.686 16.971 0L512 208v112H160v-48z"></path></svg></div><h2 class="text-base font-semibold text-gray-900 dark:text-gray-100 md:text-lg">Screenshots</h2></div></div><div class="relative px-4 py-4 md:px-6"><div class="relative overflow-hidden prose prose-sm sm:prose md:prose-lg dark:prose-invert" style="max-width:100%;max-height:520px"><div><ol><li><a href="https://ps.w.org/tfo-graphviz/assets/screenshot-1.png?rev=2110965"><img src="https://ps.w.org/tfo-graphviz/assets/screenshot-1.png?rev=2110965" alt="Virtual Disk Stack" loading="lazy" decoding="async" fetchpriority="low"></a><p>Virtual Disk Stack</p></li><li><a href="https://ps.w.org/tfo-graphviz/assets/screenshot-2.png?rev=2110965"><img src="https://ps.w.org/tfo-graphviz/assets/screenshot-2.png?rev=2110965" alt="State machine" loading="lazy" decoding="async" fetchpriority="low"></a><p>State machine</p></li><li><a href="https://ps.w.org/tfo-graphviz/assets/screenshot-3.png?rev=2110965"><img src="https://ps.w.org/tfo-graphviz/assets/screenshot-3.png?rev=2110965" alt="Example page" loading="lazy" decoding="async" fetchpriority="low"></a><p>Example page</p></li></ol></div></div></div></div></section><section id="changelog" class="scroll-mt-24"><div class="overflow-hidden rounded-2xl border border-gray-200 bg-white/80 shadow-sm backdrop-blur dark:border-gray-700 dark:bg-gray-900/40"><div class="flex items-center justify-between gap-3 border-b border-gray-200 px-4 py-4 dark:border-gray-700 md:px-6"><div class="flex items-center gap-3"><div class="flex h-9 w-9 items-center justify-center rounded-xl bg-indigo-50 text-indigo-700 dark:bg-indigo-900/40 dark:text-indigo-200"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M504 255.531c.253 136.64-111.18 248.372-247.82 248.468-59.015.042-113.223-20.53-155.822-54.911-11.077-8.94-11.905-25.541-1.839-35.607l11.267-11.267c8.609-8.609 22.353-9.551 31.891-1.984C173.062 425.135 212.781 440 256 440c101.705 0 184-82.311 184-184 0-101.705-82.311-184-184-184-48.814 0-93.149 18.969-126.068 49.932l50.754 50.754c10.08 10.08 2.941 27.314-11.313 27.314H24c-8.837 0-16-7.163-16-16V38.627c0-14.254 17.234-21.393 27.314-11.314l49.372 49.372C129.209 34.136 189.552 8 256 8c136.81 0 247.747 110.78 248 247.531zm-180.912 78.784l9.823-12.63c8.138-10.463 6.253-25.542-4.21-33.679L288 256.349V152c0-13.255-10.745-24-24-24h-16c-13.255 0-24 10.745-24 24v135.651l65.409 50.874c10.463 8.137 25.541 6.253 33.679-4.21z"></path></svg></div><h2 class="text-base font-semibold text-gray-900 dark:text-gray-100 md:text-lg">Changelog</h2></div></div><div class="relative px-4 py-4 md:px-6"><div class="relative overflow-hidden prose prose-sm sm:prose md:prose-lg dark:prose-invert" style="max-width:100%;max-height:320px"><div><h4>1.19</h4> <ul> <li>The method override was not working as expected if you fully qualified the method name.</li> </ul> <h4>1.18</h4> <ul> <li>The hash that is used to name the generated output for caching was not including all the options for generation; this meant that changing things like the GraphViz language from “dot” to something else or changing the image size was not re-renerating the output.</li> <li>Removed all references to the defunct ‘remote’ method.</li> <li>Add a mechanism for a method to produce its content inline, not just by URL.</li> <li>Experiment with the Graphlib-Dot JavaScript library. See <a href="https://github.com/dagrejs/graphlib-dot/wiki" rel="nofollow ugc">https://github.com/dagrejs/graphlib-dot/wiki</a>.</li> <li>Add a <code>method</code> attribute that allows overriding the generation method.</li> <li>Better reporting on the admin page when a generation module is not available.</li> </ul> <h4>1.17</h4> <ul> <li>HTML decode the content; WP now seems to encode HTML entities between our tags.</li> </ul> <h4>1.16</h4> <ul> <li>Add <code>class</code> attribute to the shortcode to enable adding CSS classes to the <code>img</code> tag.</li> <li>Make the test graph on the admin page have a transparent background.</li> <li>Document <code>emitjs</code> attribute.</li> </ul> <h4>1.15</h4> <ul> <li>Validate graph language and output format.</li> <li>Some sanity checking in the PHP bindings method.</li> <li>Document the need to specify both a shortcode <code>id</code> and a DOT graph name.</li> <li>Tested up to WP 4.7.2</li> </ul> <h4>1.14</h4> <ul> <li>Finally worked out how to disable wptexturize! Less demangling now required.</li> <li>Add an option to control whether we ever emit JavaScript.</li> </ul> <h4>1.13</h4> <ul> <li>Better diagnostic output for when running <code>dot</code> doesn’t work, including the command line used and adding the DOT as submitted, with line numbers. (Joachim Durchholz)</li> <li>Add more de-mangling rules, for smart quotes and ellipsis. (Joachim Durchholz)</li> <li>Improve the newline de-mangling. (Joachim Durchholz)</li> <li>Add the SVG output format. See <a href="http://blog.flirble.org/2015/11/15/adding-svg-support-tfo-graphviz/" rel="nofollow ugc">http://blog.flirble.org/2015/11/15/adding-svg-support-tfo-graphviz/</a> for example. (Joachim Durchholz)</li> <li>Add a fix for when the required GV class isn’t loadable, such as when GV gets upgraded on the system. (Sam Wilson)</li> <li>Include some JavaScript for when both an image map and width/height scaling is specified. This is required to scale the image map to whatever the image has been scaled to. Image map scaling code comes from https://github.com/davidjbradshaw/image-map-resizer</li> </ul> <h4>1.12</h4> <ul> <li><code>clean_url()</code> and <code>attribute_escape()</code> have both been deprecated. Migrate to <code>esc_url()</code> and esc_attr()`. (Sam Wilson)</li> </ul> <h4>1.11</h4> <ul> <li>Remove deprecated constructor definitions. (Sam Wilson)</li> <li>Testing against 4.3.</li> </ul> <h4>1.10</h4> <ul> <li>Require at least WP 4.2 now.</li> <li>Fix use of <code>add_query_arg()</code> to escape its output; a possible XSS vector.</li> <li>Added GPL v2 license information.</li> </ul> <h4>1.9</h4> <ul> <li>Make some debugging output conditional.</li> <li>Fix where that debugging output is stored. (Sam Wilson)</li> </ul> <h4>1.8</h4> <ul> <li>Fix a packaging error in 1.7.</li> <li>Fix use of hardcoded “/tmp” path. (Sam Wilson)</li> </ul> <h4>1.7</h4> <ul> <li>Test upto WP 4.2.2.</li> <li>Change an <code>exec("mv...")</code> to using <code>rename()</code> instead. (Sam Wilson)</li> <li>Code documentation improvement.</li> <li>Some reformatting.</li> </ul> <h4>1.6</h4> <ul> <li>Fix some cosmetic documentation issues.</li> </ul> <h4>1.5</h4> <ul> <li>Update documentation for using the PHP gv bindings.</li> </ul> <h4>1.4</h4> <ul> <li>WordPress 4.0 support.</li> <li>Fix for PHP Graphviz module loading; newer PHP’s don’t allow dl() at all in some cases, we should therefore detect this.</li> <li>Use WP_Error properly.</li> <li>Liberal use of try/catch to detect runtime issues.</li> </ul> <h4>1.3</h4> <ul> <li>No changes; version bump for the later 3.x series.</li> </ul> <h4>1.2</h4> <ul> <li>Removed leftover diagnostic code in PHP render class (which was appearing in posts!)</li> <li>Added remote Graphviz rendering support. Note that this is still young and will add a mark to the graph indicating it was generated by this plugin.</li> <li>Tested on WordPress 3.0.2 and 3.0.3.</li> </ul> <h4>1.1</h4> <ul> <li>Added support for locally installed PHP bindings to the Graphviz library. This only works if PHP either allows dl() to load a module or gv.so/dll is staticly configured to load in php.ini.</li> <li>Made render module selection somewhat more robust.</li> <li>Attempt to create our wp-content/tfo-graphviz directory if it doesn’t already exist.</li> <li>Better (as in, “any at all”) error generation in the shortcode handler.</li> <li>Add content expiration – configurable. Will remove files from the wp-content/tfo-graphviz directory, but only if the threshold is >0 and older than the threshold.</li> </ul> <h4>1.0</h4> <ul> <li>First release.</li> </ul> </div></div></div></div></section><div class="flex justify-center pt-2"><a href="/plugins" class="inline-flex items-center gap-2 text-sm font-semibold text-indigo-600 hover:underline dark:text-indigo-300"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" class="h-4 w-4" aria-hidden="true" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M257.5 445.1l-22.2 22.2c-9.4 9.4-24.6 9.4-33.9 0L7 273c-9.4-9.4-9.4-24.6 0-33.9L201.4 44.7c9.4-9.4 24.6-9.4 33.9 0l22.2 22.2c9.5 9.5 9.3 25-.4 34.3L136.6 216H424c13.3 0 24 10.7 24 24v32c0 13.3-10.7 24-24 24H136.6l120.5 114.8c9.8 9.3 10 24.8.4 34.3z"></path></svg> Back to plugins</a></div></div></div></div></div></main><footer class="w-full border-t border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 flex-none"><div class="max-w-6xl mx-auto px-4 py-10 grid gap-10 md:grid-cols-3"><div class="flex flex-col gap-3"><div class="text-lg font-semibold">Plugins Database</div><p class="text-sm text-gray-600 dark:text-gray-400 leading-relaxed">Data-rich search and discovery for every WordPress plugin, tag, language, and author.</p></div><div class="flex flex-col gap-3"><div class="text-xs font-semibold uppercase tracking-wide text-gray-700 dark:text-gray-300">Explore</div><div class="flex flex-col gap-2 text-sm"><a href="/plugins">All plugins</a><a href="/tags">Tags</a><a href="/languages">Languages</a><a href="/authors">Authors</a></div></div><div class="flex flex-col gap-3"><div class="text-xs font-semibold uppercase tracking-wide text-gray-700 dark:text-gray-300">Company</div><div class="flex flex-col gap-2 text-sm"><a href="/about">About</a></div></div></div><div class="border-t border-gray-200 dark:border-gray-700"><div class="max-w-6xl mx-auto px-4 py-4 text-sm text-gray-600 dark:text-gray-400 flex flex-col sm:flex-row sm:items-center sm:justify-between gap-2"><div>© <!-- -->2026<!-- --> Plugins Database LTD</div><div class="flex flex-row flex-wrap gap-4"><a href="/sitemap.xml">Sitemap</a></div></div></div></footer></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"pluginName":"TFO Graphviz","pluginId":"tfo-graphviz","stringifyPluginData":"{\"active_installs\":40,\"added\":{\"timestamp\":1290384000,\"timezone\":\"UTC\"},\"author\":\"Chris Luke\",\"author_profile\":{\"url\":\"https://profiles.wordpress.org/chrisy/\",\"alt\":\"Chris Luke\"},\"banners\":[],\"changelog\":\"\u003ch4\u003e1.19\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003eThe method override was not working as expected if you fully qualified the method name.\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003ch4\u003e1.18\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003eThe hash that is used to name the generated output for caching was not including all the options for generation; this meant that changing things like the GraphViz language from \u0026#8220;dot\u0026#8221; to something else or changing the image size was not re-renerating the output.\u003c/li\u003e\\n\u003cli\u003eRemoved all references to the defunct \u0026#8216;remote\u0026#8217; method.\u003c/li\u003e\\n\u003cli\u003eAdd a mechanism for a method to produce its content inline, not just by URL.\u003c/li\u003e\\n\u003cli\u003eExperiment with the Graphlib-Dot JavaScript library. See \u003ca href=\\\"https://github.com/dagrejs/graphlib-dot/wiki\\\" rel=\\\"nofollow ugc\\\"\u003ehttps://github.com/dagrejs/graphlib-dot/wiki\u003c/a\u003e.\u003c/li\u003e\\n\u003cli\u003eAdd a \u003ccode\u003emethod\u003c/code\u003e attribute that allows overriding the generation method.\u003c/li\u003e\\n\u003cli\u003eBetter reporting on the admin page when a generation module is not available.\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003ch4\u003e1.17\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003eHTML decode the content; WP now seems to encode HTML entities between our tags.\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003ch4\u003e1.16\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003eAdd \u003ccode\u003eclass\u003c/code\u003e attribute to the shortcode to enable adding CSS classes to the \u003ccode\u003eimg\u003c/code\u003e tag.\u003c/li\u003e\\n\u003cli\u003eMake the test graph on the admin page have a transparent background.\u003c/li\u003e\\n\u003cli\u003eDocument \u003ccode\u003eemitjs\u003c/code\u003e attribute.\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003ch4\u003e1.15\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003eValidate graph language and output format.\u003c/li\u003e\\n\u003cli\u003eSome sanity checking in the PHP bindings method.\u003c/li\u003e\\n\u003cli\u003eDocument the need to specify both a shortcode \u003ccode\u003eid\u003c/code\u003e and a DOT graph name.\u003c/li\u003e\\n\u003cli\u003eTested up to WP 4.7.2\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003ch4\u003e1.14\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003eFinally worked out how to disable wptexturize! Less demangling now required.\u003c/li\u003e\\n\u003cli\u003eAdd an option to control whether we ever emit JavaScript.\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003ch4\u003e1.13\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003eBetter diagnostic output for when running \u003ccode\u003edot\u003c/code\u003e doesn\u0026#8217;t work, including the command line used and adding the DOT as submitted, with line numbers. (Joachim Durchholz)\u003c/li\u003e\\n\u003cli\u003eAdd more de-mangling rules, for smart quotes and ellipsis. (Joachim Durchholz)\u003c/li\u003e\\n\u003cli\u003eImprove the newline de-mangling. (Joachim Durchholz)\u003c/li\u003e\\n\u003cli\u003eAdd the SVG output format. See \u003ca href=\\\"http://blog.flirble.org/2015/11/15/adding-svg-support-tfo-graphviz/\\\" rel=\\\"nofollow ugc\\\"\u003ehttp://blog.flirble.org/2015/11/15/adding-svg-support-tfo-graphviz/\u003c/a\u003e for example. (Joachim Durchholz)\u003c/li\u003e\\n\u003cli\u003eAdd a fix for when the required GV class isn\u0026#8217;t loadable, such as when GV gets upgraded on the system. (Sam Wilson)\u003c/li\u003e\\n\u003cli\u003eInclude some JavaScript for when both an image map and width/height scaling is specified. This is required to scale the image map to whatever the image has been scaled to. Image map scaling code comes from https://github.com/davidjbradshaw/image-map-resizer\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003ch4\u003e1.12\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003e\u003ccode\u003eclean_url()\u003c/code\u003e and \u003ccode\u003eattribute_escape()\u003c/code\u003e have both been deprecated. Migrate to \u003ccode\u003eesc_url()\u003c/code\u003e and esc_attr()`. (Sam Wilson)\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003ch4\u003e1.11\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003eRemove deprecated constructor definitions. (Sam Wilson)\u003c/li\u003e\\n\u003cli\u003eTesting against 4.3.\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003ch4\u003e1.10\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003eRequire at least WP 4.2 now.\u003c/li\u003e\\n\u003cli\u003eFix use of \u003ccode\u003eadd_query_arg()\u003c/code\u003e to escape its output; a possible XSS vector.\u003c/li\u003e\\n\u003cli\u003eAdded GPL v2 license information.\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003ch4\u003e1.9\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003eMake some debugging output conditional.\u003c/li\u003e\\n\u003cli\u003eFix where that debugging output is stored. (Sam Wilson)\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003ch4\u003e1.8\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003eFix a packaging error in 1.7.\u003c/li\u003e\\n\u003cli\u003eFix use of hardcoded \u0026#8220;/tmp\u0026#8221; path. (Sam Wilson)\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003ch4\u003e1.7\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003eTest upto WP 4.2.2.\u003c/li\u003e\\n\u003cli\u003eChange an \u003ccode\u003eexec(\\\"mv...\\\")\u003c/code\u003e to using \u003ccode\u003erename()\u003c/code\u003e instead. (Sam Wilson)\u003c/li\u003e\\n\u003cli\u003eCode documentation improvement.\u003c/li\u003e\\n\u003cli\u003eSome reformatting.\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003ch4\u003e1.6\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003eFix some cosmetic documentation issues.\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003ch4\u003e1.5\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003eUpdate documentation for using the PHP gv bindings.\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003ch4\u003e1.4\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003eWordPress 4.0 support.\u003c/li\u003e\\n\u003cli\u003eFix for PHP Graphviz module loading; newer PHP\u0026#8217;s don\u0026#8217;t allow dl() at all in some cases, we should therefore detect this.\u003c/li\u003e\\n\u003cli\u003eUse WP_Error properly.\u003c/li\u003e\\n\u003cli\u003eLiberal use of try/catch to detect runtime issues.\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003ch4\u003e1.3\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003eNo changes; version bump for the later 3.x series.\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003ch4\u003e1.2\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003eRemoved leftover diagnostic code in PHP render class (which was appearing in posts!)\u003c/li\u003e\\n\u003cli\u003eAdded remote Graphviz rendering support. Note that this is still young and will add a mark to the graph indicating it was generated by this plugin.\u003c/li\u003e\\n\u003cli\u003eTested on WordPress 3.0.2 and 3.0.3.\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003ch4\u003e1.1\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003eAdded support for locally installed PHP bindings to the Graphviz library. This only works if PHP either allows dl() to load a module or gv.so/dll is staticly configured to load in php.ini.\u003c/li\u003e\\n\u003cli\u003eMade render module selection somewhat more robust.\u003c/li\u003e\\n\u003cli\u003eAttempt to create our wp-content/tfo-graphviz directory if it doesn\u0026#8217;t already exist.\u003c/li\u003e\\n\u003cli\u003eBetter (as in, \u0026#8220;any at all\u0026#8221;) error generation in the shortcode handler.\u003c/li\u003e\\n\u003cli\u003eAdd content expiration \u0026#8211; configurable. Will remove files from the wp-content/tfo-graphviz directory, but only if the threshold is \u0026gt;0 and older than the threshold.\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003ch4\u003e1.0\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003eFirst release.\u003c/li\u003e\\n\u003c/ul\u003e\\n\",\"contributors\":[{\"slug\":\"chrisy\",\"name\":\"Chris Luke\",\"count\":1,\"is_owner\":true,\"links\":{\"profile\":{\"url\":\"https://profiles.wordpress.org/chrisy/\",\"alt\":\"Chris Luke's profile\"},\"plugins\":{\"url\":\"https://profiles.wordpress.org/chrisy/#content-plugins\",\"alt\":\"Chris Luke's plugins\"},\"activity\":{\"url\":\"https://profiles.wordpress.org/chrisy/#content-activity\",\"alt\":\"Chris Luke's activity\"},\"translations\":{\"url\":\"https://profiles.wordpress.org/chrisy/#content-translations\",\"alt\":\"Chris Luke's translations\"}}}],\"description\":\"\u003cp\u003e\u003ca href=\\\"http://www.graphviz.org/\\\" rel=\\\"nofollow ugc\\\"\u003eGraphviz\u003c/a\u003e is a powerful tool for visualizing network and tree structures that connect objects.\u003c/p\u003e\\n\u003cp\u003eThis WordPress plugin provides a shortcode mechanism to create Graphviz graphics within blogs, including image map generation and most other Graphviz features.\u003c/p\u003e\\n\u003ch4\u003eHow to use TFO Graphviz\u003c/h4\u003e\\n\u003cp\u003eThe shortcode syntax is:\u003c/p\u003e\\n\u003cpre\u003e\u003ccode\u003e[graphviz \u003coptions\u003e]\\n \u003cDOT code\u003e\\n[/graphviz]\\n\u003c/code\u003e\u003c/pre\u003e\\n\u003cp\u003eWhere \u003ccode\u003e\u003coptions\u003e\u003c/code\u003e is anything from this list. All are entirely optional:\u003c/p\u003e\\n\u003cul\u003e\\n\u003cli\u003e\\n\u003cp\u003e\u003ccode\u003eclass=\\\"\u003c/code\u003e\u003cem\u003e\u003ccss_class\u003e\u003c/em\u003e\u003ccode\u003e\\\"\u003c/code\u003e\u003c/p\u003e\\n\u003cp\u003eAdds an extra CSS class name (or names) to the \u003ccode\u003eimg\u003c/code\u003e tag of the rendered graph. This is in addition to the \u003ccode\u003egraphviz\u003c/code\u003e class that is already applied.\u003c/p\u003e\\n\u003c/li\u003e\\n\u003cli\u003e\\n\u003cp\u003e\u003ccode\u003eemitjs=\\\"yes|no\\\"\u003c/code\u003e\u003c/p\u003e\\n\u003cp\u003eOverride the global setting that controls whether JavaScript is emitted as necessary. Typically this JavaScript is only produced when rendering SVG output and is intended to ensure SVG images work on most browsers. However this can sometimes be undesirable and thus this option gives some control over this.\u003c/p\u003e\\n\u003c/li\u003e\\n\u003cli\u003e\\n\u003cp\u003e\u003ccode\u003eheight=\\\"\u003c/code\u003e\u003cem\u003e\u003cimage_height\u003e\u003c/em\u003e\u003ccode\u003e\\\"\u003c/code\u003e\u003c/p\u003e\\n\u003cp\u003eAdds a \u003ccode\u003eheight\u003c/code\u003e attribute to the image tags to enable control of the image rendering. This is useful for making sure the graphic fits into a certain space and works well for SVG rendered graphs.\u003c/p\u003e\\n\u003c/li\u003e\\n\u003cli\u003e\\n\u003cp\u003e\u003ccode\u003ehref=\\\"self|\u003c/code\u003e\u003cem\u003e\u003cURL\u003e\u003c/em\u003e\u003ccode\u003e\\\"\u003c/code\u003e\u003c/p\u003e\\n\u003cp\u003eEncompasses the generated image with a link either to the image itself (with the \u003ccode\u003eself\u003c/code\u003e value) or to the provided URL. If the option is empty (for example, \u003ccode\u003ehref=\\\"\\\"\u003c/code\u003e) then no link is generated. This is the default.\u003c/p\u003e\\n\u003c/li\u003e\\n\u003cli\u003e\\n\u003cp\u003e\u003ccode\u003eid=\\\"\u003c/code\u003e\u003cem\u003e\u003cid\u003e\u003c/em\u003e\u003ccode\u003e\\\"\u003c/code\u003e\u003c/p\u003e\\n\u003cp\u003eProvides the identifier used to link the generated image to an image map. If you use the \u003ccode\u003esimple\u003c/code\u003e option then it also provides the name of the generated DOT graph container (since Graphviz uses this to generate the image map). If not given then an identifier is generated with the form \u003ccode\u003etfo_graphviz_N\u003c/code\u003e where \u003cem\u003eN\u003c/em\u003e is an integer that starts at one when the plugin is loaded and is incremented with use.\u003c/p\u003e\\n\u003c/li\u003e\\n\u003cli\u003e\\n\u003cp\u003e\u003ccode\u003eimap=\\\"yes|no\\\"\u003c/code\u003e\u003c/p\u003e\\n\u003cp\u003eGraphviz can generate image maps using any URL’s given in the DOT code so that clicking on objects in the resultant image will direct a web browser to a new page. The effect of this option is to both instruct Graphviz to generate a client-side image map and to also insert that map into the generated HTML. It will use the \u003ccode\u003eid\u003c/code\u003e value as the name of the map (see the \u003ccode\u003eid\u003c/code\u003e option for details). \u003ccode\u003eimap\u003c/code\u003e defaults to \u003ccode\u003eno\u003c/code\u003e.\u003c/p\u003e\\n\u003cp\u003eTake note that the \u003ccode\u003eid\u003c/code\u003e value specified in the shortcode tag must match the name of the graph inside your DOT; the HTML for the image map is generated by Graphviz using the name of the graph as the map id and name. This plugin uses the \u003ccode\u003eid\u003c/code\u003e specified in the shortcode tag to link the image to the map and thus these values need to match.\u003c/p\u003e\\n\u003cp\u003eFor example, note that \u003ccode\u003emymap\u003c/code\u003e is both the \u003ccode\u003eid\u003c/code\u003e and the graph name:\u003c/p\u003e\\n\u003cpre\u003e\u003ccode\u003e[graphviz imap=\\\"yes\\\" title=\\\"This is my map\\\" id=\\\"mymap\\\"]\\ndigraph mymap {\\n input[shape=\\\"box\\\", style=\\\"rounded\\\", label=\\\"My label\\\", URL=\\\"/myurl\\\"];\\n}\\n[/graphviz]\\n\u003c/code\u003e\u003c/pre\u003e\\n\u003cp\u003eIf you do not give the graph any name at all the results are undefined. Some versions of Graphviz use the string \u003ccode\u003e%3\u003c/code\u003e as the identifier in the map but this may not be universally true.\u003c/p\u003e\\n\u003c/li\u003e\\n\u003cli\u003e\\n\u003cp\u003e\u003ccode\u003elang=\\\"\u003cdot|neato|twopi|circo|fdp\u003e\\\"\u003c/code\u003e\u003c/p\u003e\\n\u003cp\u003eSpecifies the particular Graphviz interpreter to use. The options are \u003ccode\u003edot\u003c/code\u003e, \u003ccode\u003eneato\u003c/code\u003e, \u003ccode\u003etwopi\u003c/code\u003e, \u003ccode\u003ecirco\u003c/code\u003e and \u003ccode\u003efdp\u003c/code\u003e. The default is \u003ccode\u003edot\u003c/code\u003e.\u003c/p\u003e\\n\u003c/li\u003e\\n\u003cli\u003e\\n\u003cp\u003e\u003ccode\u003eoutput=\\\"\u003cpng|gif|jpg|svg\u003e\\\"\u003c/code\u003e\u003c/p\u003e\\n\u003cp\u003eIndicates the desired image format. Defaults to \u003ccode\u003epng\u003c/code\u003e.\u003c/p\u003e\\n\u003c/li\u003e\\n\u003cli\u003e\\n\u003cp\u003e\u003ccode\u003esimple=\\\"yes|no\\\"\u003c/code\u003e\u003c/p\u003e\\n\u003cp\u003eThe \u003ccode\u003esimple\u003c/code\u003e option provides a very basic DOT wrapper around your code such that the following is possible:\u003c/p\u003e\\n\u003cpre\u003e\u003ccode\u003e[graphviz simple=\\\"yes\\\"] a -\u003e b -\u003e c; [/graphviz]\\n\u003c/code\u003e\u003c/pre\u003e\\n\u003cp\u003eThe generated code would look like:\u003c/p\u003e\\n\u003cpre\u003e\u003ccode\u003edigraph tfo_graphviz_1 {\\n a -\u003e b -\u003e c;\\n}\\n\u003c/code\u003e\u003c/pre\u003e\\n\u003cp\u003eSee the \u003ccode\u003eid\u003c/code\u003e option for a description of how the name of the \u003ccode\u003edigraph\u003c/code\u003e is created. \u003ccode\u003esimple\u003c/code\u003e defaults to \u003ccode\u003eno\u003c/code\u003e.\u003c/p\u003e\\n\u003c/li\u003e\\n\u003cli\u003e\\n\u003cp\u003e\u003ccode\u003etitle=\\\"\u003c/code\u003e\u003cem\u003e\u003ctitle\u003e\u003c/em\u003e\u003ccode\u003e\\\"\u003c/code\u003e\u003c/p\u003e\\n\u003cp\u003eIndicates the title of the image. This is used in the \u003ccode\u003ealt\u003c/code\u003e and \u003ccode\u003etitle\u003c/code\u003e attributes of the image reference. This defaults to an empty string. Note that image maps may indicate a \u003ccode\u003etitle\u003c/code\u003e string which will appear in tool-tips.\u003c/p\u003e\\n\u003c/li\u003e\\n\u003cli\u003e\\n\u003cp\u003e\u003ccode\u003ewidth=\\\"\u003c/code\u003e\u003cem\u003e\u003cimage_width\u003e\u003c/em\u003e\u003ccode\u003e\\\"\u003c/code\u003e\u003c/p\u003e\\n\u003cp\u003eAdds a \u003ccode\u003ewidth\u003c/code\u003e attribute to the image tags to enable control of the image rendering. This is useful for making sure the graphic fits into a certain space and works well for SVG rendered graphs.\u003c/p\u003e\\n\u003c/li\u003e\\n\u003cli\u003e\\n\u003cp\u003e\u003ccode\u003emethod=\\\"\u003c/code\u003e\u003cem\u003e\u003cGraphviz|Graphlib_Dot|PHP\u003e\u003c/em\u003e`”\u003c/p\u003e\\n\u003cp\u003eOverrides the configured output generation method to use the one indicated. This is useful when the mechanism normally in use does not support a specific feature, or when developing new methods. Note that since this does not have the same tests that the settings page has it may fail in mysterious ways without letting you know that it did.\u003c/p\u003e\\n\u003cp\u003eIn particular, note that the \u003ccode\u003eGraphlib_Dot\u003c/code\u003e method is \u003cem\u003every\u003c/em\u003e experimental at the moment.\u003c/p\u003e\\n\u003c/li\u003e\\n\u003c/ul\u003e\\n\",\"downloaded\":4438,\"faq\":\"\\n\u003ch4\u003eWhat is Graphviz?\u003c/h4\u003e\\n\u003cp\u003e\\n\u003cp\u003e\u003ca href=\\\"http://www.graphviz.org/\\\" rel=\\\"nofollow ugc\\\"\u003eGraphviz\u003c/a\u003e is a way of generating visualisations of [structural relationships between objects. Almost any kind of diagram where [something \u003cem\u003econnects\u003c/em\u003e to something else can be drawn and automatically laid [out using the language DOT.\u003c/p\u003e\\n\u003c/p\u003e\\n\u003ch4\u003eHow do I use this plugin?\u003c/h4\u003e\\n\u003cp\u003e\\n\u003cp\u003eUse the \u003ccode\u003e[graphviz]\u003c/code\u003e shortcode. Details are in the \u003cem\u003eDescription\u003c/em\u003e section.\u003c/p\u003e\\n\u003c/p\u003e\\n\u003ch4\u003eHow to I write DOT?\u003c/h4\u003e\\n\u003cp\u003e\\n\u003cp\u003eThe online documentation for \u003ca href=\\\"http://www.graphviz.org/\\\" rel=\\\"nofollow ugc\\\"\u003eGraphviz\u003c/a\u003e is terse and not especially helpful, in particular the \u003ca href=\\\"http://www.graphviz.org/doc/info/lang.html\\\" rel=\\\"nofollow ugc\\\"\u003eDOT language\u003c/a\u003e page is only helpful if you happen to be able to read an approximation of \u003ca href=\\\"http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form\\\" rel=\\\"nofollow ugc\\\"\u003eBNF\u003c/a\u003e.\u003c/p\u003e\\n\u003cp\u003eThere are however several other introductions to Graphviz and DOT, including \u003ca href=\\\"http://linuxdevcenter.com/pub/a/linux/2004/05/06/graphviz_dot.html\\\" rel=\\\"nofollow ugc\\\"\u003ean excerpt on the O\u0026#8217;Reilly LinuxDevCenter.com site\u003c/a\u003e. Another approach would be to look at the examples in the \u003ca href=\\\"http://www.graphviz.org/Gallery.php\\\" rel=\\\"nofollow ugc\\\"\u003eGraphviz gallery\u003c/a\u003e.\u003c/p\u003e\\n\u003cp\u003eUsers should note that DOT syntax varies between Graphviz processors and also between versions of those processors. If in doubt, find an example and experiment with it.\u003c/p\u003e\\n\u003c/p\u003e\\n\u003ch4\u003eWhere can I see examples?\u003c/h4\u003e\\n\u003cp\u003e\\n\u003cul\u003e\\n\u003cli\u003e\u003ca href=\\\"http://blog.flirble.org/2010/11/12/graphviz-demo/\\\" rel=\\\"nofollow ugc\\\"\u003ehttp://blog.flirble.org/2010/11/12/graphviz-demo/\u003c/a\u003e\u003c/li\u003e\\n\u003cli\u003e\u003ca href=\\\"http://blog.flirble.org/2015/11/15/adding-svg-support-tfo-graphviz/\\\" rel=\\\"nofollow ugc\\\"\u003ehttp://blog.flirble.org/2015/11/15/adding-svg-support-tfo-graphviz/\u003c/a\u003e\u003c/li\u003e\\n\u003cli\u003e\u003ca href=\\\"http://blog.flirble.org/2019/06/22/gv-example-state-machine/\\\" rel=\\\"nofollow ugc\\\"\u003ehttp://blog.flirble.org/2019/06/22/gv-example-state-machine/\u003c/a\u003e\u003c/li\u003e\\n\u003cli\u003e\u003ca href=\\\"http://blog.flirble.org/2019/06/22/gv-example-various-graphs/\\\" rel=\\\"nofollow ugc\\\"\u003ehttp://blog.flirble.org/2019/06/22/gv-example-various-graphs/\u003c/a\u003e\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003c/p\u003e\\n\u003ch4\u003eCan I manipulate the rendered graph using CSS in my WordPress theme?\u003c/h4\u003e\\n\u003cp\u003e\\n\u003cp\u003eThe \u003ccode\u003eimg\u003c/code\u003e elements are tagged with \u0026#8216;\u003ccode\u003eclass=\\\"graphviz\\\"\u003c/code\u003e\u0026#8216;. Additionally, you can add \u003ccode\u003eclass=\\\"myclass\\\"\u003c/code\u003e to the shortcode to add additional classes to the \u003ccode\u003eimg\u003c/code\u003e tag.\u003c/p\u003e\\n\u003c/p\u003e\\n\u003ch4\u003eHow can I make my graph have a transparent background?\u003c/h4\u003e\\n\u003cp\u003e\\n\u003cp\u003eAdd the tag \u003ccode\u003ebgcolor=\\\"transparent\\\"\u003c/code\u003e to the root graph node. For example placing \u003ccode\u003egraph [bgcolor=\\\"transparent\\\"]\u003c/code\u003e near the top like this:\u003c/p\u003e\\n\u003cpre\u003e\u003ccode\u003e[graphviz]\\ndigraph test {\\n graph [bgcolor=\\\"transparent\\\"]\\n a1 -\u0026gt; a2 -\u0026gt; a3 -\u0026gt; a1;\\n}\\n[/graphviz]\\n\u003c/code\u003e\u003c/pre\u003e\\n\u003c/p\u003e\\n\u003ch4\u003eNothing is being rendered, maybe my DOT is broken?\u003c/h4\u003e\\n\u003cp\u003e\\n\u003cp\u003eIf you\u0026#8217;re using a local Graphviz renderer then errors from Graphviz should be presented where you expect the graph to appear. Note that because of how WordPress submits content to plugins the line numbering will not always match what you expect.\u003c/p\u003e\\n\u003cp\u003eThe error message when using the \u003ccode\u003edot\u003c/code\u003e binary will contain the command line used as well as a line-numbered copy of the DOT that was used.\u003c/p\u003e\\n\u003c/p\u003e\\n\u003ch4\u003eI\u0026#8217;m getting strange errors that make no sense, what gives?\u003c/h4\u003e\\n\u003cp\u003e\\n\u003cp\u003eWordPress encodes HTML entities inside the shortcode block which this plugin attempts to demangle.\u003c/p\u003e\\n\u003cp\u003eUnfortunately WordPress can also try to do smart character replacement, such as \u0026#8220;\u0026#8230;\u0026#8221; into a UNICODE ellipsis character. The Graphviz plugin contains a mapping of many of these back to their ASCII equivalents, but it may not be complete. Let us know if you think this is breaking your DOT. It\u0026#8217;s also possible that non-ASCII7 characters do strange things too.\u003c/p\u003e\\n\u003cp\u003eAdding \u003ccode\u003edefine(\\\"TFO_GV_DEBUG\\\", true)\u003c/code\u003e to wp_config.php will cause the plugin to create some diagnostic files in your system \u003ccode\u003etmp\u003c/code\u003e directory. The file \u003ccode\u003epre-N.dot\u003c/code\u003e is the contents of the DOT as given to the plugin by WordPress, \u003ccode\u003epost-N.dot\u003c/code\u003e is the results of the plugin attempting to demangle it. The \u003ccode\u003eN\u003c/code\u003e is a number that is incremented for each shortcode section interpreted. The plugin does not clean these files up.\u003c/p\u003e\\n\u003c/p\u003e\\n\u003ch4\u003eHow do I install the Graphviz program (not this plugin) locally?\u003c/h4\u003e\\n\u003cp\u003e\\n\u003cp\u003eThis depends on your local operating system. You will find some details at http://www.graphviz.org/Download.php but many systems also have it in their own package management system, for example this is package \u003ccode\u003egraphviz\u003c/code\u003e on Debian, Ubuntu and Fedora systems.\u003c/p\u003e\\n\u003cp\u003eThere are currently two ways to use a local installation of Graphviz. The settings page will only show options for those methods that are actually available and configured correctly.\u003c/p\u003e\\n\u003col\u003e\\n\u003cli\u003eUsing a local Graphviz installation and the \u003ccode\u003edot\u003c/code\u003e binary. You configure the path to this binary on the admin settings page of the plugin.\u003c/li\u003e\\n\u003cli\u003eUsing PHP bindings to the Graphviz library. This requires that \u003ccode\u003egv.php\u003c/code\u003e is available.\u003c/li\u003e\\n\u003c/ol\u003e\\n\u003c/p\u003e\\n\u003ch4\u003eI\u0026#8217;ve installed the PHP bindings but Graphviz doesn\u0026#8217;t work!\u003c/h4\u003e\\n\u003cp\u003e\\n\u003cp\u003eThis requires that \u003ccode\u003egv.php\u003c/code\u003e is available and that the associated module is either already loaded or loadable with \u003ccode\u003edl()\u003c/code\u003e.\u003c/p\u003e\\n\u003cp\u003eThe use of \u003ccode\u003edl()\u003c/code\u003e is often disabled in \u003ccode\u003ephp.ini\u003c/code\u003e (since it can have security implications) and doesn\u0026#8217;t work on multithreaded webservers; it\u0026#8217;s entirely disabled in modern Apache2 httpd modules.\u003c/p\u003e\\n\u003cp\u003eFor these cases you must ensure the library is loaded with an entry like \u003ccode\u003eextension=gv.so\u003c/code\u003e or similar somewhere in the PHP configuration.\u003c/p\u003e\\n\u003c/p\u003e\\n\\n\",\"homepage\":\"http://blog.flirble.org/projects/graphviz/\",\"icons\":[{\"type\":\"1x\",\"url\":\"https://ps.w.org/tfo-graphviz/assets/icon-128x128.png?rev=2110976\"},{\"type\":\"2x\",\"url\":\"https://ps.w.org/tfo-graphviz/assets/icon-256x256.png?rev=2110976\"}],\"installation\":\"\u003cp\u003eInstallation is simple. Either install from directly within WordPress or:\u003c/p\u003e\\n\u003col\u003e\\n\u003cli\u003eDownload and unzip the plugin to the \u003ccode\u003e/wp-content/plugins/tfo-graphviz\u003c/code\u003e directory within your WordPress installation.\u003c/li\u003e\\n\u003cli\u003eMake the directory \u003ccode\u003e/wp-content/tfo-graphviz\u003c/code\u003e and make it writable by the web server \u0026#8211; this is where generated images and image maps go.\u003c/li\u003e\\n\u003cli\u003eActivate the plugin through the \u0026#8216;Plugins\u0026#8217; menu in WordPress.\u003c/li\u003e\\n\u003cli\u003eChoose a generation method on the plugin settings page.\u003c/li\u003e\\n\u003cli\u003eUse the \u003ccode\u003e[graphviz]\u003c/code\u003e shortcode to generate graphs.\u003c/li\u003e\\n\u003c/ol\u003e\\n\u003cp\u003eYou need access to a Graphviz renderer:\u003c/p\u003e\\n\u003cul\u003e\\n\u003cli\u003eBy using a local installation of Graphviz and the \u003ccode\u003edot\u003c/code\u003e binary.\u003c/li\u003e\\n\u003cli\u003eBy using a local installation and PHP bindings to the library.\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003cp\u003eSee the FAQ for more details on these options and http://www.graphviz.org/Download.php for details on installing Graphviz on your web server.\u003c/p\u003e\\n\",\"internal_ranking\":0,\"languages\":[],\"last_seen\":{\"timestamp\":1765174116.269,\"timezone\":\"UTC\"},\"last_updated\":{\"timestamp\":1561328220,\"timezone\":\"UTC\"},\"last_wordpress_compatible_version\":\"5.2.23\",\"latest_num_ratings\":1,\"latest_rating\":5,\"latest_ratings\":{\"1\":0,\"2\":0,\"3\":0,\"4\":0,\"5\":1,\"links\":{\"1\":{\"url\":\"https://wordpress.org/support/plugin/tfo-graphviz/reviews/?filter=1\",\"alt\":\"View all 0 one star reviews\"},\"2\":{\"url\":\"https://wordpress.org/support/plugin/tfo-graphviz/reviews/?filter=2\",\"alt\":\"View all 0 two star reviews\"},\"3\":{\"url\":\"https://wordpress.org/support/plugin/tfo-graphviz/reviews/?filter=3\",\"alt\":\"View all 0 three star reviews\"},\"4\":{\"url\":\"https://wordpress.org/support/plugin/tfo-graphviz/reviews/?filter=4\",\"alt\":\"View all 0 four star reviews\"},\"5\":{\"url\":\"https://wordpress.org/support/plugin/tfo-graphviz/reviews/?filter=5\",\"alt\":\"View all 1 five star reviews\"},\"all\":{\"url\":\"https://wordpress.org/support/plugin/tfo-graphviz/reviews/\",\"alt\":\"View all 1 reviews\"}}},\"minimum_php_version\":\"f\",\"minimum_wordpress_version\":\"4.2.0\",\"name\":\"TFO Graphviz\",\"num_ratings\":2,\"pluginid\":\"tfo-graphviz\",\"rating\":5,\"ratings\":{\"1\":0,\"2\":0,\"3\":0,\"4\":0,\"5\":2,\"links\":{\"1\":{\"url\":\"https://wordpress.org/support/plugin/tfo-graphviz/reviews/?filter=1\",\"alt\":\"View all 0 one star reviews\"},\"2\":{\"url\":\"https://wordpress.org/support/plugin/tfo-graphviz/reviews/?filter=2\",\"alt\":\"View all 0 two star reviews\"},\"3\":{\"url\":\"https://wordpress.org/support/plugin/tfo-graphviz/reviews/?filter=3\",\"alt\":\"View all 0 three star reviews\"},\"4\":{\"url\":\"https://wordpress.org/support/plugin/tfo-graphviz/reviews/?filter=4\",\"alt\":\"View all 0 four star reviews\"},\"5\":{\"url\":\"https://wordpress.org/support/plugin/tfo-graphviz/reviews/?filter=5\",\"alt\":\"View all 2 five star reviews\"},\"all\":{\"url\":\"https://wordpress.org/support/plugin/tfo-graphviz/reviews/\",\"alt\":\"View all 2 reviews\"}}},\"reviews\":[],\"screenshots\":\"\u003col\u003e\u003cli\u003e\u003ca href=\\\"https://ps.w.org/tfo-graphviz/assets/screenshot-1.png?rev=2110965\\\"\u003e\u003cimg src=\\\"https://ps.w.org/tfo-graphviz/assets/screenshot-1.png?rev=2110965\\\" alt=\\\"Virtual Disk Stack\\\" loading=\\\"lazy\\\" decoding=\\\"async\\\" fetchpriority=\\\"low\\\"\u003e\u003c/a\u003e\u003cp\u003eVirtual Disk Stack\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\\\"https://ps.w.org/tfo-graphviz/assets/screenshot-2.png?rev=2110965\\\"\u003e\u003cimg src=\\\"https://ps.w.org/tfo-graphviz/assets/screenshot-2.png?rev=2110965\\\" alt=\\\"State machine\\\" loading=\\\"lazy\\\" decoding=\\\"async\\\" fetchpriority=\\\"low\\\"\u003e\u003c/a\u003e\u003cp\u003eState machine\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\\\"https://ps.w.org/tfo-graphviz/assets/screenshot-3.png?rev=2110965\\\"\u003e\u003cimg src=\\\"https://ps.w.org/tfo-graphviz/assets/screenshot-3.png?rev=2110965\\\" alt=\\\"Example page\\\" loading=\\\"lazy\\\" decoding=\\\"async\\\" fetchpriority=\\\"low\\\"\u003e\u003c/a\u003e\u003cp\u003eExample page\u003c/p\u003e\u003c/li\u003e\u003c/ol\u003e\",\"short_description\":\"Generates Graphviz graphics using shortcodes. Supports almost all Graphviz features (depending on the generation method in use.)\",\"support_threads\":0,\"support_threads_resolved\":0,\"tags\":[{\"slug\":\"network\",\"label\":\"network\",\"count\":129},{\"slug\":\"graph\",\"label\":\"graph\",\"count\":52},{\"slug\":\"diagram\",\"label\":\"diagram\",\"count\":12},{\"slug\":\"graphviz\",\"label\":\"graphviz\",\"count\":2},{\"slug\":\"flirble\",\"label\":\"flirble\",\"count\":1}],\"tags_count\":196,\"languages_count\":0,\"age_days\":5565.6677088225115,\"installs_per_rating\":20,\"downloads_per_rating\":2219,\"installs_per_day\":0.007186918460222361,\"downloads_per_day\":0.7973886031616709,\"reviews_per_day\":0.000359345923011118,\"activation_rate\":0.009013068949977467,\"version\":\"1.19\",\"marketplace\":\"wordpress\",\"marketplace_url\":\"https://wordpress.org/plugins/tfo-graphviz\",\"price\":null,\"wordpress_link\":{\"alt\":\"WordPress\",\"url\":\"https://wordpress.org/plugins/tfo-graphviz\"}}","shortDescription":"Generates Graphviz graphics using shortcodes. Supports almost all Graphviz features (depending on the generation method in use.)","version":"1.19","homepage":"http://blog.flirble.org/projects/graphviz/","wordpressUrl":"https://wordpress.org/plugins/tfo-graphviz","authorName":"Chris Luke","authorProfileUrl":"https://profiles.wordpress.org/chrisy/","marketplace":"wordpress","marketplaceUrl":"https://wordpress.org/plugins/tfo-graphviz","price":null,"rating":5,"numRatings":2,"activeInstalls":40,"downloaded":4438,"lastUpdatedTimestamp":1561328220,"minimumWordpressVersion":"4.2.0","testedWordpressVersion":"5.2.23","minimumPhpVersion":"f","supportThreads":0,"supportThreadsResolved":0,"stringifyAlternativesData":"[]","renderedAt":1771257690041},"__N_SSP":true},"page":"/plugins/[id]","query":{"id":"tfo-graphviz"},"buildId":"_KZ7CPNwJKw2QmxkqARTU","isFallback":false,"isExperimentalCompile":false,"gssp":true,"scriptLoader":[]}</script></body></html>