[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fSvibSSrnnySA0CMtgH4wqvGgYeyphYMbLvkEWVuF3N4":3},{"slug":4,"display_name":5,"profile_url":6,"plugin_count":7,"total_installs":8,"avg_security_score":9,"avg_patch_time_days":10,"trust_score":11,"computed_at":12,"plugins":13},"tenandtwo","Ken McCabe","https:\u002F\u002Fprofiles.wordpress.org\u002Ftenandtwo\u002F",1,10,92,30,88,"2026-04-05T23:35:25.180Z",[14],{"slug":15,"name":16,"version":17,"author":5,"author_profile":6,"description":18,"short_description":19,"active_installs":8,"downloaded":20,"rating":21,"num_ratings":21,"last_updated":22,"tested_up_to":23,"requires_at_least":24,"requires_php":25,"tags":26,"homepage":32,"download_link":33,"security_score":9,"vuln_count":21,"unpatched_count":21,"last_vuln_date":34,"fetched_at":35},"tenandtwo-xslt-processor","Ten&Two XSLT Processor","1.0.7","\u003Cp>The Ten&Two XSLT Processor plugin brings the power of PHP’s XSL extension to WordPress.  Once enabled, the plugin creates three (3) shortcodes – \u003Ccode>[xslt_transform_xml\u002F]\u003C\u002Fcode>, \u003Ccode>[xslt_select_xml\u002F]\u003C\u002Fcode>, and \u003Ccode>[xslt_select_csv\u002F]\u003C\u002Fcode> – which can be used separately or in tandem to enrich your site with content from XML and CSV sources.  The plugin also enables two (2) custom post types – \u003Ccode>XSL Stylesheets\u003C\u002Fcode> and \u003Ccode>XML Documents\u003C\u002Fcode> – for managing and validating sources within WP Admin.\u003C\u002Fp>\n\u003Cp>Detailed documentation and sample code can be found at https:\u002F\u002Fplugins.tenandtwo.com\u002F\u003C\u002Fp>\n\u003Ch3>Custom Post Types\u003C\u002Fh3>\n\u003Cp>The XSLT Processor plugin provides two (2) custom post types for managing sources within WordPress – \u003Ccode>XSL Stylesheets\u003C\u002Fcode> and \u003Ccode>XML Documents\u003C\u002Fcode>.  Both types include basic syntax validation.  XML Documents can be validated further using DTD, XSD, or RNG.  Both types are enabled in Settings > XSLT Processor Settings > Activate Content Types.\u003C\u002Fp>\n\u003Ch3>Shortcode : [xslt_transform_xml\u002F]\u003C\u002Fh3>\n\u003Cpre>\u003Ccode>[xslt_transform_xml\u002F] is the plugin's primary function.  This shortcode processes XML data using an XSL stylesheet, and then outputs the result as HTML, more XML, or as simple TEXT.\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cul>\n\u003Cli>\u003Ccode>[xslt_transform_xml xsl=\"{file|url|id|slug}\" xml=\"{file|url|id|slug}\" \u002F]\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>[xslt_transform_xml xsl=\"{file|url|id|slug}\"]\u003CDATA>...\u003C\u002FDATA>[\u002Fxslt_transform_xml]\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>If either the \u003Ccode>xsl\u003C\u002Fcode> or \u003Ccode>xml\u003C\u002Fcode> parameter is left unspecified, defaults are used.  The default XML value is \u003Ccode>\u003CNODATA\u002F>\u003C\u002Fcode>.  The default XSL stylesheet prints all of the incoming data as HTML.  If extra attributes are specified in the shortcode – eg, \u003Ccode>mykey=\"myval\"\u003C\u002Fcode> – those keys\u002Fvalues are passed along as parameters to the stylesheet – \u003Ccode>\u003Cxsl:param name=\"mykey\"\u002F>\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ch3>Shortcode : [xslt_select_xml\u002F]\u003C\u002Fh3>\n\u003Cpre>\u003Ccode>[xslt_select_xml\u002F] is a helper function.  It reads XML and returns a selection of the data, based on a supplied XPath expression.  There are two (2) options for specifying the XPath.  First, using the `select` attribute or, second, using the body of the shortcode.  Complex select statements with quotes, square brackets or other special syntax, should use the second pattern :\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cul>\n\u003Cli>\u003Ccode>[xslt_select_xml xml=\"{file|url|id|slug}\" select=\"{XPath}\" \u002F]\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>[xslt_select_xml xml=\"{file|url|id|slug}\"]{XPath}[\u002Fxslt_select_xml]\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>If the XPath select parameter is left unspecified, the default \u003Ccode>\u002F\u003C\u002Fcode> is used, which returns the entire document.  The default output is \u003Ccode>format=\"xml\"\u003C\u002Fcode>.  If \u003Ccode>format=\"json\"\u003C\u002Fcode> is specified, the result is encoded as a JSON string.\u003C\u002Fp>\n\u003Ch3>Shortcode : [xslt_select_csv\u002F]\u003C\u002Fh3>\n\u003Cpre>\u003Ccode>[xslt_select_csv\u002F] is a helper function for converting CSV file data to XML.  The result can be output directly as an HTML `\u003Ctable>`, or the result can be passed to `[xslt_transform_xml\u002F]` for further processing.\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cul>\n\u003Cli>\u003Ccode>[xslt_select_csv csv=\"{file|url}\" \u002F]\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>[xslt_select_csv]{csv,data}[\u002Fxslt_select_csv]\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Three (3) parameters – \u003Ccode>separator\u003C\u002Fcode>, \u003Ccode>enclosure\u003C\u002Fcode>, \u003Ccode>escape\u003C\u002Fcode> – control reading the input.  See PHP’s \u003Ccode>fgetcsv()\u003C\u002Fcode> function for details.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>[xslt_select_csv separator=\",\" enclosure=\"\\\"\" escape=\"\\\\\" \u002F]\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Two (2) parameters – \u003Ccode>key_row\u003C\u002Fcode>, \u003Ccode>col\u003C\u002Fcode> – control writing columns to the output.  The \u003Ccode>key_row\u003C\u002Fcode> attribute is optional, but allows labels from that row to be used in \u003Ccode>col\u003C\u002Fcode> and \u003Ccode>key_col\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>[xslt_select_csv key_row=\"{num}\" col=\"{num|letter|label}+\" \u002F]\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Three (3) parameters – \u003Ccode>row\u003C\u002Fcode>, \u003Ccode>key_col\u003C\u002Fcode>, \u003Ccode>key\u003C\u002Fcode> – control writing rows to the output.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>[xslt_select_csv row=\"{num}+\" \u002F]\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>[xslt_select_csv key_col=\"{num|letter|label}\" key=\"{val}+\" \u002F]\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Nested Shortcodes\u003C\u002Fh3>\n\u003Cp>Combine \u003Ccode>[xslt_transform_xml]\u003C\u002Fcode> with \u003Ccode>[xslt_select_xml]\u003C\u002Fcode> :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>[xslt_transform_xml][xslt_select_xml\u002F][\u002Fxslt_transform_xml]\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Combine \u003Ccode>[xslt_transform_xml]\u003C\u002Fcode> with \u003Ccode>[xslt_select_csv]\u003C\u002Fcode> :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>[xslt_transform_xml][xslt_select_csv\u002F][\u002Fxslt_transform_xml]\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Combine \u003Ccode>[xslt_transform_xml]\u003C\u002Fcode> with itself using \u003Ccode>[\u002Fxslt_transform_alias]\u003C\u002Fcode> (WP does not support nested shortcodes with identical names) :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>[xslt_transform_alias][xslt_transform_xml\u002F][\u002Fxslt_transform_alias]\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Combine multiple shortcodes\u002Fsources to create a single \u003Ccode>XML Document\u003C\u002Fcode> (see Custom Post Types above) :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>\u003CDATA>\u003CPART1>[xslt_select_xml xml=\"f1.xml\" \u002F]\u003C\u002FPART1>\u003CPART2>[xslt_select_xml xml=\"f2.xml\" \u002F]\u003C\u002FPART2>\u003C\u002FDATA>\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Cache Parameters\u003C\u002Fh3>\n\u003Cp>When a shortcode specifies a remote file – \u003Ccode>xml=\"{url}\"\u003C\u002Fcode> or \u003Ccode>csv=\"{url}\"\u003C\u002Fcode> – that source is cached locally using WP Transients. The default cache duration is set in the XSLT Processor Settings.  To override the default, add \u003Ccode>cache=\"{minutes}\"\u003C\u002Fcode> to the shortcode.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>[xslt_transform_xml xml=\"{url}\" cache=\"{minutes}\" \u002F]\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>[xslt_select_xml xml=\"{url}\" cache=\"{minutes}\" \u002F]\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>[xslt_select_csv csv=\"{url}\" cache=\"{minutes}\" \u002F]\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Namespace Parameters\u003C\u002Fh3>\n\u003Cp>Within \u003Ccode>[xslt_select_xml\u002F]\u003C\u002Fcode> the plugin provides two (2) methods for handling XML containing namespaces.  The first is to add \u003Ccode>strip-namespaces\u003C\u002Fcode> to the shortcode.  The second method is to add the needed prefixes and namespace URIs using \u003Ccode>xslns\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>[xslt_select_xml xml=\"{file}\" strip-namespaces=\"yes\" select=\"\u002F\u002Fnode\" \u002F]\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>[xslt_select_xml xml=\"{file}\" xmlns=\"ns1\" ns1=\"{namespace-uri-1}\" select=\"\u002F\u002Fns1:node\" \u002F]\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>[xslt_select_xml xml=\"{file}\" xmlns=\"ns1 ns2\" ns1=\"{namespace-uri-1}\" ns2=\"{namespace-uri-2}\" select=\"\u002F\u002Fns1:node\u002Fns2:node\" \u002F]\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>WP-CLI\u003C\u002Fh3>\n\u003Cp>All three (3) shortcodes have command-line equivalents. They can be used, for instance, to run quick tests. Or they can be used, by piping the outputs into files, to pre-generate results.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\n\u003Cpre>\u003Ccode>wp xslt transform_xml\n    --xsl='{file|url|id|slug}'\n    --xml='{file|url|id|slug}'\n    --cache='{minutes, if xsl|xml={url}}'\n    --tidy='{yes|html}' or tidy or --tidy='xml'\n    --{myparam}='{myvalue}'\n    --outfile='{filepath}'\n    --htmlentities or --htmlentities='yes'\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cpre>\u003Ccode>wp xslt select_xml\n    --xml='{file|url|id|slug}'\n    --cache='{minutes, if xml={url}}'\n    --select='{xpath}'\n    --root='{nodename|empty}'\n    --tidy='{yes|html}' or tidy or --tidy='xml'\n    --strip-namespaces='yes' or strip-namespaces\n    --strip-declaration='no'\n    --format='{xml|json}'\n    --htmlentities or --htmlentities='yes'\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cpre>\u003Ccode>wp xslt select_csv\n    --csv='{file|url}'\n    --cache='{minutes, if csv={url}}'\n    --separator=','\n    --enclosure='\\\"'\n    --escape='\\\\'\n    --key_row='{row number for column labels}'\n    --col='{return column number(s), letter(s), or label(s)}'\n    --key_col='{col number, letter, or label for key matching}'\n    --key='{value(s) for key_col matching}'\n    --row='{return row number(s)}'\n    --class='{css classname(s) for result table}'\n    --htmlentities or --htmlentities='yes'\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>XSL Stylesheets\u003C\u002Fh3>\n\u003Cp>The XSLT Processor plugin includes a number of useful XSL templates that you can include and use in your own projects. They are grouped into five files.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>date.xsl : \u003Ccode>date-format\u003C\u002Fcode>, \u003Ccode>date-microtime\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>file.xsl : \u003Ccode>file-exists-local\u003C\u002Fcode>, \u003Ccode>file-exists-remote\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>string.xsl : \u003Ccode>string-replace\u003C\u002Fcode>, \u003Ccode>string-upper\u003C\u002Fcode>, \u003Ccode>string-lower\u003C\u002Fcode>, \u003Ccode>string-title-case\u003C\u002Fcode>, \u003Ccode>string-trim\u003C\u002Fcode>, \u003Ccode>string-rtrim\u003C\u002Fcode>, \u003Ccode>string-ltrim\u003C\u002Fcode>, \u003Ccode>string-maxlength\u003C\u002Fcode>, \u003Ccode>string-maxwords\u003C\u002Fcode>, \u003Ccode>string-add-slashes\u003C\u002Fcode>, \u003Ccode>string-urlencode\u003C\u002Fcode>, \u003Ccode>string-strip-tags\u003C\u002Fcode>, \u003Ccode>string-nl2br\u003C\u002Fcode>, \u003Ccode>string-entity-decode\u003C\u002Fcode>, \u003Ccode>string-to-nodeset\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>util.xsl : \u003Ccode>util-bytsize\u003C\u002Fcode>, \u003Ccode>util-hash-data\u003C\u002Fcode>, \u003Ccode>util-print-nodes\u003C\u002Fcode>, \u003Ccode>util-print-node-names\u003C\u002Fcode>, \u003Ccode>util-super-global\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>wp.xsl : \u003Ccode>wp-select-xml\u003C\u002Fcode>, \u003Ccode>wp-select-csv\u003C\u002Fcode>, \u003Ccode>wp-post-item\u003C\u002Fcode>, \u003Ccode>wp-post-meta\u003C\u002Fcode>, \u003Ccode>wp-sanitize-title\u003C\u002Fcode>, \u003Ccode>wp-size-format\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Requirements\u003C\u002Fh3>\n\u003Cp>The Ten&Two XSLT Processor plugin relies upon PHP’s XSL extension.  If the extension is installed, the XSLT Processor Settings screen will display a message similar to the first message below.  If \u003Ccode>LIBXSLT_VERSION\u003C\u002Fcode> is undefined, all plugin options are disabled automatically and the second message is displayed.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>PHP's XSL extension is available : XSLT v1.1.32, EXSLT v1.1.32, LIBXML v2.9.4\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>PHP's XSL extension is NOT available\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The XSL extension’s requirements are detailed at php.net – https:\u002F\u002Fwww.php.net\u002Fmanual\u002Fen\u002Fbook.xsl.php\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>“This extension requires the libxml PHP extension. This means passing the –with-libxml,\u003Cbr \u002F>\n  or prior to PHP 7.4 the –enable-libxml, configuration flag, although this is implicitly\u003Cbr \u002F>\n  accomplished because libxml is enabled by default.\u003C\u002Fp>\n\u003Cp>This extension uses libxslt which can be found at » http:\u002F\u002Fxmlsoft.org\u002FXSLT\u002F. libxslt\u003Cbr \u002F>\n  version 1.1.0 or greater is required.”\u003C\u002Fp>\n\u003C\u002Fblockquote>\n","Transform and display XML from local and remote sources using PHP's XSL extension.",1885,0,"2024-08-27T15:20:00.000Z","6.5.8","5.2","7.4",[27,28,29,30,31],"csv","shortcode","xml","xsl","xslt","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Ftenandtwo-xslt-processor\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Ftenandtwo-xslt-processor.1.0.7.zip",null,"2026-03-15T15:16:48.613Z"]