@prefix sioc: <http://rdfs.org/sioc/ns#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix content: <http://purl.org/rss/1.0/modules/content/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

<https://lhero.org/?post_type=lh-portfolio&#038;p=153057>
  a sioc:Post ;
  dc:title "LH Contacts" ;
  dcterms:identifier 153057 ;
  dc:modified "2026-11-01T14:16:08Z"^^xsd:dateTime ;
  dc:created "2026-11-01T12:17:17Z"^^xsd:dateTime ;
  sioc:link <https://lhero.org/portfolio/lh-contacts/> ;
  sioc:has_creator <https://lhero.org/author/1/#account> ;
  sioc:has_container <https://lhero.org/#posts> ;
  content:encoded """<ul class="lh_portfolio-meta"><li><strong>Type:</strong> Plugin</li><li><strong>Lifecycle Stage:</strong> Experimental</li></ul>
<p class="wp-block-paragraph">LH Contacts puts a WordPress site&#8217;s members in people&#8217;s contacts. Staff can download members&#8217; contact cards (vCards) from the site, or sync the whole member directory to their phone as a CardDAV address book, which iOS, macOS, Android (through DAVx5), Thunderbird and most contacts apps can use. Either way the details stay up to date without anyone exporting a spreadsheet.</p>



<p class="wp-block-paragraph">The address book is served by LH DAV, which handles sign-in, discovery and the CardDAV protocol. LH Contacts replaced LH Vcard in 0.3.0.</p>



<h2 class="wp-block-heading">Features</h2>



<ul class="wp-block-list">
<li>Contact cards with name, email, photo, profile link and teams, plus phone, address and birthday from LH Profile Page and verified alias emails from LH User Identity.</li>



<li>Cards are built for the person viewing them, so teams in hidden groups appear only for people who can see those groups.</li>



<li>Download links on the Users list, BuddyPress profiles and groups, group and check-in reports, bbPress and LH Profile Page&#8217;s search-users, signed so they work for a day for whoever opens them.</li>



<li>A read-only member address book on each site: everyone on the site except blocked accounts.</li>



<li>Fast incremental sync: profile changes, departures and blocks are recorded in LH DAV&#8217;s change log, so phones fetch only what changed.</li>



<li>A Recently Updated Contacts dashboard widget and shortcode.</li>



<li>Only users who can see member contacts (<code>publish_posts</code> by default) see any of it.</li>



<li>Network-activated on Multisite, with each site serving its own members. No MCP abilities of its own: tooling plugins use its PHP service API.</li>
</ul>



<p class="wp-block-paragraph">Each member&#8217;s own personal address book, which they can edit from their phone, is planned for a later release.</p>



<h2 class="wp-block-heading">Getting started</h2>



<p class="wp-block-paragraph">Network-activate LH DAV and LH Contacts, then install sabre/vobject with Composer in the plugin folder. Staff create an application password on their profile and either install LH DAV&#8217;s Apple setup profile or add a CardDAV account with the site address, their username and that password. The member address book appears as &#8220;{Site name} members&#8221;.</p>


<ul class="lh_portfolio-doc-toc"><li><a href="https://lhero.org/portfolio/lh-contacts/architecture/">Architecture</a></li><li><a href="https://lhero.org/portfolio/lh-contacts/service-api/">Service API</a></li><li><a href="https://lhero.org/portfolio/lh-contacts/hooks-and-filters/">Hooks and Filters</a></li><li><a href="https://lhero.org/portfolio/lh-contacts/changelog/">Changelog</a></li></ul>"""^^rdf:XMLLiteral ;
  sioc:content """Type: PluginLifecycle Stage: Experimental
LH Contacts puts a WordPress site&#8217;s members in people&#8217;s contacts. Staff can download members&#8217; contact cards (vCards) from the site, or sync the whole member directory to their phone as a CardDAV address book, which iOS, macOS, Android (through DAVx5), Thunderbird and most contacts apps can use. Either way the details stay up to date without anyone exporting a spreadsheet.



The address book is served by LH DAV, which handles sign-in, discovery and the CardDAV protocol. LH Contacts replaced LH Vcard in 0.3.0.



Features




Contact cards with name, email, photo, profile link and teams, plus phone, address and birthday from LH Profile Page and verified alias emails from LH User Identity.



Cards are built for the person viewing them, so teams in hidden groups appear only for people who can see those groups.



Download links on the Users list, BuddyPress profiles and groups, group and check-in reports, bbPress and LH Profile Page&#8217;s search-users, signed so they work for a day for whoever opens them.



A read-only member address book on each site: everyone on the site except blocked accounts.



Fast incremental sync: profile changes, departures and blocks are recorded in LH DAV&#8217;s change log, so phones fetch only what changed.



A Recently Updated Contacts dashboard widget and shortcode.



Only users who can see member contacts (publish_posts by default) see any of it.



Network-activated on Multisite, with each site serving its own members. No MCP abilities of its own: tooling plugins use its PHP service API.




Each member&#8217;s own personal address book, which they can edit from their phone, is planned for a later release.



Getting started



Network-activate LH DAV and LH Contacts, then install sabre/vobject with Composer in the plugin folder. Staff create an application password on their profile and either install LH DAV&#8217;s Apple setup profile or add a CardDAV account with the site address, their username and that password. The member address book appears as &#8220;{Site name} members&#8221;.


ArchitectureService APIHooks and FiltersChangelog""" ;
  sioc:topic <https://lhero.org/lh_portfolio-type/plugin/>, <https://lhero.org/lh_portfolio-lifecycle-stage/experimental/>, <https://lhero.org/?taxonomy=lh_portfolio-tags&term=vcard>, <https://lhero.org/?taxonomy=lh_portfolio-tags&term=contacts>, <https://lhero.org/?taxonomy=lh_portfolio-tags&term=carddav>, <https://lhero.org/?taxonomy=lh_portfolio-tags&term=sync>, <https://lhero.org/?taxonomy=lh_portfolio-tags&term=address-book>, <https://lhero.org/?taxonomy=author&term=cap-1> .

<https://lhero.org/author/1/#account> rdfs:seeAlso <https://lhero.org/author/1/?feed=lhrdf&format=turtle> .
<https://lhero.org/lh_portfolio-type/plugin/> rdfs:seeAlso <https://lhero.org/lh_portfolio-type/plugin/?feed=lhrdf&format=turtle> .
<https://lhero.org/lh_portfolio-lifecycle-stage/experimental/> rdfs:seeAlso <https://lhero.org/lh_portfolio-lifecycle-stage/experimental/?feed=lhrdf&format=turtle> .
<https://lhero.org/?taxonomy=lh_portfolio-tags&term=vcard> rdfs:seeAlso <https://lhero.org/?taxonomy=lh_portfolio-tags&term=vcard&feed=lhrdf&format=turtle> .
<https://lhero.org/?taxonomy=lh_portfolio-tags&term=contacts> rdfs:seeAlso <https://lhero.org/?taxonomy=lh_portfolio-tags&term=contacts&feed=lhrdf&format=turtle> .
<https://lhero.org/?taxonomy=lh_portfolio-tags&term=carddav> rdfs:seeAlso <https://lhero.org/?taxonomy=lh_portfolio-tags&term=carddav&feed=lhrdf&format=turtle> .
<https://lhero.org/?taxonomy=lh_portfolio-tags&term=sync> rdfs:seeAlso <https://lhero.org/?taxonomy=lh_portfolio-tags&term=sync&feed=lhrdf&format=turtle> .
<https://lhero.org/?taxonomy=lh_portfolio-tags&term=address-book> rdfs:seeAlso <https://lhero.org/?taxonomy=lh_portfolio-tags&term=address-book&feed=lhrdf&format=turtle> .
<https://lhero.org/?taxonomy=author&term=cap-1> rdfs:seeAlso <https://lhero.org/?taxonomy=author&term=cap-1&feed=lhrdf&format=turtle> .
