{"id":367962,"date":"2026-09-15T08:05:48","date_gmt":"2026-09-15T08:05:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/acs-portfolio\/"},"modified":"2026-09-15T08:05:32","modified_gmt":"2026-09-15T08:05:32","slug":"acs-portfolio","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/acs-portfolio\/","author":18367462,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1","requires":"7.0","requires_php":"7.4","requires_plugins":null,"header_name":"ACS Portfolio","header_author":"ACS","header_description":"A portfolio post type with an Ajax category filter, a responsive grid, project fields, and an optional download library mode that counts downloads and likes.","assets_banners_color":"6e7988","last_updated":"2026-09-15 08:05:32","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/acs-developer.com\/acs-portfolio\/","header_author_uri":"https:\/\/acs-developer.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":38,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"hanchan","date":"2026-09-15 08:05:32","revision":3696455}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3696455,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3696455,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3696455,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3696455,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3696455,"resolution":"1","location":"assets","locale":"","width":1440,"height":1000},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3696455,"resolution":"2","location":"assets","locale":"","width":1440,"height":985},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3696455,"resolution":"3","location":"assets","locale":"","width":1440,"height":1165},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3696455,"resolution":"4","location":"assets","locale":"","width":1440,"height":1280},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3696455,"resolution":"5","location":"assets","locale":"","width":1440,"height":700}},"screenshots":{"1":"The portfolio on the front end: a responsive grid with Ajax category buttons and a sort drop-down.","2":"Editing one portfolio item. Client, project URL, start and finish dates and the tools you used are all optional.","3":"The settings screen, where the download library mode, the categories to hand out, the terms of use and the button text are set.","4":"Download library mode switched on: every card gains a download button, a like button, the counts and your terms of use.","5":"The portfolio list in the admin, with sortable Downloads and Likes columns."}},"plugin_section":[],"plugin_tags":[5440,210,789,10302,1116],"plugin_category":[43,50],"plugin_contributors":[271046],"plugin_business_model":[],"class_list":["post-367962","plugin","type-plugin","status-publish","hentry","plugin_tags-downloads","plugin_tags-gallery","plugin_tags-portfolio","plugin_tags-projects","plugin_tags-showcase","plugin_category-customization","plugin_category-media","plugin_contributors-hanchan","plugin_committers-hanchan"],"banners":{"banner":"https:\/\/ps.w.org\/acs-portfolio\/assets\/banner-772x250.png?rev=3696455","banner_2x":"https:\/\/ps.w.org\/acs-portfolio\/assets\/banner-1544x500.png?rev=3696455","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/acs-portfolio\/assets\/icon-128x128.png?rev=3696455","icon_2x":"https:\/\/ps.w.org\/acs-portfolio\/assets\/icon-256x256.png?rev=3696455","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/acs-portfolio\/assets\/screenshot-1.png?rev=3696455","caption":"The portfolio on the front end: a responsive grid with Ajax category buttons and a sort drop-down."},{"src":"https:\/\/ps.w.org\/acs-portfolio\/assets\/screenshot-2.png?rev=3696455","caption":"Editing one portfolio item. Client, project URL, start and finish dates and the tools you used are all optional."},{"src":"https:\/\/ps.w.org\/acs-portfolio\/assets\/screenshot-3.png?rev=3696455","caption":"The settings screen, where the download library mode, the categories to hand out, the terms of use and the button text are set."},{"src":"https:\/\/ps.w.org\/acs-portfolio\/assets\/screenshot-4.png?rev=3696455","caption":"Download library mode switched on: every card gains a download button, a like button, the counts and your terms of use."},{"src":"https:\/\/ps.w.org\/acs-portfolio\/assets\/screenshot-5.png?rev=3696455","caption":"The portfolio list in the admin, with sortable Downloads and Likes columns."}],"raw_content":"<!--section=description-->\n<p>A portfolio is two things at once: a wall of work you are proud of, and a list somebody has to keep tidy. <strong>ACS Portfolio<\/strong> is built for the second half.<\/p>\n\n<p>Your work lives in its own post type, away from your blog posts. Each item carries the details a portfolio actually needs \u2014 the client, the finished site, when the work ran, what it was built with \u2014 and you place the whole thing on a page with one shortcode.<\/p>\n\n<h4>Filtering that does not reload the page<\/h4>\n\n<p>Categories become buttons above the grid. Pressing one fetches the matching items over Ajax and fades them in; the visitor never leaves the page or loses their place. A sort drop-down sits next to it: newest, oldest, or by title.<\/p>\n\n<p>Both are optional. <code>show_filter=\"false\"<\/code> and <code>show_sort=\"false\"<\/code> turn them off when you only want a clean grid.<\/p>\n\n<h4>Fields that belong to a project<\/h4>\n\n<ul>\n<li><strong>Client<\/strong> \u2014 printed under the title on the card<\/li>\n<li><strong>Project URL<\/strong> \u2014 adds a link straight to the finished work<\/li>\n<li><strong>Started<\/strong> and <strong>Finished<\/strong> \u2014 either one on its own is fine<\/li>\n<li><strong>Tools and technology<\/strong> \u2014 a comma separated list<\/li>\n<\/ul>\n\n<h4>A download library, if that is what you need<\/h4>\n\n<p>Switch on <strong>download library mode<\/strong> and the same portfolio becomes a page that hands out files. Each item gets a download button, a like button, the terms of use you wrote, and a running count of both.<\/p>\n\n<ul>\n<li>The file is whatever you pick from your own media library. Nothing else can be linked, and file types that can carry code \u2014 SVG, HTML, PHP, shell scripts and the like \u2014 are refused<\/li>\n<li>The download link is an ordinary link, so the count is right even for visitors with JavaScript switched off<\/li>\n<li>The same visitor clicking twice inside five minutes counts once<\/li>\n<li>A like is one per visitor and can be taken back<\/li>\n<li>Pick which categories are handed out, and finished work and downloadable files can live side by side in one portfolio<\/li>\n<li>The post list gains <strong>Downloads<\/strong> and <strong>Likes<\/strong> columns, and both sort<\/li>\n<li>Counters are read only. There is a reset for one item and a reset for everything, for after a test run<\/li>\n<\/ul>\n\n<p>With the mode switched off, none of this is added to your pages.<\/p>\n\n<h4>What it does not do<\/h4>\n\n<p>There is no telemetry, no license check, no update server, no external font and no analytics script. Nothing leaves your site.<\/p>\n\n<p>The one optional exception is a browser side event: if you tick <strong>Analytics event<\/strong> and your theme or your analytics plugin has already loaded <code>gtag<\/code>, a click on a download or a like sends a <code>cta_click<\/code> event to the analytics account <strong>you<\/strong> configured. This plugin loads no analytics code of its own, and with the box unticked it sends nothing.<\/p>\n\n<h4>Coming from ACS Portfolio Pro 3.x<\/h4>\n\n<p>If this site already holds items from ACS Portfolio Pro 3.x, deactivate that plugin and a notice offers to import them. The import moves the items, their categories and their fields over. Nothing is deleted \u2014 the old values stay on each item \u2014 and it only runs when you press the button.<\/p>\n\n<h3>\u65e5\u672c\u8a9e<\/h3>\n\n<p>WordPress \u306b\u30dd\u30fc\u30c8\u30d5\u30a9\u30ea\u30aa\u7528\u306e\u6295\u7a3f\u30bf\u30a4\u30d7\u3092\u8ffd\u52a0\u3057\u3001\u30ab\u30c6\u30b4\u30ea\u7d5e\u308a\u8fbc\u307f\uff08Ajax\u30fb\u30da\u30fc\u30b8\u518d\u8aad\u8fbc\u306a\u3057\uff09\u3001\u4e26\u3073\u66ff\u3048\u3001\u30ec\u30b9\u30dd\u30f3\u30b7\u30d6\u306a\u30b0\u30ea\u30c3\u30c9\u8868\u793a\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u540d\u30fbURL\u30fb\u671f\u9593\u30fb\u4f7f\u7528\u6280\u8853\u306e\u30ab\u30b9\u30bf\u30e0\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u30b7\u30e7\u30fc\u30c8\u30b3\u30fc\u30c9\u306f <code>[acs_portfolio]<\/code> \u3067\u3059\u3002<\/p>\n\n<p>\u300c\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u96c6\u30e2\u30fc\u30c9\u300d\u3092ON\u306b\u3059\u308b\u3068\u3001\u5b9f\u7e3e\u7d39\u4ecb\u3067\u306f\u306a\u304f\u7d20\u6750\u30fb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u914d\u5e03\u30da\u30fc\u30b8\u3068\u3057\u3066\u4f7f\u3048\u307e\u3059\u3002\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30dc\u30bf\u30f3\u30fb\u9ad8\u8a55\u4fa1\u30dc\u30bf\u30f3\u30fb\u5229\u7528\u6761\u4ef6\u306e\u8868\u793a\u3068\u3001\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u6570\u30fb\u9ad8\u8a55\u4fa1\u6570\u306e\u8a18\u9332\u304c\u6709\u52b9\u306b\u306a\u308a\u3001\u6295\u7a3f\u4e00\u89a7\u306b\u300cDownloads\u300d\u300cLikes\u300d\u5217\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3059\u3002\u914d\u5e03\u30d5\u30a1\u30a4\u30eb\u306f\u81ea\u30b5\u30a4\u30c8\u306e\u30e1\u30c7\u30a3\u30a2\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u3082\u306e\u3060\u3051\u3067\u3001SVG \u306a\u3069\u5371\u967a\u306a\u5f62\u5f0f\u306f\u9078\u3079\u307e\u305b\u3093\u3002\u65e2\u5b9a\u306fOFF\u3067\u3001OFF\u306e\u9593\u306f\u30d5\u30ed\u30f3\u30c8\u306b\u4f55\u3082\u8ffd\u52a0\u3055\u308c\u307e\u305b\u3093\u3002<\/p>\n\n<p>\u30e9\u30a4\u30bb\u30f3\u30b9\u8a8d\u8a3c\u30fb\u66f4\u65b0\u30b5\u30fc\u30d0\u30fc\u30fb\u5916\u90e8\u9001\u4fe1\u30fb\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u306f\u3042\u308a\u307e\u305b\u3093\u3002GA4\u30a4\u30d9\u30f3\u30c8\uff08<code>cta_click<\/code>\uff09\u306e\u9001\u51fa\u3060\u3051\u306f\u8a2d\u5b9a\u3067ON\u306b\u3067\u304d\u3001\u305d\u306e\u5834\u5408\u3082\u30b5\u30a4\u30c8\u5074\u306b\u3059\u3067\u306b <code>gtag<\/code> \u304c\u8aad\u307f\u8fbc\u307e\u308c\u3066\u3044\u308b\u3068\u304d\u306b\u306e\u307f\u52d5\u4f5c\u3057\u307e\u3059\u3002<\/p>\n\n<p>\u7ba1\u7406\u753b\u9762\u306f\u82f1\u8a9e\u8868\u8a18\u3067\u3059\u3002\u7ffb\u8a33\u306f translate.wordpress.org \u3067\u63d0\u4f9b\u3055\u308c\u3001\u8a33\u304c\u63c3\u3046\u3068 WordPress \u304c\u81ea\u52d5\u3067\u53d6\u5f97\u3057\u307e\u3059\uff08\u30d7\u30e9\u30b0\u30a4\u30f3\u306b\u7ffb\u8a33\u30d5\u30a1\u30a4\u30eb\u306f\u540c\u68b1\u3057\u3066\u3044\u307e\u305b\u3093\uff09\u3002<\/p>\n\n<p>\u30b5\u30dd\u30fc\u30c8\u7a93\u53e3: https:\/\/acs-developer.com\/forum\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin under Plugins &gt; Add New &gt; Upload Plugin, then activate it<\/li>\n<li>Open <strong>Portfolio &gt; Categories<\/strong> and add the categories you want as filter buttons<\/li>\n<li>Open <strong>Portfolio &gt; Add New<\/strong> and write your first item. Set a featured image; the card uses it<\/li>\n<li>Put <code>[acs_portfolio]<\/code> on any page<\/li>\n<li>Optional: open <strong>Portfolio &gt; Settings<\/strong> to switch on the download library<\/li>\n<\/ol>\n\n<p>Shortcode attributes:<\/p>\n\n<ul>\n<li><code>limit=\"6\"<\/code> \u2014 show at most this many items, <code>-1<\/code> for all<\/li>\n<li><code>category=\"web-design\"<\/code> \u2014 one category only, or several separated by commas<\/li>\n<li><code>show_filter=\"false\"<\/code> \u2014 hide the category buttons<\/li>\n<li><code>show_sort=\"false\"<\/code> \u2014 hide the sort drop-down<\/li>\n<li><code>download_only=\"true\"<\/code> \u2014 show only the categories that are handed out as downloads<\/li>\n<\/ul>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20have%20to%20use%20the%20download%20library%3F\"><h3>Do I have to use the download library?<\/h3><\/dt>\n<dd><p>No. It is off when you install the plugin, and while it is off nothing is added to the front end \u2014 no buttons, no counters, no extra markup. Switch it on only if you want the portfolio to hand out files.<\/p><\/dd>\n<dt id=\"which%20files%20can%20be%20handed%20out%3F\"><h3>Which files can be handed out?<\/h3><\/dt>\n<dd><p>Only attachments that are already in this site's media library. Anything that can carry code is refused: SVG, HTML, XML, JavaScript, PHP, shell scripts and Windows executables. If you do not pick a file, the full size featured image is offered instead, which is what a photo or texture library usually wants.<\/p><\/dd>\n<dt id=\"are%20the%20download%20counts%20accurate%3F\"><h3>Are the download counts accurate?<\/h3><\/dt>\n<dd><p>They count a real request for the file, not a click, so they are still right for visitors with JavaScript switched off. The same visitor is only counted once every five minutes, so a double click or a retry does not inflate the number. Likes are one per visitor, remembered in a cookie and, as a backstop, in a short lived record keyed by a hash of the address \u2014 the address itself is never stored.<\/p><\/dd>\n<dt id=\"does%20anything%20leave%20my%20site%3F\"><h3>Does anything leave my site?<\/h3><\/dt>\n<dd><p>Nothing is sent by the plugin. It has no license check, no update server and no telemetry, and it loads no font or script from anywhere else. The one thing that can leave the visitor's browser is the optional <code>cta_click<\/code> analytics event, and only when you tick that box and your site has already loaded <code>gtag<\/code> for your own analytics account.<\/p><\/dd>\n<dt id=\"can%20i%20change%20how%20a%20card%20looks%3F\"><h3>Can I change how a card looks?<\/h3><\/dt>\n<dd><p>Yes. Copy <code>templates\/portfolio-item.php<\/code> out of the plugin, put it in your theme, and point the <code>acs_portfolio_item_template<\/code> filter at your copy. The query, the wrapper classes, the sort options and the shortcode attributes each have a filter as well.<\/p><\/dd>\n<dt id=\"i%20already%20use%20acs%20portfolio%20pro%203.%20what%20happens%20to%20my%20items%3F\"><h3>I already use ACS Portfolio Pro 3. What happens to my items?<\/h3><\/dt>\n<dd><p>Deactivate version 3 first, then activate this plugin. A notice tells you how many items it found and offers to import them. The import keeps the items, the categories and every field; the old values are left on each item, so nothing is destroyed if you change your mind. Afterwards open Settings &gt; Permalinks and press Save once so the links are rebuilt.<\/p><\/dd>\n<dt id=\"where%20do%20i%20ask%20for%20help%3F\"><h3>Where do I ask for help?<\/h3><\/dt>\n<dd><p>At https:\/\/acs-developer.com\/forum\/ \u2014 please include your WordPress version, your PHP version and the shortcode you used.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"A portfolio you can filter without a page reload, and, when you want it, a download page that counts how often each file is taken.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/367962","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=367962"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/hanchan"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=367962"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=367962"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=367962"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=367962"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=367962"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=367962"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}