Hack sammen en brukerbidraget Link Feed med WordPress Comments

Selv om WordPress har en * veldig * omfattende plug-in samling, kommer det igjen og igjen ting opp som det ikke finnes noen passende plugin-moduler (ennå). Da jeg bygget PSDTUTS, trodde jeg det ville være kult å få en måte for brukerne å sende inn koblinger og for å lage en offentlig koblingsmating ut av den. I dag skal jeg vise deg hvordan jeg hacket sammen en metode ved hjelp av WordPress 'kommentarer.

Så først og fremst hvis du ikke er sikker på hva jeg mener med en brukerbidraget Link Feed, er alt du trenger å gjøre, å se i sidepanelet til NETTUTS, og du får se vår offentlige link-feed. Du kan abonnere via RSS eller klikke for å sende inn dine egne linker. Det er en fin liten måte å få mer interaktivitet på nettstedet, og å la leserne utnytte trafikken til TUTS-nettstedene tilbake til sine egne blogger og opplæringsprogrammer.

Grov handlingsplan

Det første du må gjøre er å komme opp med en plan for hvordan alt kommer til å fungere. Her er vår plan:

  1. Først oppretter vi et spesielt innlegg på bloggen vår, som bare har noen korte innleveringsinstruksjoner
  2. Da redigerer vi comments.php filen slik at når denne spesielle posten kommer opp, vil den vise kommentarer annerledes
  3. På disse kommentarene endrer vi det vanlige kommentarskjemaet for å bli ommerket slik at feltene passer til en lenkeinnlevering
  4. Da endrer vi måten kommentarene viser både på innlegget og i kommentarene RSS, slik at det gir mening
  5. Til slutt skal vi lage litt kode for å trekke de siste 10 koblingene og plassere dem i sidefeltet

Nå er fordelen ved å bruke det vanlige WordPress-kommentarer systemet at det allerede er en godkjenning og spam-fanger arbeidsflyt på plass.

Trinn 1 - Lag posten

For mitt eksempel i dag skal jeg bruke den snart lanserte AUDIOTUTS-siden som jeg har brukt på ettermiddagen sammen. Så vi gjør bare en vanlig Post med en tittel og litt tekst, du kan se meg lage min i skjermbildet:

Og her er det på AUDIOTUTS-siden:

Nå er det viktig å finne ut hva Post-ID er for vårt innlegg. Du kan finne ut dette ved å redigere innlegget du nettopp har opprettet og ser på nettadressen for redigeringsposten. Min redigeringsadresse er "http://audiotuts.com/wp-admin/post.php?action=edit&post=3" så derfor er post-ID 3!

Trinn 2 - Rediger Comments.php

Deretter skal vi endre vår comments.php-fil for å se etter innlegget med ID på 3 og for å få det aktuelle innleggets kommentarer til å se annerledes ut. Merk at hvis du er interessert i å lære mer om comments.php filen, har vi en flott opplæring her på NETTUTS kalt Unraveling the Secrets of Comments.php som er et flott sted å starte.

Så i utgangspunktet kommer vi til å legge til en stor if-setning og hvis Post-ID ikke er 3 så vil vi gjøre våre vanlige kommentarer ting, og hvis det er 3 da vil vi endre måten de vises på og hvordan skjemaet ser ut . Her er min comments.php-fil for AUDIOTUTS (merk at jeg har kommentert de vanlige kommentarene for å gjøre det tydeligere med hensyn til linken feed)

 ID! = 3) // Hvis post-ID er * IKKE * lik 3 (vår link feed post som vi opprettet tidligere) så // vi kjører de vanlige comments.php-tingene i dette rommet. // // Jeg har slettet min for å gjøre kodebiten min litt klarere ellers ?> 

Tidligere brukerinnskudd

Send inn en lenke

Send inn en lenke

ID); ?>

Så la oss analysere koden vår i to deler, først skjemaet og deretter kommentaren.

Trinn 3 - Endre kommentarformularen

Som standard er det fire skjemafelt som WordPress bruker til å tillate innspilling av kommentarer, de er:

  1. Forfatter
  2. e-post
  3. URL
  4. Kommentar

For å få en linkinnlevering trenger vi tre ting:

  1. Link Tittel
  2. URL
  3. Link beskrivelse

Så vi kartlegger de fire skjemafeltene til våre tre krav som dette:

  1. Forfatterfelt> Linktittel
  2. URL> URL
  3. Kommentar> Link Beskrivelse

Og for e-postfeltet bytter vi dette til et skjult skjemafelt og gir det en verdi på "[email protected]", som gjør at linkene blir enklere å få øye på når de godkjennes i kommentar godkjenning.

Så her er skjemaet jeg bruker:

 

ID); ?>

Som du kan se har vi tre felt og en for e-postadressen. Og selv om i HTML-kildene har disse inntastingsfeltene fortsatt deres vanlige id (forfatter, url, kommentar), kan du se i teksten som brukeren ser at de er merket som linktittel, URL og lenkebeskrivelse. Slik at skjemaet ser slik ut:

Trinn 4 - Vise tidligere linkinnlegg

Deretter skal vi formatere hvordan de forrige kommentarene vises slik at de også benytter oss av å gjenbruke forfatter-, url- og kommentarfeltene. Her er koden vi skal bruke for å vise linkene:

  

Så her er det vi gjør

  1. Først sjekker vi om det er noen kommentarer
  2. Hvis det er så, genererer vi en bestilt liste
      av oppføringer
    1. For hver kommentar publiserer vi en
    2. element med:
      1. Et koblet forfatternavn - husk at vi har brukt disse feltene, slik at dette faktisk vil være linktittelen knyttet til nettadressen
      2. Kommentarteksten - eller med andre ord vår lenkebeskrivelse.

    Trinn 5 - Oppdaterer kommentarene RSS

    Nå er det bra med å bruke kommentarer at det som standard er et RSS-feed for hvert WordPress-innlegg. Nettadressen er rett og slett adressen til innlegget etterfulgt av '/ feed'. Så i vårt tilfelle er det: http://audiotuts.com/general/user-link-feed/feed/

    Det eneste problemet er at standardformateringen av kommentarene RSS vil opprette en feed som ser slik ut (i Safari):

    Så det er tre problemer:

    1. Tittelen på feedet er "Kommentarer på: User Link Feed"
    2. Koblings tittelen sier "Av: ..."
    3. Koblingen går ikke til nettadressen, den går tilbake til AUDIOTUTS

    Så for å løse disse problemene må vi redigere feedmalen. Så vi går inn i vår WordPress installasjon til /wp-includes/feed-rss2-comments.php, som er malfilen for kommentarene RSS. Her er hva filen har i det som standard (i WordPress 2.5.1):

     '; ?>   <?php if ( is_singular() ) printf(__('Comments on: %s'), get_the_title_rss()); elseif ( is_search() ) printf(__('Comments for %s searching on %s'), get_bloginfo_rss( 'name' ), attribute_escape($wp_query->query_vars [ 's'])); ellers printf (__ ('Kommentarer for% s'), get_bloginfo_rss ('navn'). get_wp_title_rss ()); ?>       comment_post_ID); get_post_custom ($ comment_post-> ID); ?>  <?php if ( !is_singular() )  $title = get_the_title($comment_post->ID); $ title = apply_filters ('the_title_rss', $ title); printf (__ ('Kommentar på% 1 $ s av% 2 $ s'), $ tittel, get_comment_author_rss ());  else printf (__ ('By:% s'), get_comment_author_rss ()); ?>     post_password) && $ _COOKIE ['wp-postpass']! = $ comment_post-> post_password):?>      comment_ID, $ comment_post-> ID); ?>    

    Nå trenger vi ikke å vite hva mest av det gjør, heller vi vil bare gå gjennom og endre noen linjer. Den første linjen vi kan fikse er Linje 18, som vi endrer fra dette:

    printf (__ ('Kommentarer på:% s'), get_the_title_rss ());

    til dette:

    printf (__ ('% s'), get_the_title_rss ());

    Da endrer vi linje 42 fra dette:

    printf (__ ('Av:% s'), get_comment_author_rss ());

    til dette:

    printf (__ ('% s'), get_comment_author_rss ());

    I begge tilfeller fjerner vi ganske enkelt de ekstra ordene - "Kommentarer til:" og "Av:" - slik at fôret gir mer mening. Så det var ganske enkelt. Neste bit er litt mer komplisert fordi vi må endre hvor nettadressen peker. Nå peker det tilbake til innlegget slik at brukeren kan følge kommentarer på det innlegget. Siden denne malen kontrollerer * alle * kommentere RSS-feeder, ønsker vi ikke å bryte den funksjonaliteten, så vi trenger en if-setning som følger:

     ID! = 3) comment_link ();  ellers echo $ comment-> comment_author_url; ?> 

    Så her sjekker vi bare om posten har en ID på 3 (som i vårt eksempel er Post-ID til brukerlink-feed), og hvis det gjør så publiserer vi URL-adressen, og hvis ikke gjør vi den vanlige kommentaren comment_link () . Så den endelige RSS-mal ser slik ut:

     '; ?>   <?php if ( is_singular() ) printf(__('%s'), get_the_title_rss()); elseif ( is_search() ) printf(__('Comments for %s searching on %s'), get_bloginfo_rss( 'name' ), attribute_escape($wp_query->query_vars [ 's'])); ellers printf (__ ('Kommentarer for% s'), get_bloginfo_rss ('navn'). get_wp_title_rss ()); ?>       comment_post_ID); get_post_custom ($ comment_post-> ID); ?>  <?php if ( !is_singular() )  $title = get_the_title($comment_post->ID); $ title = apply_filters ('the_title_rss', $ title); printf (__ ('Kommentar på% 1 $ s av% 2 $ s'), $ tittel, get_comment_author_rss ());  else printf (__ ('% s'), get_comment_author_rss ()); ?>  ID! = 3) comment_link ();  ellers echo $ comment-> comment_author_url; ?>     post_password) && $ _COOKIE ['wp-postpass']! = $ comment_post-> post_password):?>      comment_ID, $ comment_post-> ID); ?>    

    Og som følge av dette ser vår kommentar RSS-feeder nå ut som dette (for brukerlinken og en vanlig post):


    Trinn 6 - Viser de siste 10 elementene i sidefeltet

    Neste må vi vise våre siste 10 elementer i sidefeltet. Her er et lite stykke kode for å gjøre det:

      

    Så du kan se her er vi:

    1. Griper alle godkjente kommentarer fra innlegget med Post ID = 3 som en matrise og reverser dem slik at vi får den nyeste først
    2. Deretter oppretter vi en
        element og for hver kommentar i oppstillingen opptil 10 skriver vi ut en
      • element med lenken, tittel og beskrivelse

    Og med litt styling her er hvordan resultatet ser ut:

    ferdig!

    Så det er det! Jeg liker også å brenne feedet via Feedburner, slik at jeg kan spore hvor mange som abonnerer. Hittil har det vært ganske nyttig, her på NETTUTS har vi ca 150 abonnenter på linken feed, på PSDTUTS har vi nær 500. Så de er en god måte å la samfunnet få vite om nye koblinger, og de holder nettstedet jevnlig. oppdatert.

    Jeg har nylig kontraktet den fabelaktige talentfulle Joshua Blount for å bygge dette inn i en WordPress-plugin. Når det er ferdig, vil jeg sørge for at han slipper den her som vår første bit av NETTUTS åpen kilde :-)