{"id":2742,"date":"2008-04-01T01:56:30","date_gmt":"2008-04-01T01:56:30","guid":{"rendered":"https:\/\/wordpress.org\/plugins-wp\/jabber-feed\/"},"modified":"2010-01-24T18:45:09","modified_gmt":"2010-01-24T18:45:09","slug":"jabber-feed","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/jabber-feed\/","author":407694,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.5","stable_tag":"0.5","tested":"2.9.2","requires":"2.0","requires_php":"","requires_plugins":"","header_name":"Jabber Feed","header_author":"Jehan Hysseo","header_description":"","assets_banners_color":"","last_updated":"2010-01-24 18:45:09","external_support_url":"","external_repository_url":"","donate_link":"http:\/\/jehan.zemarmot.net\/blog\/jabber-feed\/","header_plugin_uri":"http:\/\/jehan.zemarmot.net\/blog\/jabber-feed\/","header_author_uri":"http:\/\/jehan.zemarmot.net","rating":0,"author_block_rating":0,"active_installs":0,"downloads":3873,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":[],"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":0},"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1","0.2","0.3","0.4","0.5"],"block_files":[],"assets_screenshots":{"screenshot-4.png":{"filename":"screenshot-4.png","revision":"1566845","resolution":"4","location":"plugin","width":951,"height":635},"screenshot-2.png":{"filename":"screenshot-2.png","revision":"1566845","resolution":"2","location":"plugin","width":1213,"height":590},"screenshot-3.png":{"filename":"screenshot-3.png","revision":"1566845","resolution":"3","location":"plugin","width":1033,"height":104},"screenshot-1.png":{"filename":"screenshot-1.png","revision":"1566845","resolution":"1","location":"plugin","width":1278,"height":741}},"screenshots":{"1":"The configuration page;","2":"The modified post management page;","3":"The templates in practice: I added the code <code>Subscribe to the Jabber feeds:\n&lt;?php jabber_feed_display ('posts', 'a', \"entries (jabber)\"); ?&gt; and\n&lt;?php jabber_feed_display ('comments', 'a'); ?&gt;<\/code> to the footer.php of the\ntheme (here default).","4":"The templates in practice again: I added <code>&lt;?php jabber_feed_display\n('current', 'a', 'Jabber') ?&gt;<\/code> in the single.php file of the theme (between\nthe p tag of class 'postmetadata alt' in the default theme)."}},"plugin_section":[],"plugin_tags":[17110,1159,37697,37698,17111],"plugin_category":[44],"plugin_contributors":[],"plugin_business_model":[],"class_list":["post-2742","plugin","type-plugin","status-publish","hentry","plugin_tags-jabber","plugin_tags-notification","plugin_tags-pubsub","plugin_tags-xep-0060","plugin_tags-xmpp","plugin_category-discussion-and-community","plugin_committers-jehan"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/jabber-feed.svg","icon_2x":false,"generated":true},"screenshots":[{"src":"https:\/\/ps.w.org\/jabber-feed\/trunk\/screenshot-1.png?rev=1566845","caption":"The configuration page;"},{"src":"https:\/\/ps.w.org\/jabber-feed\/trunk\/screenshot-2.png?rev=1566845","caption":"The modified post management page;"},{"src":"https:\/\/ps.w.org\/jabber-feed\/trunk\/screenshot-3.png?rev=1566845","caption":"The templates in practice: I added the code <code>Subscribe to the Jabber feeds:\n&lt;?php jabber_feed_display ('posts', 'a', \"entries (jabber)\"); ?&gt; and\n&lt;?php jabber_feed_display ('comments', 'a'); ?&gt;<\/code> to the footer.php of the\ntheme (here default)."},{"src":"https:\/\/ps.w.org\/jabber-feed\/trunk\/screenshot-4.png?rev=1566845","caption":"The templates in practice again: I added <code>&lt;?php jabber_feed_display\n('current', 'a', 'Jabber') ?&gt;<\/code> in the single.php file of the theme (between\nthe p tag of class 'postmetadata alt' in the default theme)."}],"raw_content":"<!--section=description-->\n<p>This plugin enables the blog owner to publish their posts on a xmpp pubsub\nnode. This way, anyone subscribed to this same node will be notified through\nJabber when a new post is published.<\/p>\n\n<p>It enables also to do the same with comments on separated xmpp pubsub nodes, so\nthat readers can also subscribe and get notified about new comments of a\nspecific post only if prefered.<\/p>\n\n<p>Note: this is a early version, you can try it if you are interested (there can\nbe no harm! ;-), but I will provide far better versions progressively...<\/p>\n\n<h4>Detailed Features<\/h4>\n\n<ul>\n<li>Connection with SRV records, TLS if available and known authentication\nmechanisms (in this order of preference): Digest-MD5, CramMD5, PLAIN,\nANONYMOUS.<\/li>\n<li>Posts are published on the subnode posts\/ of the given pubsub node;<\/li>\n<li>Comments are published on the subnode comments\/ with  being the id\nof the corresponding post;<\/li>\n<li>Posts, as well as comments, are deleted automatically from the associated\npubsub nodes if you delete them, disapprove them, or flag them as spam from the Wordpress website;<\/li>\n<li>Posts, as well as comments, are updated automatically on the associated\npubsub nodes if you edit them on your Wordpress website;<\/li>\n<li>Autodiscover xmpp link for all posts is automatically set on all pages,\nexcept single posts (if the 'wp_head' function is used by your theme, which is\nthe common procedure);<\/li>\n<li>Autodiscover xmpp link for comments of the current post is automatically set\non each single post (if the 'wp_head' function is used by your theme, which is\nthe common procedure);<\/li>\n<li>2 templates functions for returning or displaying different xmpp links are\nprovided for your themes.<\/li>\n<\/ul>\n\n<h3>Configuration<\/h3>\n\n<p>In the 'Jabber Feed configuration' menu, you will see the following sections:<\/p>\n\n<h4>Publishing Account<\/h4>\n\n<p>This section contains the connection parameters of the account which will be\nused to publish the field. I would personnaly advice to create a new account\njust for it (you can also use your personal account of course, anyway the plugin's\nbot will create a resource identifier unique for every connection) and to\nconfigure it to refuse any contact and communication (as noone will have to\nadd it to one's roster, except you maybe for test or debugging purpose?).\nThe fields are:<\/p>\n\n<ul>\n<li>The bot adress (full jid form: mybotname@myserveraddress);<\/li>\n<li>the password.<\/li>\n<\/ul>\n\n<h4>Connection Parameters<\/h4>\n\n<p>By default Jabber Feed can now use SRV records which is a recommended way to\nadvertize server and port from a domain name (see for instance\nhttp:\/\/dns.vanrein.org\/srv\/ for details).<\/p>\n\n<p>This is an advanced section in case your server does not use SRV AND uses a server\nwhich is not the same as the domain from the jid or a port different from the default one (5222).<\/p>\n\n<p>Hence there will be very very new cases where you will have to fill this\nsection and if you don't understand all what I say here, just don't fill\nanything here (if you fill even only one field, then it will be used instead\nof SRV and default values).<\/p>\n\n<p>The default values will be used if fields empty and no SRV is configured on\nthe Jabber server:<\/p>\n\n<ul>\n<li>the Jabber server (often the same as 'myseveraddress' of the jid);<\/li>\n<li>the Jabber port (usually 5222).<\/li>\n<\/ul>\n\n<h4>PubSub configuration<\/h4>\n\n<p>Where to publish the notifications. It can be on a separate server.<\/p>\n\n<ul>\n<li>the pubsub server;<\/li>\n<li>the root publication node;<\/li>\n<li>2 checkboxes to uncheck if you don't want to publish the posts or the comments.<\/li>\n<\/ul>\n\n<p>Note that this node does not have to exist. When you will press the \"Update\"\nbutton, the providden Jabber login and connection parameters will be tested\nand the node will be created with all its tree. If anything goes wrong, you\nwill be informed about it.<\/p>\n\n<p>The providden Jabber account can have no right to create the required post\/\nnode, but then it must be created first and publisher rights at least must\nhave been given.<\/p>\n\n<h3>Manage Posts<\/h3>\n\n<p>The page with the list of published posts have been modified. A new column\ncalled \"Jabber Feed\" will display:\n* The publication date on the node (and the last update will appear on a\nbubble when the mouse passes by);\n* 'Error on publication' when an error has occured during publication (and the\nerror text will be displayed when the mouse passes by);\n* 'Not Published' when no publication never occurred (which is simply when the post has\n been published on Wordpress before the plugin has been installed.<\/p>\n\n<h3>Todo<\/h3>\n\n<ul>\n<li><p>TTL support for DNS\/SRV records.<\/p><\/li>\n<li><p>Still need to test extensively (and if necessary improve) the right system\nin Wordpress:<\/p>\n\n<ul>\n<li>will the non-approved comments be published on the comment nodes?<\/li>\n<li>will the private posts be published?<\/li>\n<\/ul><\/li>\n<li><p>In the \"configuration\" window, I should make a detection of the\nprerequisites, gray everything if a mandatory one is not fulfilled and give an\nexplanation text.<\/p><\/li>\n<li><p>And what about internationalization?!<\/p><\/li>\n<li><p>Manage menu: with failed publication, it should be possible to retry the\npublication from this page (with multiple checkbox if possible to massively\nrun publication!).<\/p><\/li>\n<li><p>And what about an equivalent of post management for comments?! Is it\npossible (apparently not, according to Wordpress documentation)?<\/p><\/li>\n<li><p>The item should also be updated when a published post is edited.<\/p><\/li>\n<li><p>Why not add support to pages? -&gt; current work.<\/p><\/li>\n<li><p>Create the bot account as well?<\/p><\/li>\n<li><p>Why not retry to publish after a timer (let's say 1 day?) after a failure,\nwith a number maximum of tries?<\/p><\/li>\n<li><p>What could be fun: if the subscribers could be also publisher, hence\nanswering to a post by directly publishing to the node?\nBut how is a publisher identified?! No \"from\" with a pseudo in it, and data\nabout real jid accessible from admin.<\/p><\/li>\n<li><p>Improve globally the\nmessage syntax (for instance the message 'updated' and 'created' tags).<\/p><\/li>\n<li><p>Configure the node instead of simply create it with default configuration.<\/p><\/li>\n<li><p>Check the node authorizations if it is already existing.<\/p><\/li>\n<li><p>Improve the internationalization strings (and set at least 2 default\nlanguages: English and French).<\/p><\/li>\n<li><p>And what if the post or page is private? Should it be added on a node? Maybe\na node with a white list that the admin can manage?<\/p><\/li>\n<li><p>Apparently if I disapprove or flag a comment as spam from the \"edit comment\"\npage, it does not remove it from the node. Why? Is it a bug from Wordpress\nwhich does not trigger the action in all cases? Or is there another Wordpress'\naction for this specific case? Try this also with posts from the \"edit post\"\npage.\nEdit: it seems to be a known bug: http:\/\/trac.wordpress.org\/ticket\/5792\nIs planned to be fixed for Wordpress 2.9 apparently.\n=&gt; this seems to be fixed now! Woohoo!<\/p><\/li>\n<li><p>Add more authentication mechanisms? (current: Digest-MD5, CramMD5, PLAIN,\nANONYMOUS. Only Digest-MD5 and PLAIN has been tested)<\/p><\/li>\n<li><p>SSLv23 added, but what about TLS?  (TLS does not work on Gmail. SSL and TLS works on ejabberd. So\nI have decided to use SSL only for now)\nNote that it looks like the PHP implementation of TLS encryption does not seem\nlike verifying the certificate...<\/p><\/li>\n<li><p>Add poster\/commenter name in ATOM format.\nPoster's name\nhttp:\/\/tools.ietf.org\/html\/rfc4287<\/p><\/li>\n<li><p>Add support for button of publishing all posts in once...<\/p><\/li>\n<li><p>Propose max_items to change...<\/p><\/li>\n<li><p>Improve title naming (different for comments, posts, and even for comments\nof each posts...)<\/p><\/li>\n<li><p>Isn't there a configuration option for getting notif of subnodes?.. Seem to\nremind yes.<\/p><\/li>\n<\/ul>\n\n<h3>Contacts<\/h3>\n\n<p>You can have some news about this plugin on <a href=\"http:\/\/jehan.zemarmot.net\" title=\"my public diary\">my freedom\nhaven<\/a> or of course, by\nsubscribing on the following xmpp pubsub node:\nhttp:\/\/jehan.zemarmot.net\/blog\/category\/technologies\/programmation\/jabber-feed\/feed\/\nIf you want to contact me by jabber, ask me first by email (which you can find\non my website. Yes I know, this is complicated: but I like my tranquility, so\nI make a filter).<\/p>\n\n<p>Have a nice life!<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin archive to wp-content\/plugins\/ directory on your Wordpress installation;<\/li>\n<li>Uncompress it by keeping it in its own sub-directory called jabber_feed\/;<\/li>\n<li>Activate the plugin through the 'Plugins' menu in Wordpress;<\/li>\n<li>Configure the plugin through the appearing sub-menu 'Jabber Feed configuration' under the 'Plugins' menu.<\/li>\n<li>When aknowledging the configuration by pressing the \"Update\" button, the\njabber login will be tested and the pubsub nodes created. Hence if anything is\nwrong with your configuration, you will be immediately informed.<\/li>\n<li>This plugin also defines two templates:<\/li>\n<\/ol>\n\n<p>- <code>jabber_feed_get ($node = 'posts', $what = 'url', $text = '')<\/code> will return a string being a url (bare, or in a 'a' or 'link' tag).\n- <code>jabber_feed_display ($node = 'posts', $what = 'url', $text = '')<\/code> is the same as the previous template but display the string instead of returning it!\nThese template functions can be used in your theme.\nNote that if your theme uses the 'wp_head' function in its header (most cases), a autodiscovery link on the post node will be automatically generated in the header. Otherwise, you can add it by yourself with these functions for instance.<\/p>\n\n<h4>dependencies<\/h4>\n\n<ul>\n<li><p>PHP must be built with the option <code>--enable-sockets<\/code> on PHP 4 &gt;= 4.0.7 or PHP 5 (though I haven't tried with such a version, with PHP 5.3.0 and more, this extension is moved to the PECL repository!). If you have an error relating to socket, this is most likely a dependency issue.\nNote for gentoo users: you must set the 'sockets' USE flag.<\/p><\/li>\n<li><p>It uses the library 'expat' to parse XML (enabled with the <code>--with-xml<\/code>\noption of the php compilation).\nNote for gentoo users: you must set the 'xml' USE flag.<\/p><\/li>\n<li><p>It uses the <code>Auth_SASL PEAR<\/code> module (<code>pear install Auth_SASL<\/code> or install with your distribution's package manager) for SASL authentication. For now, this dependency is mandatory because this is the only supported authentication mechanism. Maybe in some future will it become optional.<\/p><\/li>\n<li><p>OPTIONAL: to have the option of sending formated notification in XHTML, the \"tidy\" PECL extension must be installed.\nIt is based on the libtidy library which must first be installed: http:\/\/tidy.sourceforge.net\/\nThen with PHP 4.3.X or PHP 5, you can install it as a PECL module: <code>pecl install tidy<\/code>; or with the\n--with-tidy compilation option in PHP 5.\nWithout this, you won't have access to the XHTML option and all notifications will be sent as a normal textual message.<\/p><\/li>\n<li><p>OPTIONAL: if the plugin is installed on a BSD (Mac included),\nin order to use the SRV records on the admin JID, which is the correct way of resolving the server and port addresses for a domain, the PEAR extension NET_DNS must be installed: 'pear install NET_DNS' (Note that it will ask to have php compiled with 'mhash' option).\nIf it is installed on Windows, it is not anymore mandatory if you have PHP\n5.3.0 or later installed (under this version of PHP, you should also install\nthis extension to benefit SRV records).\nLinux servers do not need this extension to have SRV.\nNote for gentoo users: you must set the 'mhash' USE flag.<\/p><\/li>\n<\/ul>\n\n<h4>Working Platforms<\/h4>\n\n<p>This script has been tested only currently on Wordpress 2.0 up to Wordpress\n2.9.1 with PHP 5.2.1 to 5.2.11, running on a GNU\/Linux 64 bits (Gentoo Linux).\nHopefully it should work with other software versions (not for PHP4, because\nof the TLS feature with is PHP5 specific. Yet if you are really interested\ninto PHP4 compatibility and if TLS is not required for your connection, just\nask me, I will try to make a compatibility layer), but I cannot guarantee.\nTell me please if you tried this successfully with another configuration so that I update the known working platforms list.<\/p>\n\n<p>At the opposite, if you find a bug or encounter an issue on some configuration, don't hesitate to tell me, and I will try and fix it.<\/p>\n\n<h4>Examples for using the function templates<\/h4>\n\n<pre><code>jabber_feed_get and `jabber_feed_display` have the same parameters, but the\n<\/code><\/pre>\n\n<p>first returns the link whereas the latter displays it:<\/p>\n\n<ol>\n<li><code>jabber_feed_get ($node = 'posts', $what = 'url', $text = '')<\/code><\/li>\n<li><code>jabber_feed_display ($node = 'posts', $what = 'url', $text = '')<\/code><\/li>\n<\/ol>\n\n<ul>\n<li>'node' can be 'all', 'posts', 'pages', 'comments', 'current' (comments of\nthe current page\/post) or a number (comments of the given numbered post\/page);<\/li>\n<li>'what' can be the bare 'url', or included in a 'a' tag, or a 'link' tag;<\/li>\n<li>'text' is optional displayed text (only when 'a' tag).<\/li>\n<\/ul>\n\n<p>So for instance, if the pubsub server is 'pubsub.jabber.org' and the node is\n'blog':<\/p>\n\n<ul>\n<li><p><code>jabber_feed_display ('posts', 'bare')<\/code> displays simply:<\/p>\n\n<pre><code>xmpp:pubsub.jabber.org?action=subscribe;node=blog\/posts\n<\/code><\/pre><\/li>\n<\/ul>\n\n<p>which is a bare url of the node containing all the posts.<\/p>\n\n<ul>\n<li><p><code>jabber_feed_get ('comments', 'a', 'All the comments')<\/code> will return:<\/p>\n\n<pre><code>&lt;a rel='alternate'\n    href='xmpp:pubsub.jabber.org?action=subscribe;node=blog\/comments;subscription_type=items;subscription_depth=1'&gt;All\n    the comments&lt;\/a&gt;\n<\/code><\/pre><\/li>\n<\/ul>\n\n<p>which is a link for all comments.<\/p>\n\n<ul>\n<li><p><code>jabber_feed_display (5, 'link')<\/code> will display:<\/p>\n\n<pre><code>&lt;link rel='alternate'\n    href='xmpp:pubsub.jabber.org?action=subscribe;node=blog\/comments\/5' \/&gt;\n<\/code><\/pre><\/li>\n<\/ul>\n\n<p>which is an autodiscovery link for the comments of post 5.<\/p>\n\n<p>Etc.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt>Question from myself: how people can subscribe on a Jabber node?<\/dt>\n<dd><p>Unfortunately this plugin is rather a \"proof of concept\" plugin as long as\nthere is no Jabber client allowing users to easily subscribe (and configure\ntheir subscription) to xmpp pubsub nodes.\nI could use Gajim to subscribe to nodes though, but I had much difficulty to\n\"browse\" nodes with it, and it is impossible to create a node (at least I have\nnot found).\nAs for Psi, I could not do any subscription at all.<\/p>\n\n<p>The only mean for the time being is to use a client with a XML console (the\nonly ones I know with such a console are Gajim, Psi, and Sameplace with an\nofficial plugin) and send this raw XML subscription (which is indeed a non very\nuser-friendly method, I must admit).<\/p>\n\n<p>It would be nice if people could implement soon a node subscription feature in\ntheir favorite Jabber client (I will probably try to do so myself as a next\nstep) and also a relation in their favorite web-browser to Jabber links (so\nthat they could have their Jabber client propose them to subscribe and\nconfigure a node just by clicking on a link on their browser).\nHopefully then I will update this readme to advice such Jabber client and web\nbrowser! :-)<\/p><\/dd>\n<dt>From myself: which jabber server has a good pubsub implementation?<\/dt>\n<dd><p>I am using ejabberd 2.0 and 2.0.1 for my own, but it is pretty flawed on many ways.\nEspecially it is impossible to configure your subscription to a node. What a\nshame! :-(\nAnyway it is sufficient basically for the proof of concept, but probably not\nfor long-term (even mid-term) real use.\nYet I heard that the coming development version of ejabberd (3.0) has had a\nrewrite of the pubsub implementation. I have not tested though.<\/p>\n\n<p>I don't know sufficiently others server softwares to give an opinion about\nthem. But I was told Openfire should have soon a pretty good PubSub support. I\nam still waiting to test it though.<\/p><\/dd>\n<dt>From myself: which Jabber client could I advice to visitors of my website?<\/dt>\n<dd><p>As explained, there are few, if none, clients with good PubSub support. This\nis why I told this plugin is more a proof of concept than an useful one. But\nhopefully, soon it will be better!\nProcess One has developped recently a pubsub client called <code>one-channel<\/code>, as\nfar as I know, the first one ever publicly released, fully dedicated to\npubsub. I had only one review from someone, not so enthousiast though. For my\nown, I have unfortunately been unable to test, as it uses Flash technology\n(Adobe AIR) and my MIPS computer does not take Flash very well (usually it\nwill crash, if it works at all, anyway). If someone had a chance to test it\nwith publication generated by my plugin, I would be happy to get a feedback...<\/p><\/dd>\n<dt>From myself: but no browser can detect XMPP autodiscovery links. What are they for?!<\/dt>\n<dd><p>I am writting a small Firefox plugin for this. Soon more infos!<\/p><\/dd>\n<dt>Do you like to ask questions to yourself? Do you feel lonely?<\/dt>\n<dd><p>Maybe. ;-)<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.5<\/h4>\n\n<ul>\n<li><p>Better SRV library gestion: the plugin can now \"switch\" between the NET_DNS library\nif installed, to the core PHP SRV functions (if using Linux or a Windows\nwith a recent PHP) or nothing (no SRV gestion).\nHence for Linux or Windows (with recent PHP), no additional library is\nanymore required.<\/p><\/li>\n<li><p>Algorithm for dealing with priority and weight of target in SRV records is\nnow implemented, exactly as in RFC 2782. Therefore the only missing part for\na full SRV records compliance is now a support of Time To Live, which could\nbe interesting next implementation.<\/p><\/li>\n<li><p>New widget for displaying the XMPP feeds in the sidebars.<\/p><\/li>\n<\/ul>","raw_excerpt":"This plugin feeds Jabber server pubsub nodes when new posts are published on Wordpress and comments are added.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/2742","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=2742"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/jehan"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=2742"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=2742"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=2742"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=2742"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=2742"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=2742"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}