{"id":75,"date":"2026-09-20T17:38:35","date_gmt":"2026-09-20T16:38:35","guid":{"rendered":"https:\/\/lg-systems.net\/lgs\/?page_id=75"},"modified":"2026-09-20T18:02:55","modified_gmt":"2026-09-20T17:02:55","slug":"montrafolio-pt","status":"publish","type":"page","link":"https:\/\/lg-systems.net\/lgs\/pt\/montrafolio-pt\/","title":{"rendered":"MontraFolio"},"content":{"rendered":"\n<style>\n.lgmf {\n  --lgmf-fg:#1c1c1e; --lgmf-muted:#5a5a60; --lgmf-line:#e2e2e6;\n  --lgmf-accent:#2b5bb5; --lgmf-accent-fg:#fff; --lgmf-soft:#f4f6fa;\n  --lgmf-ok:#1f7a4d;\n  color: var(--lgmf-fg); line-height: 1.65; max-width: 62rem; margin: 0 auto;\n}\n@media (prefers-color-scheme: dark) {\n  .lgmf {\n    --lgmf-fg:#e8e8ea; --lgmf-muted:#a0a0a8; --lgmf-line:#33333a;\n    --lgmf-accent:#7aa2e8; --lgmf-accent-fg:#10131a; --lgmf-soft:#1e2027;\n    --lgmf-ok:#5cc48d;\n  }\n}\n.lgmf * { box-sizing: border-box; }\n.lgmf h1, .lgmf h2, .lgmf h3 { line-height: 1.25; }\n.lgmf h1 { font-size: clamp(1.9rem, 1.2rem + 2.4vw, 2.9rem); margin: 0 0 .6rem; letter-spacing: -.02em; }\n.lgmf h2 { font-size: clamp(1.35rem, 1.1rem + 1vw, 1.75rem); margin: 0 0 .9rem; letter-spacing: -.01em; }\n.lgmf h3 { font-size: 1.05rem; margin: 0 0 .35rem; }\n.lgmf p { margin: 0 0 1rem; }\n.lgmf ul { margin: 0 0 1rem; padding-left: 1.25rem; }\n.lgmf li { margin-bottom: .35rem; }\n.lgmf a { color: var(--lgmf-accent); }\n.lgmf strong { font-weight: 600; }\n.lgmf code { font-size: .92em; }\n\n.lgmf .lgmf-section { padding: 2.6rem 0; border-top: 1px solid var(--lgmf-line); }\n.lgmf .lgmf-section:first-child { border-top: 0; padding-top: 1rem; }\n.lgmf .lgmf-lead { font-size: 1.15rem; color: var(--lgmf-muted); max-width: 42rem; }\n.lgmf .lgmf-kicker {\n  display: inline-block; font-size: .78rem; font-weight: 600; letter-spacing: .09em;\n  text-transform: uppercase; color: var(--lgmf-accent); margin: 0 0 .8rem;\n}\n.lgmf .lgmf-center { text-align: center; }\n.lgmf .lgmf-center .lgmf-lead { margin-left: auto; margin-right: auto; }\n\n\/* --- Hero ------------------------------------------------------------- *\/\n.lgmf .lgmf-hero { padding: 1rem 0 2.6rem; }\n.lgmf .lgmf-hero p.lgmf-lead { font-size: 1.25rem; }\n.lgmf .lgmf-badges { display: flex; flex-wrap: wrap; gap: .45rem; margin: 1.4rem 0 0; padding: 0; list-style: none; }\n.lgmf .lgmf-badges li {\n  margin: 0; font-size: .85rem; color: var(--lgmf-muted);\n  border: 1px solid var(--lgmf-line); border-radius: 999px; padding: .3rem .85rem;\n}\n\n\/* --- Bot\u00f5es ----------------------------------------------------------- *\/\n.lgmf .lgmf-cta { display: flex; flex-wrap: wrap; gap: .7rem; margin: 1.6rem 0 .8rem; }\n.lgmf .lgmf-btn {\n  display: inline-flex; align-items: center; gap: .5rem; text-decoration: none;\n  font-weight: 600; font-size: .98rem; padding: .7rem 1.35rem; border-radius: 8px;\n  border: 1px solid var(--lgmf-accent); color: var(--lgmf-accent); background: transparent;\n}\n.lgmf .lgmf-btn:hover { background: var(--lgmf-soft); }\n.lgmf .lgmf-btn-primary { background: var(--lgmf-accent); color: var(--lgmf-accent-fg); }\n.lgmf .lgmf-btn-primary:hover { filter: brightness(1.08); background: var(--lgmf-accent); }\n.lgmf .lgmf-btn svg { width: 1.05em; height: 1.05em; flex: none; }\n.lgmf .lgmf-note { font-size: .88rem; color: var(--lgmf-muted); }\n\n\/* --- Grelhas ---------------------------------------------------------- *\/\n.lgmf .lgmf-grid { display: grid; gap: 1.1rem; grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr)); }\n.lgmf .lgmf-card {\n  border: 1px solid var(--lgmf-line); border-radius: 12px; padding: 1.25rem 1.3rem; background: var(--lgmf-soft);\n}\n.lgmf .lgmf-card p:last-child { margin-bottom: 0; }\n.lgmf .lgmf-card p { font-size: .95rem; }\n.lgmf .lgmf-icon { color: var(--lgmf-accent); margin-bottom: .6rem; display: block; }\n.lgmf .lgmf-icon svg { width: 1.6rem; height: 1.6rem; }\n\n\/* --- Passos ----------------------------------------------------------- *\/\n.lgmf ol.lgmf-steps { counter-reset: lgmf-step; list-style: none; padding: 0; margin: 0; display: grid; gap: 1.1rem; grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr)); }\n.lgmf ol.lgmf-steps li { counter-increment: lgmf-step; margin: 0; padding-top: 2.6rem; position: relative; }\n.lgmf ol.lgmf-steps li::before {\n  content: counter(lgmf-step); position: absolute; top: 0; left: 0;\n  width: 1.9rem; height: 1.9rem; border-radius: 999px;\n  background: var(--lgmf-accent); color: var(--lgmf-accent-fg);\n  display: flex; align-items: center; justify-content: center;\n  font-size: .95rem; font-weight: 700;\n}\n.lgmf ol.lgmf-steps p { font-size: .95rem; margin: 0; color: var(--lgmf-muted); }\n\n\/* --- Antes\/depois ----------------------------------------------------- *\/\n.lgmf .lgmf-compare { display: grid; gap: 1.1rem; grid-template-columns: repeat(auto-fit, minmax(17rem, 1fr)); }\n.lgmf .lgmf-compare > div { border: 1px solid var(--lgmf-line); border-radius: 12px; padding: 1.25rem 1.3rem; }\n.lgmf .lgmf-compare ul { margin: 0; padding-left: 1.15rem; font-size: .95rem; }\n.lgmf .lgmf-compare h3 { display: flex; align-items: center; gap: .45rem; margin-bottom: .7rem; }\n.lgmf .lgmf-after { background: var(--lgmf-soft); border-color: var(--lgmf-accent) !important; }\n.lgmf .lgmf-after h3 { color: var(--lgmf-ok); }\n\n\/* --- Tabela ----------------------------------------------------------- *\/\n.lgmf .lgmf-tablewrap { overflow-x: auto; }\n.lgmf table { border-collapse: collapse; width: 100%; font-size: .95rem; margin: 0; }\n.lgmf th, .lgmf td { text-align: left; padding: .6rem .8rem; border-bottom: 1px solid var(--lgmf-line); vertical-align: top; }\n.lgmf th { font-weight: 600; white-space: nowrap; }\n\/* Dois elementos fecham com uma linha sua: uma tabela, pela borda da \u00faltima\n   linha, e a lista de perguntas frequentes, pela borda do \u00faltimo <details>.\n   Quando a sec\u00e7\u00e3o acaba num deles, o separador da sec\u00e7\u00e3o seguinte vinha\n   somar-se-lhe \u2014 duas linhas iguais com o v\u00e3o das duas sec\u00e7\u00f5es pelo meio, que\n   se leem como uma linha vazia. O elemento mant\u00e9m a sua borda; \u00e9 a sec\u00e7\u00e3o\n   seguinte que n\u00e3o desenha o separador, porque ele j\u00e1 foi desenhado. *\/\n.lgmf .lgmf-section:has(> :is(.lgmf-tablewrap, details):last-child) + .lgmf-section { border-top: 0; }\n\n\/* --- Instala\u00e7\u00e3o ------------------------------------------------------- *\/\n.lgmf .lgmf-dl { display: grid; gap: .9rem; grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); }\n.lgmf .lgmf-dl a, .lgmf .lgmf-dl div {\n  display: block; text-decoration: none; color: inherit;\n  border: 1px solid var(--lgmf-line); border-radius: 12px; padding: 1.05rem 1.2rem;\n}\n.lgmf .lgmf-dl a:hover { border-color: var(--lgmf-accent); background: var(--lgmf-soft); }\n.lgmf .lgmf-dl strong { display: block; color: var(--lgmf-accent); margin-bottom: .2rem; }\n.lgmf .lgmf-dl span { font-size: .89rem; color: var(--lgmf-muted); }\n\n\/* --- FAQ -------------------------------------------------------------- *\/\n.lgmf details { border-bottom: 1px solid var(--lgmf-line); padding: .85rem 0; }\n.lgmf summary { cursor: pointer; font-weight: 600; list-style: none; }\n.lgmf summary::-webkit-details-marker { display: none; }\n.lgmf summary::before { content: \"+\"; color: var(--lgmf-accent); font-weight: 700; margin-right: .55rem; }\n.lgmf details[open] summary::before { content: \"\u2013\"; }\n.lgmf details p { margin: .7rem 0 0; font-size: .95rem; color: var(--lgmf-muted); }\n\n\/* --- Rodap\u00e9 ----------------------------------------------------------- *\/\n.lgmf .lgmf-foot { font-size: .88rem; color: var(--lgmf-muted); padding-top: 1.6rem; border-top: 1px solid var(--lgmf-line); }\n<\/style>\n\n<div class=\"lgmf\">\n\n  <!-- ============================ HERO ============================ -->\n  <section class=\"lgmf-hero\">\n    <span class=\"lgmf-kicker\">Plugin para WordPress \u00b7 Gratuito no diret\u00f3rio oficial<\/span>\n    <h1>MontraFolio<\/h1>\n    <p class=\"lgmf-lead\">D\u00e1 a cada utilizador do site um <strong>portef\u00f3lio de imagens seu<\/strong> \u2014 e \u00e0 organiza\u00e7\u00e3o os portef\u00f3lios partilhados de eventos, visitas e campanhas, com contribuidores designados. As imagens ficam numa <strong>pasta privada<\/strong>, fora da Biblioteca multim\u00e9dia.<\/p>\n\n    <div class=\"lgmf-cta\">\n      <a class=\"lgmf-btn lgmf-btn-primary\" href=\"https:\/\/wordpress.org\/plugins\/montrafolio\/\" target=\"_blank\" rel=\"noopener\">\n        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 3v12\"\/><path d=\"M7.5 10.5L12 15l4.5-4.5\"\/><path d=\"M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2\"\/><\/svg>\n        Instalar do WordPress.org\n      <\/a>\n      <a class=\"lgmf-btn\" href=\"#lgmf-instalar\">\n        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M12 11v5\"\/><path d=\"M12 8h.01\"\/><\/svg>\n        Como se instala\n      <\/a>\n    <\/div>\n    <p class=\"lgmf-note\">Instala-se como qualquer plugin do diret\u00f3rio: <em>Plugins \u2192 Adicionar novo<\/em>, procurar por <strong>MontraFolio<\/strong>, instalar e ativar. Sem criar conta, sem chave de licen\u00e7a, sem servi\u00e7o externo.<\/p>\n\n    <ul class=\"lgmf-badges\">\n      <li>As imagens nunca saem do seu servidor<\/li>\n      <li>Feito primeiro para <em>mobile<\/em><\/li>\n      <li>Tr\u00eas blocos e tr\u00eas shortcodes<\/li>\n      <li>Atualiza-se pelo WordPress, como os outros<\/li>\n      <li>Portugu\u00eas \u00b7 English \u00b7 Espa\u00f1ol<\/li>\n      <li>WordPress&nbsp;6.5+ \u00b7 PHP&nbsp;8.1+<\/li>\n    <\/ul>\n  <\/section>\n\n  <!-- ======================= PROBLEMA \/ SOLU\u00c7\u00c3O ==================== -->\n  <section class=\"lgmf-section\">\n    <span class=\"lgmf-kicker\">O problema<\/span>\n    <h2>A Biblioteca multim\u00e9dia n\u00e3o foi feita para isto<\/h2>\n    <p class=\"lgmf-lead\">Quando s\u00e3o trezentas pessoas a publicar fotografias \u2014 alunos, formandos, s\u00f3cios, colaboradores \u2014 o WordPress s\u00f3 tem um s\u00edtio para as p\u00f4r: o mesmo monte partilhado, servido por um endere\u00e7o p\u00fablico que qualquer pessoa pode passar a outra. E para l\u00e1 chegarem, toda a gente precisa do <em>backoffice<\/em>.<\/p>\n\n    <div class=\"lgmf-compare\">\n      <div>\n        <h3>Sem o MontraFolio<\/h3>\n        <ul>\n          <li>Todas as imagens no mesmo monte da Biblioteca<\/li>\n          <li>Quem souber o endere\u00e7o v\u00ea o ficheiro, sempre<\/li>\n          <li>Ou se d\u00e1 acesso ao wp-admin a toda a gente, ou n\u00e3o se d\u00e1 a ningu\u00e9m<\/li>\n          <li>Uma p\u00e1gina constru\u00edda \u00e0 m\u00e3o por cada turma, evento ou visita<\/li>\n          <li>Fotografias de 8&nbsp;MB vindas do telem\u00f3vel, uma a uma<\/li>\n          <li>Ningu\u00e9m sabe quem carregou o qu\u00ea, nem quando<\/li>\n        <\/ul>\n      <\/div>\n      <div class=\"lgmf-after\">\n        <h3>Com o MontraFolio<\/h3>\n        <ul>\n          <li>Cada pessoa com o seu portef\u00f3lio e as suas cole\u00e7\u00f5es<\/li>\n          <li>Ficheiros numa pasta que o servidor n\u00e3o serve; o plugin decide quem v\u00ea cada imagem<\/li>\n          <li>Uma \u00e1rea pr\u00f3pria para quem publica; o wp-admin fica para quem administra o site<\/li>\n          <li>A p\u00e1gina do portef\u00f3lio e a galeria de cada cole\u00e7\u00e3o nascem feitas<\/li>\n          <li>A imagem \u00e9 redimensionada no telem\u00f3vel <em>antes<\/em> de subir<\/li>\n          <li>Cada carregamento e cada designa\u00e7\u00e3o ficam registados<\/li>\n        <\/ul>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <!-- =========================== PASSOS =========================== -->\n  <section class=\"lgmf-section\">\n    <span class=\"lgmf-kicker\">Como funciona<\/span>\n    <h2>Quatro passos, e o site fica pronto<\/h2>\n    <ol class=\"lgmf-steps\">\n      <li>\n        <h3>Instalar<\/h3>\n        <p>Procurar por MontraFolio em <em>Plugins \u2192 Adicionar novo<\/em> e ativar. A pasta privada e as tabelas nascem a\u00ed. Em <em>Configura\u00e7\u00f5es<\/em> escolhe as palavras dos endere\u00e7os e os limites com que nascem os portef\u00f3lios.<\/p>\n      <\/li>\n      <li>\n        <h3>Decidir quem entra<\/h3>\n        <p>No cart\u00e3o <em>Permiss\u00f5es por Papel<\/em>, dentro de <em>Configura\u00e7\u00f5es<\/em>, decide quem administra portef\u00f3lios. Ser dono ou contribuidor n\u00e3o \u00e9 um papel: qualquer utilizador que consiga entrar pode ter o seu.<\/p>\n      <\/li>\n      <li>\n        <h3>Publicar<\/h3>\n        <p>Quem publica trabalha na \u00e1rea do portef\u00f3lio, em <code>\/p-admin\/<\/code>: c\u00e2mara, galeria do telem\u00f3vel ou uma pasta arrastada no computador, ordem ao toque, legendas.<\/p>\n      <\/li>\n      <li>\n        <h3>Mostrar<\/h3>\n        <p>Cada portef\u00f3lio tem a sua p\u00e1gina e cada cole\u00e7\u00e3o a sua galeria, no endere\u00e7o que escolheu. Ou entram numa p\u00e1gina do tema, com um bloco.<\/p>\n      <\/li>\n    <\/ol>\n  <\/section>\n\n  <!-- ========================= VANTAGENS =========================== -->\n  <section class=\"lgmf-section\">\n    <span class=\"lgmf-kicker\">Porqu\u00ea este e n\u00e3o outro<\/span>\n    <h2>O que o distingue<\/h2>\n    <div class=\"lgmf-grid\">\n\n      <div class=\"lgmf-card\">\n        <span class=\"lgmf-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect x=\"4\" y=\"10\" width=\"16\" height=\"11\" rx=\"2\"\/><path d=\"M8 10V7a4 4 0 0 1 8 0v3\"\/><\/svg><\/span>\n        <h3>Privado por constru\u00e7\u00e3o<\/h3>\n        <p>Nada vai para a Biblioteca multim\u00e9dia. Os ficheiros ficam numa pasta que o servidor web n\u00e3o serve, com nomes que ningu\u00e9m adivinha, e \u00e9 o plugin que verifica quem pode ver cada imagem antes de a entregar. Uma cole\u00e7\u00e3o escondida est\u00e1 mesmo escondida.<\/p>\n      <\/div>\n\n      <div class=\"lgmf-card\">\n        <span class=\"lgmf-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect x=\"7\" y=\"2\" width=\"10\" height=\"20\" rx=\"2\"\/><path d=\"M11 18h2\"\/><\/svg><\/span>\n        <h3>Feito primeiro para <em>mobile<\/em><\/h3>\n        <p>Carregar da c\u00e2mara ou da galeria, redimensionar na pr\u00f3pria m\u00e1quina antes de subir, reordenar ao toque, folhear o carrossel com o dedo. No computador, arrastar uma pasta inteira alimenta o mesmo caminho. Fotografias HEIC do iPhone s\u00e3o aceites sem configurar nada.<\/p>\n      <\/div>\n\n      <div class=\"lgmf-card\">\n        <span class=\"lgmf-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M16 20v-1.5a3.5 3.5 0 0 0-3.5-3.5h-5A3.5 3.5 0 0 0 4 18.5V20\"\/><circle cx=\"10\" cy=\"8\" r=\"3.5\"\/><path d=\"M17 11l2 2 4-4\"\/><\/svg><\/span>\n        <h3>Ningu\u00e9m precisa do wp-admin<\/h3>\n        <p>Donos e contribuidores trabalham numa \u00e1rea do plugin, no endere\u00e7o que o site escolher. Quem tem apenas um papel de leitura entra ali depois de iniciar sess\u00e3o e nunca v\u00ea o painel do WordPress. Um dono administra o seu portef\u00f3lio; os contribuidores publicam nas cole\u00e7\u00f5es que lhes foram dadas.<\/p>\n      <\/div>\n\n      <div class=\"lgmf-card\">\n        <span class=\"lgmf-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 6h16\"\/><path d=\"M6 11h12\"\/><path d=\"M8 16h8\"\/><path d=\"M10 21h4\"\/><\/svg><\/span>\n        <h3>Limites a quatro n\u00edveis<\/h3>\n        <p>As <em>Configura\u00e7\u00f5es<\/em> dizem com que limites nasce um portef\u00f3lio e uma cole\u00e7\u00e3o; depois cada portef\u00f3lio tem o seu teto de espa\u00e7o e de imagens, uma cole\u00e7\u00e3o pode apert\u00e1-lo e cada contribuidor pode ser apertado ainda mais. Nenhum n\u00edvel concede mais do que o de cima, e reduzir um limite nunca apaga nada \u2014 s\u00f3 decide o que o pr\u00f3ximo carregamento pode acrescentar.<\/p>\n      <\/div>\n\n      <div class=\"lgmf-card\">\n        <span class=\"lgmf-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\"\/><path d=\"M10 9.5l5 2.5-5 2.5z\"\/><\/svg><\/span>\n        <h3>V\u00eddeos no meio das imagens<\/h3>\n        <p>Cole o endere\u00e7o de um v\u00eddeo do YouTube, Vimeo, Dailymotion ou TikTok e ele ocupa o seu lugar entre as imagens, na mesma ordem, com legenda e observa\u00e7\u00e3o \u2014 pode at\u00e9 ser a capa. Do v\u00eddeo guarda-se aqui apenas a miniatura, e a p\u00e1gina p\u00fablica n\u00e3o contacta ningu\u00e9m enquanto o visitante n\u00e3o carregar em <em>play<\/em>.<\/p>\n      <\/div>\n\n      <div class=\"lgmf-card\">\n        <span class=\"lgmf-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 3l7.5 3.4v5c0 4.4-3.1 8.4-7.5 9.6-4.4-1.2-7.5-5.2-7.5-9.6v-5L12 3z\"\/><path d=\"M9 12l2 2 4-4\"\/><\/svg><\/span>\n        <h3>Nunca comunica nada a lado nenhum<\/h3>\n        <p>Sem telemetria: nem contadores, nem dom\u00ednio, nem vers\u00f5es. O plugin n\u00e3o reporta o que quer que seja sobre o seu site a ningu\u00e9m. Os \u00fanicos pedidos que alguma vez saem s\u00e3o os que os v\u00eddeos precisam \u2014 e est\u00e3o todos listados na p\u00e1gina, servi\u00e7o a servi\u00e7o.<\/p>\n      <\/div>\n\n    <\/div>\n  <\/section>\n\n  <!-- ================= ONDE APARECE \/ BLOCOS ====================== -->\n  <section class=\"lgmf-section\">\n    <span class=\"lgmf-kicker\">Dentro do seu tema<\/span>\n    <h2>Tr\u00eas blocos, e o portef\u00f3lio entra em qualquer p\u00e1gina<\/h2>\n    <p class=\"lgmf-lead\">O plugin serve as suas pr\u00f3prias p\u00e1ginas \u2014 a do portef\u00f3lio e a galeria de cada cole\u00e7\u00e3o \u2014 mas nada obriga a us\u00e1-las. O mesmo conte\u00fado entra numa p\u00e1gina do tema por um bloco, ou pelo shortcode equivalente.<\/p>\n    <div class=\"lgmf-tablewrap\">\n      <table>\n        <thead><tr><th>Bloco<\/th><th>O que mostra<\/th><th>Shortcode<\/th><\/tr><\/thead>\n        <tbody>\n          <tr><td>MontraFolio \u2013 Cole\u00e7\u00e3o<\/td><td>A galeria de uma cole\u00e7\u00e3o, em mosaico, em carrossel ou nos dois, com <em>lightbox<\/em><\/td><td><code>&#91;mtfl_collection portfolio=\"ana\" collection=\"viagem\"&#93;<\/code><\/td><\/tr>\n          <tr><td>MontraFolio \u2013 Portef\u00f3lio<\/td><td>As cole\u00e7\u00f5es de um portef\u00f3lio, como cart\u00f5es<\/td><td><code>&#91;mtfl_portfolio&#93;<\/code><\/td><\/tr>\n          <tr><td>MontraFolio \u2013 Detalhes<\/td><td>A capa, o autor e a descri\u00e7\u00e3o de qualquer um dos dois<\/td><td><code>&#91;mtfl_details&#93;<\/code><\/td><\/tr>\n        <\/tbody>\n      <\/table>\n    <\/div>\n    <p class=\"lgmf-note\">O bloco Cole\u00e7\u00e3o herda o que o dono prop\u00f4s quando n\u00e3o lhe \u00e9 dito outra coisa. Uma lista de cole\u00e7\u00f5es pode apontar todas as linhas para a mesma p\u00e1gina, de modo que uma s\u00f3 p\u00e1gina sirva de \u00edndice e de galeria daquela que o visitante escolher.<\/p>\n  <\/section>\n\n  <!-- ================== DADOS PESSOAIS \/ RGPD ===================== -->\n  <section class=\"lgmf-section\">\n    <span class=\"lgmf-kicker\">O pormenor que evita problemas<\/span>\n    <h2>Fotografias de pessoas s\u00e3o dados pessoais<\/h2>\n    <p class=\"lgmf-lead\">Um site que deixa trezentas pessoas publicar fotografias tem obriga\u00e7\u00f5es no dia em que uma delas pedir os seus dados, ou sair. O plugin trata disso sem plugins adicionais.<\/p>\n    <div class=\"lgmf-tablewrap\">\n      <table>\n        <thead><tr><th>O que<\/th><th>Como<\/th><\/tr><\/thead>\n        <tbody>\n          <tr><td>Metadados da c\u00e2mara<\/td><td>As imagens s\u00e3o guardadas sem eles \u2014 nem o modelo, nem a data, nem as coordenadas do s\u00edtio onde foi tirada<\/td><\/tr>\n          <tr><td>Exportar dados pessoais<\/td><td><em>Ferramentas \u2192 Exportar dados pessoais<\/em> inclui tudo o que o plugin guarda sobre a conta<\/td><\/tr>\n          <tr><td>Eliminar dados pessoais<\/td><td><em>Ferramentas \u2192 Eliminar dados pessoais<\/em> apaga o portef\u00f3lio pessoal com as suas imagens, liberta os portef\u00f3lios atribu\u00eddos sem lhes tocar no conte\u00fado e anonimiza quem carregou o qu\u00ea nos outros<\/td><\/tr>\n          <tr><td>Contas que ficaram para tr\u00e1s<\/td><td>Uma regra de reten\u00e7\u00e3o pode remover portef\u00f3lios pessoais sem atividade: o dono \u00e9 avisado com muita anteced\u00eancia e mant\u00e9m-no com um bot\u00e3o<\/td><\/tr>\n          <tr><td>Pol\u00edtica de privacidade<\/td><td>Os par\u00e1grafos a incluir s\u00e3o sugeridos na p\u00e1gina de privacidade do WordPress<\/td><\/tr>\n          <tr><td>Termos de conte\u00fado<\/td><td>Quem publica aceita-os antes do primeiro carregamento; a vers\u00e3o e a data ficam guardadas<\/td><\/tr>\n        <\/tbody>\n      <\/table>\n    <\/div>\n  <\/section>\n\n  <!-- ======================== P\u00daBLICO-ALVO ======================== -->\n  <section class=\"lgmf-section\">\n    <span class=\"lgmf-kicker\">Para quem \u00e9<\/span>\n    <h2>Se muita gente tem fotografias para mostrar, \u00e9 para si<\/h2>\n    <div class=\"lgmf-tablewrap\">\n      <table>\n        <thead><tr><th>Quem<\/th><th>O que publica<\/th><\/tr><\/thead>\n        <tbody>\n          <tr><td>Escolas e centros de forma\u00e7\u00e3o<\/td><td>Portef\u00f3lios de alunos e formandos, visitas de estudo, projetos de turma, exposi\u00e7\u00f5es<\/td><\/tr>\n          <tr><td>Universidades e cursos de artes<\/td><td>Trabalhos de disciplina, portef\u00f3lios de fim de curso, arquivo dos ateliers<\/td><\/tr>\n          <tr><td>C\u00e2maras e juntas de freguesia<\/td><td>Eventos, obras, festas do concelho, arquivo fotogr\u00e1fico por ano<\/td><\/tr>\n          <tr><td>Associa\u00e7\u00f5es e clubes<\/td><td>Provas, conv\u00edvios, digress\u00f5es, cada sec\u00e7\u00e3o com as suas cole\u00e7\u00f5es<\/td><\/tr>\n          <tr><td>Fot\u00f3grafos e est\u00fadios<\/td><td>Galerias por trabalho, umas p\u00fablicas e outras escondidas at\u00e9 serem mostradas<\/td><\/tr>\n          <tr><td>Empresas e marketing<\/td><td>Campanhas, feiras, cat\u00e1logo interno, com quem publica sem entrar no backoffice<\/td><\/tr>\n        <\/tbody>\n      <\/table>\n    <\/div>\n  <\/section>\n\n  <!-- ======================== INSTALA\u00c7\u00c3O ========================== -->\n  <section class=\"lgmf-section\" id=\"lgmf-instalar\">\n    <span class=\"lgmf-kicker\">Instalar<\/span>\n    <h2>Procurar, instalar, ativar<\/h2>\n    <!-- Preenchido pelo script a partir do update.json; sem fetch fica\n         escondido \u2014 um n\u00famero est\u00e1tico ficaria errado no deploy seguinte,\n         porque esta p\u00e1gina n\u00e3o \u00e9 republicada a cada vers\u00e3o. -->\n    <p class=\"lgmf-note lgmf-version\" hidden>Vers\u00e3o <strong class=\"lgmf-version-num\"><\/strong><span class=\"lgmf-version-date\"><\/span><\/p>\n    <div class=\"lgmf-dl\">\n      <a href=\"https:\/\/wordpress.org\/plugins\/montrafolio\/\" target=\"_blank\" rel=\"noopener\">\n        <strong>Ficha no WordPress.org<\/strong>\n        <span>A p\u00e1gina do plugin no diret\u00f3rio, com o hist\u00f3rico de vers\u00f5es, as avalia\u00e7\u00f5es e o f\u00f3rum de apoio.<\/span>\n      <\/a>\n      <div>\n        <strong>Do painel do site<\/strong>\n        <span><em>Plugins \u2192 Adicionar novo<\/em>, procurar por <strong>MontraFolio<\/strong>, <em>Instalar agora<\/em> e <em>Ativar<\/em>. A pasta privada das imagens e as tabelas s\u00e3o criadas nessa altura.<\/span>\n      <\/div>\n      <div>\n        <strong>Primeiros passos<\/strong>\n        <span><em>MontraFolio \u2192 Configura\u00e7\u00f5es<\/em> para as palavras dos endere\u00e7os e os limites de carregamento, e o cart\u00e3o <em>Permiss\u00f5es por Papel<\/em>, no mesmo ecr\u00e3, para decidir quem administra portef\u00f3lios.<\/span>\n      <\/div>\n      <a href=\"https:\/\/lg-systems.net\/lgs\/wp-dev\/montrafolio\/montrafolio-latest.zip\">\n        <strong>Zip, para instalar \u00e0 m\u00e3o<\/strong>\n        <span>Para sites que instalam por <em>Carregar plugin<\/em> ou por FTP, e para quem quer guardar a vers\u00e3o que p\u00f4s em produ\u00e7\u00e3o.<\/span>\n      <\/a>\n    <\/div>\n    <p class=\"lgmf-note\" style=\"margin-top:1rem\">As atualiza\u00e7\u00f5es chegam pelo mecanismo normal do WordPress, como as de qualquer plugin do diret\u00f3rio. O plugin n\u00e3o tem canal de atualiza\u00e7\u00e3o pr\u00f3prio, n\u00e3o vai perguntar nada a servidores nossos e n\u00e3o sabe sequer o endere\u00e7o do seu site.<\/p>\n  <\/section>\n\n  <!-- ========================= REQUISITOS ========================= -->\n  <section class=\"lgmf-section\" id=\"lgmf-requisitos\">\n    <span class=\"lgmf-kicker\">Requisitos<\/span>\n    <h2>O que \u00e9 preciso ter<\/h2>\n    <ul>\n      <li><strong>WordPress 6.5<\/strong> ou superior e <strong>PHP 8.1<\/strong> ou superior.<\/li>\n      <li><strong>Qualquer tema.<\/strong> Os blocos entram nas p\u00e1ginas do tema; as p\u00e1ginas que o plugin serve escreve-as ele por inteiro, e \u00e9 isso que lhe permite responder a uma imagem antes de o tema sequer carregar.<\/li>\n      <li><strong>Nenhuma configura\u00e7\u00e3o de servidor.<\/strong> Em Apache e IIS a pasta das imagens fica protegida sozinha; em nginx acrescenta-se uma regra <code>location<\/code>, descrita no manual \u2014 mas a defesa a s\u00e9rio s\u00e3o os nomes imposs\u00edveis de adivinhar e a entrega pelo plugin.<\/li>\n      <li><strong>Nada de mexer no PHP.<\/strong> Uma fotografia maior do que aquilo que o alojamento aceita num pedido \u00e9 enviada por partes e recomposta no servidor. Nenhum limite do seu alojamento obriga a reduzir a qualidade.<\/li>\n      <li><strong>Nenhum servi\u00e7o externo<\/strong>, exceto os dos v\u00eddeos, e s\u00f3 onde algu\u00e9m os usar.<\/li>\n    <\/ul>\n  <\/section>\n\n  <!-- ============================ FAQ ============================= -->\n  <section class=\"lgmf-section\">\n    <span class=\"lgmf-kicker\">Perguntas frequentes<\/span>\n    <h2>Antes que pergunte<\/h2>\n\n    <details>\n      <summary>As imagens ficam mesmo fora da Biblioteca multim\u00e9dia?<\/summary>\n      <p>Ficam. S\u00e3o guardadas em <code>wp-content\/uploads\/montrafolio\/<\/code>, uma pasta protegida contra acesso direto, e entregues pelo plugin depois de este verificar quem est\u00e1 a pedir. N\u00e3o aparecem na Biblioteca, n\u00e3o entram nos anexos do WordPress e n\u00e3o s\u00e3o servidas por um endere\u00e7o que se possa passar a outra pessoa.<\/p>\n    <\/details>\n\n    <details>\n      <summary>Os meus utilizadores t\u00eam de aceder ao wp-admin?<\/summary>\n      <p>N\u00e3o. Donos e contribuidores trabalham na \u00e1rea do portef\u00f3lio, uma p\u00e1gina do plugin no endere\u00e7o escolhido nas Configura\u00e7\u00f5es (<code>\/p-admin\/<\/code> por omiss\u00e3o). Quem tem apenas um papel de leitura chega ali depois de iniciar sess\u00e3o e nunca v\u00ea o painel.<\/p>\n    <\/details>\n\n    <details>\n      <summary>\u00c9 preciso outro plugin para o in\u00edcio de sess\u00e3o?<\/summary>\n      <p>N\u00e3o. As pessoas entram com as contas do pr\u00f3prio WordPress, na p\u00e1gina do plugin. Um plugin de in\u00edcio de sess\u00e3o \u00fanico \u2014 Microsoft Entra ID, LDAP e outros \u2014 \u00e9 opcional e liga-se ao caminho normal de in\u00edcio de sess\u00e3o do WordPress; se o site quiser, o formul\u00e1rio de autentica\u00e7\u00e3o do WordPress pode at\u00e9 desaparecer e ficar s\u00f3 o bot\u00e3o do fornecedor. A entrada pode ainda ser limitada a determinados dom\u00ednios de correio.<\/p>\n    <\/details>\n\n    <details>\n      <summary>O plugin envia alguma coisa para fora?<\/summary>\n      <p>Sobre o seu site, nada: nem contadores de utiliza\u00e7\u00e3o, nem o dom\u00ednio, nem vers\u00f5es \u2014 e as atualiza\u00e7\u00f5es v\u00eam do WordPress.org pelo mesmo caminho por onde chegam as de todos os outros plugins. A \u00fanica exce\u00e7\u00e3o s\u00e3o os v\u00eddeos, e s\u00f3 onde algu\u00e9m os usar \u2014 ao acrescentar um, o site pergunta ao servi\u00e7o o t\u00edtulo e a miniatura; ao ver a p\u00e1gina, nada \u00e9 pedido enquanto o visitante n\u00e3o carregar em <em>play<\/em>. Os quatro servi\u00e7os est\u00e3o listados na p\u00e1gina do plugin, com os termos e as pol\u00edticas de privacidade, e qualquer um pode ser desligado.<\/p>\n    <\/details>\n\n    <details>\n      <summary>Posso mostrar um portef\u00f3lio dentro de uma p\u00e1gina do meu tema?<\/summary>\n      <p>Pode, com os tr\u00eas blocos \u2014 Cole\u00e7\u00e3o, Portef\u00f3lio e Detalhes \u2014 ou com os shortcodes equivalentes. O portef\u00f3lio escolhe-se no pr\u00f3prio bloco, e uma p\u00e1gina pode servir ao mesmo tempo de lista de cole\u00e7\u00f5es e de galeria daquela que o visitante escolher.<\/p>\n    <\/details>\n\n    <details>\n      <summary>E as fotografias HEIC do iPhone?<\/summary>\n      <p>S\u00e3o aceites em qualquer lado, e n\u00e3o h\u00e1 nada a configurar. O Safari converte-as sozinho; os outros navegadores convertem-nas na pr\u00f3pria m\u00e1quina, com uma biblioteca que o plugin s\u00f3 carrega quando aparece uma fotografia dessas.<\/p>\n    <\/details>\n\n    <details>\n      <summary>Posso limitar quanto cada pessoa carrega?<\/summary>\n      <p>Sim, a quatro n\u00edveis: o que o site d\u00e1 a um portef\u00f3lio novo, o teto de cada portef\u00f3lio, o que uma cole\u00e7\u00e3o aperta dentro dele e o que cada contribuidor pode carregar nessa cole\u00e7\u00e3o. Um n\u00edvel a zero n\u00e3o tem limite pr\u00f3prio e segue o de cima, e o medidor que cada pessoa v\u00ea \u00e9 o do n\u00edvel que primeiro se esgota para ela.<\/p>\n    <\/details>\n\n    <details>\n      <summary>Em que l\u00ednguas est\u00e1?<\/summary>\n      <p>Portugu\u00eas, ingl\u00eas e espanhol, escolhidos numa defini\u00e7\u00e3o do pr\u00f3prio plugin \u2014 independentemente da l\u00edngua em que o WordPress est\u00e1 a correr. As p\u00e1ginas p\u00fablicas e a \u00e1rea do portef\u00f3lio foram passadas a pente fino para o teclado, os leitores de ecr\u00e3, o movimento reduzido e o contraste AA.<\/p>\n    <\/details>\n  <\/section>\n\n  <!-- =========================== CTA FINAL ======================== -->\n  <section class=\"lgmf-section lgmf-center\">\n    <h2>Trezentas pessoas, trezentos portef\u00f3lios<\/h2>\n    <p class=\"lgmf-lead\">Procurar o plugin, ativ\u00e1-lo e decidir quem pode ter o seu demora menos tempo do que ler esta p\u00e1gina.<\/p>\n    <div class=\"lgmf-cta\" style=\"justify-content:center\">\n      <a class=\"lgmf-btn lgmf-btn-primary\" href=\"https:\/\/wordpress.org\/plugins\/montrafolio\/\" target=\"_blank\" rel=\"noopener\">Instalar do WordPress.org<\/a>\n      <a class=\"lgmf-btn\" href=\"#lgmf-requisitos\">Ver os requisitos<\/a>\n    <\/div>\n  <\/section>\n\n  <p class=\"lgmf-foot\">MontraFolio \u00e9 um produto <strong>LG-Systems<\/strong>. Apoio: <a href=\"mailto:support@lg-systems.net\">support@lg-systems.net<\/a> \u00b7 <a href=\"https:\/\/wordpress.org\/support\/plugin\/montrafolio\/\" target=\"_blank\" rel=\"noopener\">F\u00f3rum de apoio<\/a> \u00b7 <a href=\"https:\/\/wordpress.org\/plugins\/montrafolio\/\" target=\"_blank\" rel=\"noopener\">WordPress.org<\/a> \u00b7 Licen\u00e7a GPLv2 ou posterior<\/p>\n\n<\/div>\n\n<script>\n\/* Vers\u00e3o corrente e data de publica\u00e7\u00e3o lidas do update.json publicado ao lado\n   do zip (mesma origem \u2014 sem CORS). Desenho defensivo: a linha est\u00e1 escondida\n   no HTML e s\u00f3 aparece se o fetch der certo, portanto a p\u00e1gina nunca mostra\n   uma vers\u00e3o errada. no-store porque a cache heur\u00edstica seguraria a vers\u00e3o\n   antiga depois de um deploy. *\/\n(function () {\n  fetch('https:\/\/lg-systems.net\/lgs\/wp-dev\/montrafolio\/update.json', { cache: 'no-store' })\n    .then(function (r) { return r.ok ? r.json() : null; })\n    .then(function (v) {\n      if (!v || !\/^[\\w.-]+$\/.test(String(v.version))) return;\n      var box = document.querySelector('.lgmf-version');\n      if (!box) return;\n      box.querySelector('.lgmf-version-num').textContent = v.version;\n      var m = \/^(\\d{4})-(\\d{2})-(\\d{2})$\/.exec(String(v.last_updated || ''));\n      if (m) {\n        var when = new Date(Date.UTC(+m[1], +m[2] - 1, +m[3]));\n        box.querySelector('.lgmf-version-date').textContent = ' \u00b7 publicada a ' +\n          when.toLocaleDateString('pt-PT', { day: 'numeric', month: 'long', year: 'numeric', timeZone: 'UTC' });\n      }\n      box.hidden = false;\n    })\n    .catch(function () {});\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Plugin para WordPress \u00b7 Gratuito no diret\u00f3rio oficial MontraFolio D\u00e1 a cada utilizador do site um portef\u00f3lio de imagens seu \u2014 e \u00e0 organiza\u00e7\u00e3o os portef\u00f3lios partilhados de eventos, visitas e campanhas, com contribuidores designados. As imagens ficam numa pasta privada, fora da Biblioteca multim\u00e9dia. Instalar do WordPress.org Como se instala Instala-se como qualquer plugin [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_lgs_heading_first":"","_lgs_heading_second":"","_lgs_tagline":"","_lgs_hide_catalog":"","_lgs_kind":"","_lgs_accent":"","_lgs_platform":"","_lgs_version":"","_lgs_status":"","_lgs_released":"","_lgs_size":"","_lgs_license":"","_lgs_is_available":"","_lgs_pricing_model":"","_lgs_price_free":"","_lgs_price_pro":"","_lgs_price_note":"","_lgs_built_on":"","_lgs_requires":"","_lgs_download_url":"","_lgs_docs_url":"","_lgs_privacy_url":"","_lgs_steps":"","_lgs_features":"","_lgs_specs":"","_lgs_highlights":"","_lgs_compare":"","_lgs_changelog":"","_lgs_tiers":"","_lgs_gallery":"","_lgs_icon_id":"","_lgs_downloads":"","_lgs_faq":"","footnotes":""},"class_list":["post-75","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/lg-systems.net\/lgs\/wp-json\/wp\/v2\/pages\/75","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lg-systems.net\/lgs\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/lg-systems.net\/lgs\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/lg-systems.net\/lgs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lg-systems.net\/lgs\/wp-json\/wp\/v2\/comments?post=75"}],"version-history":[{"count":1,"href":"https:\/\/lg-systems.net\/lgs\/wp-json\/wp\/v2\/pages\/75\/revisions"}],"predecessor-version":[{"id":76,"href":"https:\/\/lg-systems.net\/lgs\/wp-json\/wp\/v2\/pages\/75\/revisions\/76"}],"wp:attachment":[{"href":"https:\/\/lg-systems.net\/lgs\/wp-json\/wp\/v2\/media?parent=75"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}