[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fJm4bhcCooedJECVWdcljJtuUb2gkKZ7FYrHQeTDgf7g":3},{"slug":4,"name":5,"version":6,"author":7,"author_profile":8,"description":9,"short_description":10,"active_installs":11,"downloaded":12,"rating":13,"num_ratings":14,"last_updated":15,"tested_up_to":16,"requires_at_least":17,"requires_php":18,"tags":19,"homepage":25,"download_link":26,"security_score":27,"vuln_count":28,"unpatched_count":28,"last_vuln_date":29,"fetched_at":30,"vulnerabilities":31,"developer":32,"crawl_stats":29,"alternatives":40,"analysis":139,"fingerprints":403},"relation-post-types","Relations Post Types","1.3.1","Amaury Balmer","https:\u002F\u002Fprofiles.wordpress.org\u002Fmomo360modena\u002F","\u003Cp>This plugin allow to build relation between 2 custom types (posts, page, custom), very useful for manage related content on CMS type website.\u003C\u002Fp>\n\u003Cp>A few example use cases:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>manually lists of related posts\u003C\u002Fli>\n\u003Cli>post series\u003C\u002Fli>\n\u003Cli>rented houses connected to agency\u003C\u002Fli>\n\u003Cli>etc.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Relationships are created from a settings page from the administration console.\u003C\u002Fp>\n\u003Cp>This plugin can not do relationships with users, you should test this excellent plugin made by scribu\u003Cbr \u002F>\nhttps:\u002F\u002Fwordpress.org\u002Fextend\u002Fplugins\u002Fposts-to-posts\u002F\u003C\u002Fp>\n","This plugin allow to build relation between 2 custom types (posts, page, custom), very useful for manage related content on CMS type website.",200,8231,100,1,"2013-06-17T06:25:00.000Z","3.5.2","3.0","",[20,21,22,23,24],"cms","custom","post-type","post-types","relation","http:\u002F\u002Fwordpress.org\u002Fextend\u002Fplugins\u002Frelation-post-types\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Frelation-post-types.1.3.1.zip",85,0,null,"2026-03-15T15:16:48.613Z",[],{"slug":33,"display_name":7,"profile_url":8,"plugin_count":34,"total_installs":35,"avg_security_score":36,"avg_patch_time_days":37,"trust_score":38,"computed_at":39},"momo360modena",3,10210,95,30,91,"2026-04-05T18:57:20.155Z",[41,65,84,103,121],{"slug":42,"name":43,"version":44,"author":45,"author_profile":46,"description":47,"short_description":48,"active_installs":49,"downloaded":50,"rating":51,"num_ratings":52,"last_updated":53,"tested_up_to":54,"requires_at_least":55,"requires_php":56,"tags":57,"homepage":63,"download_link":64,"security_score":13,"vuln_count":28,"unpatched_count":28,"last_vuln_date":29,"fetched_at":30},"posts-to-posts","Posts 2 Posts","1.7.8","scribu","https:\u002F\u002Fprofiles.wordpress.org\u002Fscribu\u002F","\u003Cp>This plugin allows you to create many-to-many relationships between posts of any type: post, page, custom etc. A few example use cases:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>manually curated lists of related posts\u003C\u002Fli>\n\u003Cli>post series\u003C\u002Fli>\n\u003Cli>products connected to retailers\u003C\u002Fli>\n\u003Cli>etc.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Additionally, you can create many-to-many relationships between posts and users. So, you could also implement:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>favorite posts of users\u003C\u002Fli>\n\u003Cli>multiple authors per post\u003C\u002Fli>\n\u003Cli>etc.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Support & Maintenance\u003C\u002Fh4>\n\u003Cp>AyeCode Ltd have committed to security and maintenance updates due to this plugins requirement in our \u003Ca href=\"https:\u002F\u002Fwpgeodirectory.com\u002Fdownloads\u002Flist-manager\u002F\" rel=\"nofollow ugc\">List Manager Extension.\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>~~I, scribu, will not be offering support (either free or paid) for this plugin anymore.~~\u003C\u002Fp>\n\u003Cp>If you want to help maintain the plugin, fork it \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fscribu\u002Fwp-posts-to-posts\" rel=\"nofollow ugc\">on github\u003C\u002Fa> and open pull requests.\u003C\u002Fp>\n\u003Cp>Links: \u003Ca href=\"http:\u002F\u002Fgithub.com\u002Fscribu\u002Fwp-posts-to-posts\u002Fwiki\" rel=\"nofollow ugc\">\u003Cstrong>Documentation\u003C\u002Fstrong>\u003C\u002Fa> | \u003Ca href=\"http:\u002F\u002Fscribu.net\u002Fwordpress\u002Fposts-to-posts\" rel=\"nofollow ugc\">Plugin News\u003C\u002Fa> | \u003Ca href=\"http:\u002F\u002Fscribu.net\" rel=\"nofollow ugc\">Author’s Site\u003C\u002Fa>\u003C\u002Fp>\n","Efficient many-to-many connections between posts, pages, custom post types, users.",10000,403687,96,101,"2026-03-06T04:35:00.000Z","6.9.4","6.0","5.6",[58,59,60,61,62],"connections","custom-post-types","many-to-many","relationships","users","http:\u002F\u002Fscribu.net\u002Fwordpress\u002Fposts-to-posts","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fposts-to-posts.1.7.8.zip",{"slug":66,"name":67,"version":68,"author":69,"author_profile":70,"description":71,"short_description":72,"active_installs":73,"downloaded":74,"rating":13,"num_ratings":75,"last_updated":76,"tested_up_to":77,"requires_at_least":78,"requires_php":18,"tags":79,"homepage":82,"download_link":83,"security_score":27,"vuln_count":28,"unpatched_count":28,"last_vuln_date":29,"fetched_at":30},"more-types","More Types","1.2","henrikmelin","https:\u002F\u002Fprofiles.wordpress.org\u002Fhenrikmelin\u002F","\u003Cp>More Types is a WordPress plugin that adds new post types to the WordPress admin. For instance, if you run a music site you could create a review post type (based on the post). If you run a food blog you could create a post type for recipes.\u003C\u002Fp>\n\u003Cp>If you use More Fields in addition to More Types you could for instance add an input field where you put the ingredients and another where you input cooking time.\u003C\u002Fp>\n\u003Cp>With More Types you can:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Create additional post types\u003C\u002Fli>\n\u003Cli>Allow different WordPress User roles to have different rights to review, save, and publish a specific post type (even built in post types)\u003C\u002Fli>\n\u003Cli>List posts in specific menus in the WordPress admin\u003C\u002Fli>\n\u003Cli>Set a range of editing capabilities of the post type based on user level\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>More Types is part of a suite of plugins created to enhance the functionality of a vanilla WordPress installation. With More Fields you can create additional input fields for easier management of Custom fields, with More Taxonomies you can create additional taxonomies besides Categories and Tags. More Types works without the other plugins but interacts with them nicely.\u003C\u002Fp>\n\u003Cp>This plugins was born out of the development work done for \u003Ca href=\"http:\u002F\u002Fdagensskiva.com\u002F\" rel=\"nofollow ugc\">Dagensskiva\u003C\u002Fa>, \u003Ca href=\"http:\u002F\u002Fdagensbok.com\u002F\" rel=\"nofollow ugc\">Dagensbok\u003C\u002Fa> and user requests.\u003C\u002Fp>\n\u003Ch3>Upgrading from More Fields 1.x?\u003C\u002Fh3>\n\u003Cp>If you’re upgrading from More Fields 1.x you need to take a couple of steps to continue working with your already defined Post Types.\u003C\u002Fp>\n\u003Col>\n\u003Cli>Upgrade to More Fields 1.5.1 (this prepares the More Fields fields and Post types for WP 3.0)\u003C\u002Fli>\n\u003Cli>Update to WordPress 3.0 still using More Fields 1.5.1\u003C\u002Fli>\n\u003Cli>Upgrade to More Fields 2.0\u003C\u002Fli>\n\u003Cli>Install More Types 1.0\u003C\u002Fli>\n\u003C\u002Fol>\n","Adds any number of extra Post types, besides Post and Page, for the WordPess Admin. Also allows for special editing rights for specific User roles for &hellip;",900,38030,2,"2011-09-03T07:21:00.000Z","3.1.4","3.1",[80,20,59,81,22],"admin","extra-content","http:\u002F\u002Flabs.dagensskiva.com\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fmore-types.1.2.zip",{"slug":85,"name":86,"version":87,"author":88,"author_profile":89,"description":90,"short_description":91,"active_installs":92,"downloaded":93,"rating":13,"num_ratings":94,"last_updated":95,"tested_up_to":96,"requires_at_least":17,"requires_php":18,"tags":97,"homepage":101,"download_link":102,"security_score":27,"vuln_count":28,"unpatched_count":28,"last_vuln_date":29,"fetched_at":30},"super-cpt","SuperCPT","0.2.1","Matthew Boynes","https:\u002F\u002Fprofiles.wordpress.org\u002Fmboynes\u002F","\u003Ch4>UPGRADE NOTICE\u003C\u002Fh4>\n\u003Cp>SuperCPT now uses Font Awesome instead of Glyphicons. Some icon names will carry over, but not all. If this is a considerable inconvenience for you for a project, simply do not update it. It’s not a security release, so updating isn’t necessary.\u003C\u002Fp>\n\u003Ch4>Overview\u003C\u002Fh4>\n\u003Cp>SuperCPT is an object wrapper for Custom Post Types, Custom Taxonomies, and Custom Post Meta “for coders, by coders.” Simply put, SuperCPT:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>DRYs up the Custom Post Type and Custom Taxonomy process (e.g. automatically adds the name to all the labels),\u003C\u002Fli>\n\u003Cli>allows you to set default options for all your Custom Post Types and Taxonomies,\u003C\u002Fli>\n\u003Cli>significantly simplifies the process of creating, saving, and displaying Custom Post Meta,\u003C\u002Fli>\n\u003Cli>is sexy! Your custom fields are styled to look great and SuperCPT comes with 361 awesome icons courtesy of \u003Ca href=\"http:\u002F\u002Ffontawesome.io\u002F\" rel=\"nofollow ugc\">Font Awesome\u003C\u002Fa>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Demo Video\u003C\u002Fh4>\n\u003Cdiv class=\"embed-vimeo\" style=\"text-align: center;\">\u003Ciframe loading=\"lazy\" src=\"https:\u002F\u002Fplayer.vimeo.com\u002Fvideo\u002F59368054\" width=\"750\" height=\"422\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen>\u003C\u002Fiframe>\u003C\u002Fdiv>\n\u003Ch4>TextMate\u002FSublime Text 2 Bundle\u003C\u002Fh4>\n\u003Cp>If you use TextMate, Sublime Text 2, or another editor which supports TextMate bundles, check out \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmboynes\u002Fsuper-cpt-bundle\" rel=\"nofollow ugc\">this set of snippets\u003C\u002Fa> to turbo-charge your development.\u003C\u002Fp>\n\u003Ch4>And more…\u003C\u002Fh4>\n\u003Cp>See the \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fextend\u002Fplugins\u002Fsuper-cpt\u002Fother_notes\u002F\" rel=\"ugc\">Other Notes tab\u003C\u002Fa> for instructions and demo code. Find more demos and a full reference \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmboynes\u002Fsuper-cpt\u002Fwiki\" rel=\"nofollow ugc\">at GitHub\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>Since you’re a hard-core coder, \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmboynes\u002Fsuper-cpt\" rel=\"nofollow ugc\">check this out on GitHub\u003C\u002Fa> if you want to contribute!\u003C\u002Fp>\n\u003Ch3>Instructions\u003C\u002Fh3>\n\u003Cp>Depending on when and where you’re declaring your Custom Post Types and Taxonomies, you have different options for which action to hook onto. \u003Ccode>after_setup_theme\u003C\u002Fcode> is the safest bet, but if you’re referencing this in another plugin, \u003Ccode>plugins_loaded\u003C\u002Fcode> is a good choice. To avoid a fatal error if something goes awry, you should check to see if the class \u003Ccode>Super_Custom_Post_Type\u003C\u002Fcode> exists before referencing it. Don’t worry about keeping up, reference code is below.\u003C\u002Fp>\n\u003Ch4>Custom Post Types\u003C\u002Fh4>\n\u003Cp>To define a new Custom Post Type, instantiate the \u003Ccode>Super_Custom_Post_Type\u003C\u002Fcode> class with a string for the post type. For example,\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$movies = new Super_Custom_Post_Type( 'movie' );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>It works very much like \u003Ca href=\"https:\u002F\u002Fcodex.wordpress.org\u002FFunction_Reference\u002Fregister_post_type\" rel=\"nofollow ugc\">\u003Ccode>register_post_type\u003C\u002Fcode>\u003C\u002Fa>. The first thing you gained by using this is that the labels all got setup with either ‘Movie’ or ‘Movies’. If our post type were ‘indie-film’, the labels would have “Indie Film” and “Indie Films” as appropriate. Of course, you do have the ability to set the plural word in cases such as goose\u002Fgeese. You also gained the ability to define your own custom post type defaults through a filter. Lastly, you gained access to \u003Ccode>Super_Custom_Post_Type\u003C\u002Fcode>‘s parent class, \u003Ccode>Super_Custom_Post_Meta\u003C\u002Fcode>, for fast, clean, intuitive custom post meta, which we’ll go into shortly.\u003C\u002Fp>\n\u003Cp>Lastly, if you’ve built a lot of custom post types, you’re probably sick and tired of the pushpin icon. SuperCPT comes with 350 gorgeous icons courtesy of \u003Ca href=\"http:\u002F\u002Ffontawesome.io\u002F\" rel=\"nofollow ugc\">Font Awesome\u003C\u002Fa> that are extremely easy to implement. Here’s what it looks like:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$movies->set_icon( 'film' );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Custom Taxonomies\u003C\u002Fh4>\n\u003Cp>To define a new Custom Taxonomy, much like with Custom Post Types, you instantiate \u003Ccode>Super_Custom_Taxonomy\u003C\u002Fcode> with a string for the term name. For example:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$actors = new Super_Custom_Taxonomy( 'actor' );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Again, we got free labels for doing this, using either ‘Actor’ or ‘Actors’ as appropriate, without needing to specify the 16 labels individually.\u003C\u002Fp>\n\u003Ch4>Custom Post Meta\u003C\u002Fh4>\n\u003Cp>Custom Post Meta is where SuperCPT shines the brightest, because this process is typically the most time-consuming. \u003Ccode>Super_Custom_Post_Meta\u003C\u002Fcode> is a free-standing class that can be added to any post type, even built-in post types (posts and pages). This class has a method \u003Ccode>add_meta_box\u003C\u002Fcode> which does the bulk of the work, and somewhat mimics the WordPress function. Here’s an example:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>$movies->add_meta_box( array(\n    'id' => 'features',\n    'fields' => array(\n        'tagline' => array( 'type' => 'text' )\n    )\n) );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>The method \u003Ccode>add_meta_box\u003C\u002Fcode> takes an array of parameters (unlike the core function which takes normal ordered arguments). \u003Ccode>id\u003C\u002Fcode> is the only required attribute, and that becomes the ID of the meta box as well as the title (this will get converted into “words” for the title, e.g. \u003Ccode>\"movie_details\"\u003C\u002Fcode> would become “Movie Details”). \u003Ccode>fields\u003C\u002Fcode> is an array of all the fields in the meta box. It’s an associative array, where the keys in the array are the field names and the values are another associative array of attributes for the field. The keys closely reflect the HTML attributes in the resulting field, and any key not known by the plugin will in fact become an HTML attribute (e.g. passing \u003Ccode>'data-src' => 'foo'\u003C\u002Fcode> would become the HTML attribute \u003Ccode>data-src=\"foo\"\u003C\u002Fcode> in the field). See the reference for the full gamut of options, both for the \u003Ccode>add_meta_box\u003C\u002Fcode> argument array and the fields array.\u003C\u002Fp>\n\u003Cp>Long story short, using this class means you don’t have to do any additional work to store data, retrieve data, style the boxes, and so on.\u003C\u002Fp>\n\u003Ch4>Helper Functions\u003C\u002Fh4>\n\u003Cp>SuperCPT has a couple of helper functions for displaying your post meta. \u003Ccode>get_scpt_formatted_meta\u003C\u002Fcode> and \u003Ccode>the_scpt_formatted_meta\u003C\u002Fcode>\u003C\u002Fp>\n\u003Ch3>Demo Code\u003C\u002Fh3>\n\u003Cp>Here is the full demo code:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>function scpt_demo() {\n    if ( ! class_exists( 'Super_Custom_Post_Type' ) )\n        return;\n\n    $demo_posts = new Super_Custom_Post_Type( 'demo-post' );\n\n    # Test Icon. Should be a square grid.\n    $demo_posts->set_icon( 'th-large' );\n\n    # Taxonomy test, should be like tags\n    $tax_tags = new Super_Custom_Taxonomy( 'tax-tag' );\n\n    # Taxonomy test, should be like categories\n    $tax_cats = new Super_Custom_Taxonomy( 'tax-cat', 'Tax Cat', 'Tax Cats', 'category' );\n\n    # Connect both of the above taxonomies with the post type\n    connect_types_and_taxes( $demo_posts, array( $tax_tags, $tax_cats ) );\n\n    # Add a meta box with every field type\n    $demo_posts->add_meta_box( array(\n        'id' => 'demo-fields',\n        'context' => 'normal',\n        'fields' => array(\n            'textbox-demo' => array(),\n            'textarea-demo' => array( 'type' => 'textarea' ),\n            'wysiwyg-demo' => array( 'type' => 'wysiwyg' ),\n            'boolean-demo' => array( 'type' => 'boolean' ),\n            'checkboxes-demo' => array( 'type' => 'checkbox', 'options' => array( 'one', 'two', 'three' ) ),\n            'radio-buttons-demo' => array( 'type' => 'radio', 'options' => array( 'one', 'two', 'three' ) ),\n            'select-demo' => array( 'type' => 'select', 'options' => array( 1 => 'one', 2 => 'two', 3 => 'three' ) ),\n            'multi-select-demo' => array( 'type' => 'select', 'options' => array( 'one', 'two', 'three' ), 'multiple' => 'multiple' ),\n            'date-demo' => array( 'type' => 'date' ),\n            'label-override-demo' => array( 'label' => 'Label Demo' )\n        )\n    ) );\n\n    # Add another CPT to test one-to-one (it could just as easily be one-to-many or many-to-many)\n    $linked_posts = new Super_Custom_Post_Type( 'linked-post', 'Other Post', 'Other Posts' );\n    $linked_posts->add_meta_box( array(\n        'id' => 'one-to-one',\n        'title' => 'Testing One-to-One relationship',\n        'context' => 'side',\n        'fields' => array(\n            'demo-posts' => array( 'type' => 'select', 'data' => 'demo-post' ),\n            'side-wysiwyg' => array( 'type' => 'wysiwyg' )\n        )\n    ) );\n    $linked_posts->set_icon( 'cogs' );\n\n}\nadd_action( 'after_setup_theme', 'scpt_demo' );\u003Ch3>To-Do\u003C\u002Fh3>\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>1. Add better support for multiple fields for one meta key\u003Cbr \u002F>\n2. Add easy RSS feeds, e.g. in fields array, a parameter might be \u003Ccode>'rss' => 'PubDate'\u003C\u002Fcode> to prefer that field’s data over the post’s publication date.\u003C\u002Fp>\n","Insanely easy and attractive custom post types, custom post meta, and custom taxonomies",700,18930,14,"2013-08-10T20:33:00.000Z","3.6.1",[20,98,99,100,59],"custom-field","custom-fields","custom-post-type","http:\u002F\u002Fwordpress.org\u002Fextend\u002Fplugins\u002Fsuper-cpt\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fsuper-cpt.0.2.1.zip",{"slug":104,"name":105,"version":106,"author":107,"author_profile":108,"description":109,"short_description":110,"active_installs":111,"downloaded":112,"rating":13,"num_ratings":14,"last_updated":113,"tested_up_to":114,"requires_at_least":115,"requires_php":116,"tags":117,"homepage":18,"download_link":120,"security_score":27,"vuln_count":28,"unpatched_count":28,"last_vuln_date":29,"fetched_at":30},"posts-2-posts-relationships","Posts 2 Posts Relationships","1.0.0","wp-centrics","https:\u002F\u002Fprofiles.wordpress.org\u002Fwpcentrics\u002F","\u003Cp>This plugin allows you to create many-to-many relationships between posts of any type: post, page, custom post types, etc.\u003C\u002Fp>\n\u003Cp>Configure post 2 post connections easily in a friendly interface.\u003C\u002Fp>\n\u003Cp>The new connection metaboxes will appear on the related post edition pages. Search text, post type and term combo filter available as option for it.\u003C\u002Fp>\n\u003Cp>Use the standard WP_Query() and get_posts() to get the related posts.\u003C\u002Fp>\n\u003Cp>Solid-rock relationships: use his own database table, updated on post status change and removed on post deletion.\u003C\u002Fp>\n\u003Ch4>Getting related: the WP_Query way\u003C\u002Fh4>\n\u003Cpre>\u003Ccode>\u002F\u002F inside main loop, current post ID (p2p_rel_post_id) not needed, current post will be used if you don't set it:\n\n$args = array(\n    'p2p_rel_key'        => 'prod_to_bars',  \u002F\u002F This is your connection key name. Required.\n    'p2p_rel_post_id'    => 1,               \u002F\u002F The post ID. Inside main loop dont needed.\n    'p2p_rel_direction'  => 'any',           \u002F\u002F The connection direction. 'any' by default. Optional. Explained below. ( can be 'any' | 'from_to' | 'to_from' )\n\n    \u002F\u002F Of course, here you can add the standard WP arguments you need: post type, status, dates, pagination, etc.\n); \n\n\u002F\u002F (at this point, as any other WP looping):\n\n\u002F\u002F The Query \n$the_query = new WP_Query( $args );\n\n\u002F\u002F The Loop\nif ( $the_query->have_posts() ) {\n    echo '\u003Cul>';\n    while ( $the_query->have_posts() ) {\n        $the_query->the_post();\n        echo '\u003Cli>' . get_the_title() . '\u003C\u002Fli>';\n    }\n    echo '\u003C\u002Ful>';\n} else {\n    \u002F\u002F no posts found\n    echo '\u003Cp>Nothing related\u003C\u002Fp>';\n}\n\n\u002F\u002F Restore original Post Data \nwp_reset_postdata();\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Getting related: the get_posts() way\u003C\u002Fh4>\n\u003Cpre>\u003Ccode>\u002F\u002F inside main loop, current post ID (p2p_rel_post_id) not needed, current post will be used if you don't set it:\n\n$args = array(\n    'p2p_rel_key'        => 'prod_to_bars', \u002F\u002F This is your connection key name. Required.\n    'p2p_rel_post_id'    => 1,              \u002F\u002F The post ID. Inside main loop dont needed\n    'p2p_rel_direction'  => 'any',          \u002F\u002F The connection direction. 'any' by default. Optional. Explained below. ( can be 'any' | 'from_to' | 'to_from' )\n    'post_type'          => 'any',          \u002F\u002F The filtered post types, can be an array. Optional. 'post' by default. (can be 'any' for all)\n    'suppress_filters'   => false           \u002F\u002F Required\n\n    \u002F\u002F Of course, here you can add the standard WP arguments you need: post type, status, dates, pagination, etc.\n); \n\n\u002F\u002F (at this point, as any other WP looping):\n\n$rel_posts = get_posts ( $args );\n\nprint_r( $rel_posts );\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Getting related: getting it raw\u003C\u002Fh4>\n\u003Cpre>\u003Ccode>\u002F\u002F inside main loop, current post ID (element_id) not needed, current post will be used if you don't set it:\n\n$args = array(\n    'key'           => 'prod_to_bars',  \u002F\u002F This is your connection key name. Required.\n    'element_id'    => 1,               \u002F\u002F The post ID. Inside main loop dont needed.\n    'element_type'  => 'any',           \u002F\u002F The filtered post types, can be an array. Optional. 'post' by default. (can be 'any' for all)\n    'status'        => 'any'            \u002F\u002F The filtered post status, can be an array. Optional. 'publish' by default. (can be 'any' for all)\n    'direction'     => 'any',           \u002F\u002F The connection direction. 'any' by default. Optional. Explained below. ( can be 'any' | 'from_to' | 'to_from' )\n); \n\nglobal $P2P_Relationships;\n$rel_posts = $P2P_Relationships->get_raw ( $args );\n\n\u002F\u002F Only an array of related post IDs, not the posts objects.\nprint_r ( $rel_posts ); \n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>The connection direction\u003C\u002Fh4>\n\u003Cp>By default, the connections are bidirectional (any). However, you can get related posts only in one direction: ‘from_to’ or ‘to_from’.\u003C\u002Fp>\n\u003Cp>You can do the same logic at interface level for your users in the backoffice: you can setup your connection hidding the from metabox or the to metabox (UI mode setting).\u003C\u002Fp>\n","Efficient many-to-many connections between posts, pages and custom post types.",40,1556,"2021-07-19T07:39:00.000Z","5.8.13","4.7","5.5",[59,60,118,119,42],"posts-2-posts","posts-relationships","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fposts-2-posts-relationships.zip",{"slug":122,"name":123,"version":124,"author":125,"author_profile":126,"description":127,"short_description":128,"active_installs":129,"downloaded":130,"rating":28,"num_ratings":28,"last_updated":131,"tested_up_to":132,"requires_at_least":133,"requires_php":18,"tags":134,"homepage":137,"download_link":138,"security_score":27,"vuln_count":28,"unpatched_count":28,"last_vuln_date":29,"fetched_at":30},"kontrolwp","KontrolWP – Kontrol WordPress Developer Kit","2.0.7","Techunits Research & Development Solutions","https:\u002F\u002Fprofiles.wordpress.org\u002Fskall\u002F","\u003Cp>KontrolWP – Kontrol WordPress Developer Kit is an advanced WordPress plugin for developers. Create custom CMS sites quickly and easily using advanced custom fields, custom post types, custom taxonomies, admin menu editors, SEO and much more through an easy to use interface.\u003C\u002Fp>\n\u003Cp>Ever wanted to just install just one WordPress plugin in order to whip out an awesome custom CMS or blog for a client quickly and easily? We know we did! This plugin is made by developers, for developers.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>\u003Ca href=\"https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fkontrolwp\u002Fscreenshots\u002F\" rel=\"ugc\">View our screenshots for a quick peek of what Kontrol can do\u003C\u002Fa>.\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>\u003Cstrong>KontrolWP now supports full internationalisation (i18n) and can be easily translated to any other language supported by WordPress –  At the moment we only support English in full, but we currently have partial language support for over 20 languages – \u003Ca href=\"https:\u002F\u002Fwww.kontrolwp.com\u002Fplugin\u002Fwordpress-developer-kit\u002Flanguages-supported\" rel=\"nofollow ugc\">View our site for more information\u003C\u002Fa>\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>\u003Cstrong>For more screenshots, documentation, information and support, please visit our website at \u003Ca href=\"https:\u002F\u002Fwww.kontrolwp.com\" rel=\"nofollow ugc\">https:\u002F\u002Fwww.kontrolwp.com\u003C\u002Fa>\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Ch3>Features\u003C\u002Fh3>\n\u003Cp>~~~~~~~~~~~~~~~~~~~~~~~~\u003C\u002Fp>\n\u003Ch4>Advanced Custom Fields\u003C\u002Fh4>\n\u003Cp>Create incredibly powerful and flexible custom fields for use in your clients CMS or blog.\u003C\u002Fp>\n\u003Cp>From a simple text field with validation to advanced image and file inline uploads, you will be able to create virtually any type of custom field easily and quickly. All custom fields come with a wealth of configurable options and also support many types of advanced field validation methods on them such as ‘required’, ’email address’, ‘URL’ and many more.\u003C\u002Fp>\n\u003Ch4>Custom Settings \u002F Options\u003C\u002Fh4>\n\u003Cp>The custom settings module allows you to use the power of our custom fields to create your own sets of custom settings \u002F options for your CMS.\u003C\u002Fp>\n\u003Cp>These are highly useful for creating and storing information \u002F images \u002F files that don’t need to be tied to any post, but instead help control how the site works. All custom settings fields support a wide array of validation methods (required, email, URL etc) and can be organised into categories with their own admin menu entry for ease of access. From simple text fields, to an advanced image upload or even a ‘repeatable’ field, you’ll find the field type you need for virtually any type of custom setting you need to add to your CMS.\u003C\u002Fp>\n\u003Ch4>Custom Post Types\u003C\u002Fh4>\n\u003Cp>Creating and managing WordPress custom post types has never been easier, use our new advanced and easy to use custom post type manager for all your post type needs.\u003C\u002Fp>\n\u003Cp>Create, hide, edit, disable all your own new custom content post types using our advanced module. Add, Edit, Move any columns that show up when all the posts are listed under that post type – even add in data from custom fields, taxonomies and more post information than you can shake a stick at. Upload icons for the custom post type menu entries, set permissions and automatically generate all labels for a new custom post type in just seconds.\u003C\u002Fp>\n\u003Ch4>Custom Taxonomies\u003C\u002Fh4>\n\u003Cp>Taxonomies allow you to group or categorise your post type content. These are very powerful and essential in any advanced WordPress CMS or Blog.\u003C\u002Fp>\n\u003Cp>Using our custom taxonomy manager, you can create new taxonomies, edit \u002F disable current ones, assign them to selected post types, set permissions and automatically generate all labels for a new custom taxonomies in just seconds.\u003C\u002Fp>\n\u003Ch4>Post Duplicator\u003C\u002Fh4>\n\u003Cp>Post duplicator will allow you to Clone any existing post\u002Fpage\u002Fcustom post type along with it’s custom fields data to a new editable post draft. Then you can make minor changes to the new draft post and publish live faster.\u003C\u002Fp>\n\u003Cp>This will help content editors to create\u002Fmanage artciles ever than before. As we have integrated this exciting features into KontrolWP itself so developers don’t need to install or look for any other plugin for this purpose only.\u003C\u002Fp>\n\u003Ch4>Custom Post Type Widgets\u003C\u002Fh4>\n\u003Cp>KontrolWP is now equipped with Custom Post Type widgets for most recent posts for Custom Post Types created by developers. This will help customers show most recent post entries to frontend sidebar. It’s also highly customizable due use of “kwp” prefixxed CSS property names.\u003C\u002Fp>\n\u003Ch3>Installation, Screenshots and Support\u003C\u002Fh3>\n\u003Cp>For more information, screenshots and support, please visit our website at \u003Ca href=\"https:\u002F\u002Fwww.kontrolwp.com\" rel=\"nofollow ugc\">https:\u002F\u002Fwww.kontrolwp.com\u003C\u002Fa>\u003C\u002Fp>\n","KontrolWP is an advanced Wordpress plugin for developers. Easily create CMS sites using advanced custom fields, custom post types, SEO and more.",10,1470,"2016-12-13T09:59:00.000Z","4.7.32","3.5",[135,20,99,59,136],"advanced-custom-fields","custom-taxonomies","http:\u002F\u002Fwww.kontrolwp.com","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fkontrolwp.zip",{"attackSurface":140,"codeSignals":190,"taintFlows":296,"riskAssessment":386,"analyzedAt":402},{"hooks":141,"ajaxHandlers":182,"restRoutes":187,"shortcodes":188,"cronEvents":189,"entryPointCount":14,"unprotectedCount":14},[142,147,151,154,157,159,163,165,168,171,174,179],{"type":143,"name":144,"callback":144,"file":145,"line":146},"action","admin_init","inc\\class.admin.php",16,{"type":143,"name":148,"callback":149,"file":145,"line":150},"admin_menu","add_menu",17,{"type":143,"name":152,"callback":152,"priority":129,"file":153,"line":129},"save_post","inc\\class.admin.post.php",{"type":143,"name":155,"callback":155,"priority":129,"file":153,"line":156},"add_meta_boxes",11,{"type":143,"name":158,"callback":158,"file":153,"line":150},"admin_enqueue_scripts",{"type":160,"name":161,"callback":161,"file":162,"line":156},"filter","init","inc\\class.client.php",{"type":160,"name":164,"callback":164,"file":162,"line":94},"query_vars",{"type":143,"name":166,"callback":166,"file":162,"line":167},"parse_query",15,{"type":143,"name":169,"callback":169,"file":162,"line":170},"delete_post",18,{"type":143,"name":172,"callback":172,"priority":129,"file":162,"line":173},"posts_results",21,{"type":143,"name":175,"callback":176,"file":177,"line":178},"plugins_loaded","init_relations_post_types","relations-post-types.php",79,{"type":143,"name":180,"callback":181,"file":177,"line":38},"widgets_init","anonymous",[183],{"action":184,"nopriv":185,"callback":186,"hasNonce":185,"hasCapCheck":185,"file":153,"line":94},"posttype-quick-search",false,"wp_ajax_posttype_quick_search",[],[],[],{"dangerousFunctions":191,"sqlUsage":199,"outputEscaping":210,"fileOperations":14,"externalRequests":28,"nonceChecks":34,"capabilityChecks":28,"bundledLibraries":295},[192,196],{"fn":193,"file":145,"line":194,"context":195},"unserialize",127,"$config_file = unserialize(base64_decode(substr($config_file, strlen('RELATIONSPOSTTYPES'))));",{"fn":197,"file":177,"line":38,"context":198},"create_function","add_action( 'widgets_init', create_function('', 'return register_widget(\"RelationsPostTypes_Widget\")",{"prepared":94,"raw":34,"locations":200},[201,205,208],{"file":202,"line":203,"context":204},"inc\\functions.inc.php",134,"$wpdb->get_col() with variable interpolation",{"file":202,"line":206,"context":207},169,"$wpdb->get_results() with variable interpolation",{"file":202,"line":209,"context":204},207,{"escaped":211,"rawEcho":212,"locations":213},29,46,[214,217,219,221,224,226,228,230,233,236,238,240,242,244,246,247,248,250,252,253,255,256,258,260,263,264,266,268,270,271,272,273,274,275,277,279,280,281,283,284,286,287,288,290,292,293],{"file":153,"line":215,"context":216},198,"raw output",{"file":153,"line":218,"context":216},274,{"file":153,"line":220,"context":216},276,{"file":222,"line":223,"context":216},"inc\\class.widget.php",73,{"file":222,"line":225,"context":216},86,{"file":227,"line":167,"context":216},"inc\\functions.tpl.php",{"file":227,"line":229,"context":216},105,{"file":231,"line":232,"context":216},"samples\\sample1.php",28,{"file":234,"line":235,"context":216},"views\\admin\\metabox.php",6,{"file":234,"line":237,"context":216},7,{"file":234,"line":239,"context":216},8,{"file":234,"line":241,"context":216},9,{"file":234,"line":243,"context":216},12,{"file":234,"line":245,"context":216},13,{"file":234,"line":245,"context":216},{"file":234,"line":150,"context":216},{"file":234,"line":249,"context":216},22,{"file":234,"line":251,"context":216},33,{"file":234,"line":251,"context":216},{"file":234,"line":254,"context":216},38,{"file":234,"line":254,"context":216},{"file":234,"line":257,"context":216},42,{"file":234,"line":259,"context":216},45,{"file":261,"line":262,"context":216},"views\\admin\\settings.php",58,{"file":261,"line":262,"context":216},{"file":261,"line":265,"context":216},70,{"file":261,"line":267,"context":216},113,{"file":269,"line":237,"context":216},"views\\admin\\widget.php",{"file":269,"line":239,"context":216},{"file":269,"line":239,"context":216},{"file":269,"line":243,"context":216},{"file":269,"line":245,"context":216},{"file":269,"line":245,"context":216},{"file":269,"line":276,"context":216},20,{"file":269,"line":278,"context":216},27,{"file":269,"line":232,"context":216},{"file":269,"line":232,"context":216},{"file":269,"line":282,"context":216},31,{"file":269,"line":254,"context":216},{"file":269,"line":285,"context":216},39,{"file":269,"line":285,"context":216},{"file":269,"line":257,"context":216},{"file":269,"line":289,"context":216},49,{"file":269,"line":291,"context":216},50,{"file":269,"line":291,"context":216},{"file":294,"line":239,"context":216},"views\\client\\widget.php",[],[297,315,332,348,360,376],{"entryPoint":298,"graph":299,"unsanitizedCount":28,"severity":314},"check_settings (inc\\class.admin.php:62)",{"nodes":300,"edges":311},[301,306],{"id":302,"type":303,"label":304,"file":145,"line":305},"n0","source","$_POST['rpt_settings']",81,{"id":307,"type":308,"label":309,"file":145,"line":305,"wp_function":310},"n1","sink","update_option() [Settings Manipulation]","update_option",[312],{"from":302,"to":307,"sanitized":313},true,"low",{"entryPoint":316,"graph":317,"unsanitizedCount":28,"severity":314},"check_import_export (inc\\class.admin.php:97)",{"nodes":318,"edges":329},[319,322,324,326],{"id":302,"type":303,"label":320,"file":145,"line":321},"$_FILES",123,{"id":307,"type":308,"label":323,"file":145,"line":194,"wp_function":193},"unserialize() [Object Injection]",{"id":325,"type":303,"label":320,"file":145,"line":321},"n2",{"id":327,"type":308,"label":309,"file":145,"line":328,"wp_function":310},"n3",131,[330,331],{"from":302,"to":307,"sanitized":313},{"from":325,"to":327,"sanitized":313},{"entryPoint":333,"graph":334,"unsanitizedCount":28,"severity":314},"\u003Cclass.admin> (inc\\class.admin.php:0)",{"nodes":335,"edges":344},[336,337,338,339,340,342],{"id":302,"type":303,"label":304,"file":145,"line":305},{"id":307,"type":308,"label":309,"file":145,"line":305,"wp_function":310},{"id":325,"type":303,"label":320,"file":145,"line":321},{"id":327,"type":308,"label":323,"file":145,"line":194,"wp_function":193},{"id":341,"type":303,"label":320,"file":145,"line":321},"n4",{"id":343,"type":308,"label":309,"file":145,"line":328,"wp_function":310},"n5",[345,346,347],{"from":302,"to":307,"sanitized":313},{"from":325,"to":327,"sanitized":313},{"from":341,"to":343,"sanitized":313},{"entryPoint":349,"graph":350,"unsanitizedCount":14,"severity":314},"\u003Cmetabox> (views\\admin\\metabox.php:0)",{"nodes":351,"edges":358},[352,355],{"id":302,"type":303,"label":353,"file":234,"line":354},"$_REQUEST",25,{"id":307,"type":308,"label":356,"file":234,"line":251,"wp_function":357},"echo() [XSS]","echo",[359],{"from":302,"to":307,"sanitized":185},{"entryPoint":361,"graph":362,"unsanitizedCount":14,"severity":375},"wp_ajax_posttype_quick_search (inc\\class.admin.post.php:229)",{"nodes":363,"edges":372},[364,366,369],{"id":302,"type":303,"label":353,"file":153,"line":365},243,{"id":307,"type":367,"label":368,"file":153,"line":365},"transform","→ rpt_get_object_relation()",{"id":325,"type":308,"label":370,"file":202,"line":27,"wp_function":371},"get_results() [SQLi]","get_results",[373,374],{"from":302,"to":307,"sanitized":185},{"from":307,"to":325,"sanitized":185},"high",{"entryPoint":377,"graph":378,"unsanitizedCount":14,"severity":375},"\u003Cclass.admin.post> (inc\\class.admin.post.php:0)",{"nodes":379,"edges":383},[380,381,382],{"id":302,"type":303,"label":353,"file":153,"line":365},{"id":307,"type":367,"label":368,"file":153,"line":365},{"id":325,"type":308,"label":370,"file":202,"line":27,"wp_function":371},[384,385],{"from":302,"to":307,"sanitized":185},{"from":307,"to":325,"sanitized":185},{"summary":387,"deductions":388},"The \"relation-post-types\" plugin version 1.3.1 presents a mixed security posture. While it boasts no known CVEs and a good percentage of SQL queries using prepared statements, several concerning code signals and taint analysis results raise flags. The presence of dangerous functions like 'unserialize' and 'create_function' is a significant risk, as these can be exploited for code injection if not handled with extreme caution and proper sanitization. Furthermore, the taint analysis reveals two high-severity flows with unsanitized paths, indicating potential for data manipulation or unauthorized access. The plugin also exposes an unprotected AJAX handler, which is a direct entry point for potential attacks. The lack of capability checks on this entry point further exacerbates the risk. While the absence of past vulnerabilities is positive, it doesn't negate the inherent risks identified in the current static analysis. The overall security is weakened by the presence of critical code signals and potential taint flows, despite a low attack surface and good SQL practices.",[389,391,393,395,397,400],{"reason":390,"points":129},"Unprotected AJAX handler",{"reason":392,"points":276},"High severity taint flows (2)",{"reason":394,"points":129},"Dangerous function: unserialize",{"reason":396,"points":129},"Dangerous function: create_function",{"reason":398,"points":399},"Low output escaping percentage",5,{"reason":401,"points":129},"No capability checks on entry points","2026-03-16T20:14:48.676Z",{"wat":404,"direct":411},{"assetPaths":405,"generatorPatterns":407,"scriptPaths":408,"versionParams":409},[406],"\u002Fwp-content\u002Fplugins\u002Frelation-post-types\u002Fressources\u002Fjs\u002Fadmin-post.min.js",[],[406],[410],"relation-post-types\u002Fressources\u002Fjs\u002Fadmin-post.min.js?ver=",{"cssClasses":412,"htmlComments":413,"htmlAttributes":414,"restEndpoints":415,"jsGlobals":416,"shortcodeOutput":418},[],[],[],[],[417],"rpt",[]]