Categorie uitsluiten – FrontEnd en BackEnd

Alle content op 1 plek is het doel van dit blog. Ook mijn ToDo-lijst, maar daar hoeft niet iedere bezoeker zicht op te hebben. Dus de posts en links moeten gefilterd worden. Nu kun je dit in het template oplossen, maar dan ziet een eventuele 2e auteur deze posts wel in de backend. Eigenlijk wil je de posts al gefilterd hebben voordat ze naar de loop gebracht worden. Hiervoor is de hook “pre_get_posts”. Even de WP_Query aanpassen door de categorie uit te sluiten en gaan. Niet dus. Op de Codex staat goed beschreven hoe de query aan te passen:

$query->set ( 'category_name', 'news' );

En het is ook bekend dat een min-teken voor de waarde deze juist uitsluit, maar dat werkte dus niet. Dit blijkt alleen te werken met IDs. De volgende code werkt wel:

//Filter content by role and category
hohj_privatecatfilter ($query) {
if ( is_super_admin() ) {
return $query;}
else {
$query->set ( 'cat', '-12');
return $query;}
}

add_filter('pre_get_posts', 'hohj_privatecatfilter');

Nu kunnen we beginnen met het toevoegen van een ToDo-list.

PS. Een handig plugin om de query_vars live te onderzoeken is WP Devel. Deze plugin voegt een debug bar toe aan je adminbar waarmee je veel zinnige informatie kan bekijken.

Link post format in een child theme

Na een paar frustrerende uren is het toch gelukt om de verschillende post formats toe te voegen aan mijn theme. Als basis gebruik ik Twenty Ten met een child theme. De verschillende tutorials en de Codex doen alsof het een eitje is, maar toch werkte het niet met de standaardcode:

add_theme_support( 'post-formats', array( 'aside', 'gallery' ) );

Maar dat werkte dus niet. Het komt er in het kort op neer dat Twenty Ten deze functie weer overschrijft met de standaard-array. Om het probleem op te lossen dien je een prioriteit mee te geven, bijvoorbeeld:

add_action( 'after_setup_theme', 'voodoochild_formats', 11 );
function voodoochild_formats(){
     add_theme_support( 'post-formats', array( 'aside', 'gallery', 'link' ) );
}

Met dank aan voodoopress.com

Mute Screamer – PHPIDS4wordpress

Mute Screamer uses PHPIDS to detect attacks on your WordPress site and react in a way that you choose. PHPIDS (PHP-Intrusion Detection System) is a simple to use, well structured, fast and state-of-the-art security layer for your PHP based web application. The IDS neither strips, sanitizes nor filters any malicious input, it simply recognizes when an attacker tries to break your site and reacts in exactly the way you want it to. Based on a set of approved and heavily tested filter rules any attack is given a numerical impact rating which makes it easy to decide what kind of action should follow the hacking attempt. This could range from simple logging to sending out an emergency mail to the development team, displaying a warning message for the attacker or even ending the user’s session.

WordPress › Mute Screamer « WordPress Plugins.

Content filteren met KSES of REGEX

Ik ben lui. Ik wil snel en simpel links kunnen dumpen en dan weer doorsurfen. De PressThis bookmarklet (onder Tools in de backend) werkt op zich prima, maar plakt de URL in de content. Dat is me te ver weg voor een link. Een link heeft een titel en een URL, maar standaard verwijst de titel van een post door naar de post zelf. Aangezien er geen aanvullende content is kan dit best de externe link zijn. Dat klikt handig weg en maakt een links-pagina relatief makkelijk. Dus de opdracht is simpel:

Extraheer de URL uit de content en vervang de permalink van post-format ‘link’ door deze externe URL.

In eerste instantie was ik op zoek naar een oplossing met Regular Expressions. RegEx is bedoeld om programmeertaal-onafhankelijke patronen te definieren. Vervolgens kun je hier mee zoeken, vervangen, enzovoorts. Klinkt goed, maar het vraagt enig abstractie-niveau.

$pattern = '#\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))#';

Mocht bovenstaande duidelijk voor je zijn check dan vooral de verschillende oplossingen met behulp van RegEx eens. Ik kies voor een andere oplossing: KSES.

KSES staat voor “kses strips evil scripts” en is een filter voor HTML. WordPress gebruikt het standaard om comments te filteren. Otto legt het verder heel goed uit in zijn post http://ottopress.com/2010/wp-quickie-kses/

De volgende functie vervangt de Permalink door de URL in de content:

function change2href ( $permalink ) {      global $post;      if (has_post_format ( 'link' )) {        if ( preg_match_all('/<a (.+?)>/',  $post->post_content, $matches) ) {              foreach ($matches[1] as $match) {                  foreach ( wp_kses_hair ($match, array ('http') ) as $attr) $a [$attr['name']] = $attr['value']; $permalink = $a['href'];                      }              }          return $permalink;          }     else {          return $permalink;          }      }      add_filter ('the_permalink','change2href');

Overigens is een ander veelgebruikte oplossing het vervangen van de permalink door een custom field. Zij voor een voorbeeld WPrecipes.com

ToTest

Dit is een overzicht van plugins welke mijn aandacht trokken en nog getest moeten worden:

http://wordpress.org/extend/plugins/debug-bar-console/
Adds a PHP/MySQL console to the debug bar. Requires the debug bar plugin.

http://wordpress.org/extend/plugins/debug-bar/
Adds a debug menu to the admin bar that shows query, cache, and other helpful debugging information. Console plugin adds a PHP/MySQL console to the debug bar.

http://wordpress.org/extend/plugins/meta-tag-generator-remover/
Removes the WordPress meta information ‘generator’. This helps to protect your blog (at least a litte bit).

http://wordpress.org/extend/plugins/scissors/
This plugin adds cropping, resizing, and rotating functionality to WordPress’ image upload and management dialogs. Scissors also allows automatic resizing of images when they are uploaded and supports automatic and manual watermarking of images. Additionally, images that are resized in the post editor are automatically resampled to the requested size using bilinear filtering when a post is saved, which improves the perceived image quality while reducing the amount of data transferred at the same time. Wp2.9+ not supported but mods available in the forum.

http://wordpress.org/extend/plugins/simple-tags/
Simple Tags is THE perfect tool to manage perfectly your WP 3.0 tags (Tags suggestion, Mass Edit Terms (Tags and Category), Auto link tags, Ajax Autoc

http://wordpress.org/extend/plugins/sexybookmarks/
Though the name may be a little “edgy” for some, SexyBookmarks has proven time and time again to be an extremely useful and successful tool in getting your readers to actually submit your articles to numerous social bookmarking sites.

http://wordpress.org/extend/plugins/wp-imagetagger/
WP ImageTagger is an extensively configurable plugin providing all the tools required to categorize your WordPress blog images by associating your pictures to any defined tag or category. Among many features, it comes packed with a tagcloud widget that will make the process straightforward for everyone and will permit a transparent integration.

http://wordpress.org/extend/plugins/cubepoints/
CubePoints is a point management system designed for WordPress blogs. Users can earn points by posting comments creating posts, or even by logging in on your site.

http://wordpress.org/extend/plugins/skeleton-key/
Gives administrators a skeleton key (their own password) to login as any user they’d like.

http://wordpress.org/extend/plugins/infinite-scroll/
Automatically append the next page of posts (via AJAX) to your page when a user scrolls to the bottom. Zie ook http://www.infinite-scroll.com/

http://wordpress.org/extend/plugins/wp-database-optimizer/

This plugin allows for automated scheduled database optimization. The user can specify (in days) how long in between automated optimizations.

http://wordpress.org/extend/plugins/category-page-icons/
Using this plugin, you can add icons (images) to sidebar of your site or blog into section of categories and pages.

http://wordpress.org/extend/plugins/terms-of-use-2/
Forces all users (except admins) to agree to your Terms and Conditions on first login and anytime you choose to make them accept new terms.

Plugins

Na maanden een grote schoonmaak op mijn Multisite installatie. De plugins die nu nog actief zijn en welke ik nog wil/moet uitzoeken.

Beheerplugins

De volgende plugins zijn geinstalleerd voor de beheerder:

  • Exclude plugins, maakt het mogelijk om de beschikbare plugins te beperken;
  • Proper Network Activation, zorgt ervoor dat plugins die niet de juiste API-calls gebruiken toch op de juiste manier worden geactiveerd;
  • Hide Update Reminder, voorkomt dat gebruikers update-screens krijgen;
  • User locker, zorgt ervoor dat hackpogingen minder succesvol zijn. Na vijf foutieve pogingen wordt de betreffende username buitengesloten en dient deze door een administrator opnieuw geactiveerd te worden;
  • Limit Post Revisions Network Option, zorgt ervoor dat er niet oneindig veel Revisions bewaard worden. Een performanceboost!
  • Adminer, geeft PHPmyAdmin toegang binnen wordpress;
  • WordPress Backup (by BTE),  maakt een dagelijks een backup van alle files, themes en plugins;
  • WP-DBmanager, mailt dagelijks een SQL-backup en schoont de database regelmatig;
  • WordPress phpinfo(), handig om problemen te analyseren;
  • WP Overview (lite) MU, geeft de status van de server en WordPress installatie;
  • User Switching, handig om gebruikers te ondersteunen en te testen;
  • WordPress Ultimate Security, checkt zowel de server als wordpress op instellingen die mogelijk een beveiligingsprobleem zijn;

Netwerkplugins

De volgende plugins zijn voor iedere site standaard geïnstalleerd.  Enerzijds in het kader van de beveiliging, anderzijds omdat ze handig zijn.

  • Askimet, voorkomt Spam, maar vraagt nog wel een API-key welke door de blog-eigenaar bij Automattic gratis aangevraagd kan worden;
  • Google Analyticator, integreert Google Analytics in WordPress. Ook hier dient natuurlijk wel een account bij Google aangevraagd te worden. De plugin wijst de weg;
  • XML Sitemap Feed, maakt voor elke subsite standaard een XML-sitemap aan voor zoekmachines;
  • WordPress Importer, maakt het importeren van blogs uit andere installaties gemakkelijk;
  • WPtouch, zorgt ervoor dat iPhone/iPod-gebruikers de site goed kunnen bekijken op hun toestel;
  • Wphone, een admin-interface aangepast aan de iPhone indien er via een iPhone wordt aangelogd op het beheergedeelte;
  • Favicon Rotator, maakt het gemakkelijk om een Favicon in te stellen;
  • Admin Management Extended, maakt het editen van posts in het overzichtscherm gemakkelijk;
  • WordPress MU Domain mapping, maakt het mogelijk om externe domeinen op DeDigitaleJungle te hosten;
  • CSS Cache Buster, zorgt ervoor dat altijd de laatste versie van CSS-files geserveerd wordt. geen CTRL-F5 nodig dus;
  • Simply Show IDs,  geeft op relevante plaatsen het ID van een bericht, pagina, enz. Handig voor verwijzingen;

Persoonlijke plugins

Plugins die ik op mijn eigen sites gebruik:

  • Cleverness To-Do List, een handig ToDo-lijstje op je dashboard;
  • Custom Post UI, maakt het mogelijk om Custom Post Types en Custom Taxanomies te creeren;

Algemeen beschikbare plugins

De volgende plugins kunnen gebruikt worden op websites:

  • GeoLocation, voegt automatisch een GoogleMap toe aan posts die gemaakt zijn via een GPS-enabled device zoals een iPhone;
  • Private WP, indien een blog alleen zichtbaar dient te zijn voor ingelogde gebruikers;

Specifieke plugins

Voor een aantal specifieke sites gebruik ik de volgende plugins:

  • Accordion Image Menu, maakt een menu op basis van sliding doors mogelijk. Zie bijvoorbeeld hartenelf.nl
  • Contact Form 7, een geavanceerd contactformulier;

Plugins in de Testfase

De volgende plugins worden op dit moment getest op compatibiliteit:

  • Ajax for all, geeft diverse Ajax-mogelijkheden aan een template;
  • Cache Images, maakt het mogelijk om alle plaatjes welke van andere websites gelinkt worden lokaal op te slaan en de posts aan te passen;
  • Broken Link Checker, controleert of alle links nog werken;
  • FourSquare Map, laat de laatste Checkin zien in een widget;
  • Front End Editor, maakt het mogelijk om content aan te passen in de front end. Lijkt nu nog niet goed te werken met MultiSite of bepaalde themes;

Custom Post Types deel 2

Na enige tijd van drukte heb ik eindelijk weer eens tijd om verder te gaan met de ontwikkeling van DDJ en ik ben begonnen met testen van Custom Post Types. Eerder ben ik hierover redelijk voorzichtig geweest, omdat de locatie van de definities van het Type in functions.php in het template mijns inziens niet juist is. Custom Post Types zijn mijns inziens niet template afhankelijk en daarom horen deze definities daar niet thuis. Nu 1,5 maand na de release van WP 3.0. zie je toch dat dit vernieuwende onderdeel wel goed wordt opgepakt; en dus doen wij dat ook. Otto beschrijft nog eens waarom Custom Types geen Posts of Pages zijn.

Allereerst, het is niet nodig om handmatig functions.php te wijzigen. Middels de plugin Custom Post Type UI makkelijk te doen. Waarschijnlijk is het in het geval van een duidelijke structuur wel raadzamer om dit uiteindelijk in functions.php onder te brengen, want dit scheelt weer een plugin, maar voor testdoeleinden is dit ideaal. Met een paar klikken staat een Custom Post Type klaar en is het menu-item aangemaakt. Zie hieronder voor een videotutorial.

Middels de plugin Query Multiple Taxanomies van Scribu. Is het heel makkelijk om via Widgets complexe queries te doen op de Post-verzameling. Dit is niet per definitie voor Custom Post Types; het kan ook gebruikt worden op de normale posts. Somadesign lost het gemis van een landing page voor een custom post type op.

Er zijn verschillende plugins om ook op een simpele manier Custom Fields toe te voegen aan je Custom Post Type. Magic Fields (WP.org repository) heeft de meeste Field-types. Denk bijvoorbeeld aan Sliders en Audio. De ondersteuning van WP3.0 is nog geheel vlekkeloos. Custom Fields Template lijkt uitgebreide mod-mogelijkheden te hebben, maar dat schrok mij af (en het japans ook).  Uiteindelijk heb ik gekozen voor Simple Fields. Simpel en helder. Wel een jonge plugin, dus mogelijk nog wel bugs, maar het ziet er simpel uit en doet wat het moet doen: op een overzichtelijke manier Custom Fields weergeven, zodat ook mijn klanten het snappen en geen handleiding nodig hebben om te posten. Hoe je velden kan verwijderen uit de admin staat beschreven op deze pagina van Shibashake.

Nu alleen nog de Custom Fields in de pagina’s verwerken. Hoe dit moet staat beschreven door GenuineInteractive. Wel even rekening houden met het aanpassen van de Query voor de Tags.