WordPress sideblog hack

Der er forskellige muligheder for at kombinere WordPress’s mainblog med en såkaldt sideblog, asides, sidebemærkninger, indskud… whatever. Men alle kræver såvidt jeg kan se en hackertilgang.

WordPress Codex anviser flere. Matts asides er vist den klassiske. Tilgangen kræver lidt ændringer i index.php template filen samt oprettelse af en sideblog kategori.
Det er ikke lykkedes mig at få det til at fungere og jeg ser også en svaghed. Er wordpress sat op til at vise et begrænset antal poster – lad os sige 3. – pr. side og falder de tre første i “sideblog” kategorien mødes den besøgende så vidt jeg kan se af en blank side.
Der er muligvis måder at programmere sig uden om dette på (se Codexen) men igen: indenfor den tid jeg har sat af: no luck!

Et par plugins tilbyder samme funktionalitet: Miniposts2 og Sideblog. Miniposts2 tilføjer et brugerdefineret felt som markerer poster som sideblogsposter, asides. Der er såvidt jeg hurtigt kan se tale om alphasoftware… No way.
Sideblog virker enkel, overskuelig og dermed også hackable ;-) men baseres på den tidligere nævnte teknik med at oprette en dedikeret “sideblog” kategori. Fint nok. Problemet er bare at de pågældende poster såvidt jeg kan se forbliver i hovedbloggen hvis de samtidig tilknyttes andre kategorier.

Men hvorfor ikke kombinere de to tilgangsmåder?

I den blog der er tale om har jeg installeret Sideblog oprettet en “sideblog” kategori og tilføjet et brugerdefineret felt sideblog, som default med værdien ’0′.

For at teknikken kan fungere skal feltet tilføjes til alle eksisterende poster.

Det gjorde jeg ved afvikle følgende php kodestump, men det kan sikkert også gøres med en ren sql kommando fra f.eks. phpMyAdmin.

< ?php
if(!($conn_id = @mysql_connect("localhost", "user", "pass")))
die ("No connection");
$sqlone= "SELECT * FROM `posts`";
$resultone = mysql_query($sqlone);
while ($rowone = mysql_fetch_array($resultone))
{
$post = $rowone['ID'];
$sqltwo = "INSERT into postmeta SET post_id = $post, meta_key = 'sideblog', meta_value = '0'";
$resulttwo = mysql_query($sqltwo);
}
?>

Først findes post ID’er, derefter indsættes disse i i postmeta tabellen sammen med meta_key og meta_value. Er der tale om en mindre blog med en håndfuld poster kan det hele selvfølgelig også gøres manuelt.
(Host, user og pasord skal selvfølgelig sættes, husk også evt. præfikser til tabelnavnene)

Herefter skal sideblog.php i plugin mappen hackes (lav først en backup af original filen).

Find linien (i function sideblog_where )

$query .= " AND category_id NOT IN (" . implode(",", $sideblog_options['setaside']) . ") ";

og udkommenter denne:

//$query .= " AND category_id NOT IN (" . implode(",", $sideblog_options['setaside']) . ") ";

Nedenunder indsættes:

$query .= " AND (meta_key = 'sideblog' AND meta_value != '1') ";

(OBS: linien optræder to gange)

Herefter findes linien (i function sideblog_join )

$query .= " LEFT JOIN $wpdb->post2cat ON ( $wpdb->posts.ID = $wpdb->post2cat.post_id) ";

og udkommenteres:

//$query .= " LEFT JOIN $wpdb->post2cat ON ( $wpdb->posts.ID = $wpdb->post2cat.post_id) ";

Nedenunder indsættes:

$query .= " LEFT JOIN $wpdb->postmeta ON ( $wpdb->posts.ID = $wpdb->postmeta.post_id) ";

Filen gemmes.
Herefter kan relevante poster tilknyttes sideblog kategorien. Hvis posterne ikke skal optræde i hovedbloggen skal værdien i det brugerdefinerede sideblog felt samtidig ændres til 1.
Og uanset: alle nye poster skal som standard forsynes med et brugerdefineret felt “sideblog” og den tilhørende værdi 0 eller 1.
… Mon ikke det skulle være muligt at lave et hack der automatisk indsætter dette felt når en ny post oprettes?:

< ?php
/*
Plugin Name: Add-Sideblog-custom-field
Plugin URI: http://bo-k.dk/webblog/
Description: Fast hack. Adding a sideblog custom field with default value 0 to all new posts when saved. You should make a "save and continue editing" before changing or setting the sideblog value manually.
Version: 0.0.1
Author: Bo Kristensen
Author URI: http://bo-k.dk/webblog/
*/
function add_sideblog_field($id)
{
$my_metavalue = (isset($_POST["sideblog"]) && $_POST["sideblog"] == "1") ? 1 : 0;
add_post_meta($id, 'sideblog', $my_metavalue, true);
}
add_action('save_post', 'add_sideblog_field',1);
?>

(Kopier ovenstående kode til en tom tekstfil og gem denne som ascf.php i wordpress plugin mappen. Aktiver herefter det nye plugin i administrationspanelet.
Inden man evt. manuelt ændrer værdien i det brugerdefinerede felt sideblog skal den akuelle post gemmes)

Skriv kommentar -

Poster der ligner : blogs - programmering - wordpress - - -

Technorati Technorati : blogs - programmering - wordpress - kodestumper - php - Delicious Delicious : blogs - programmering - wordpress - kodestumper - php - Google Blog Search Google Blog Search : blogs - programmering - wordpress - kodestumper - php - Overskrift.dk overskrift.dk : blogs - programmering - wordpress - kodestumper - php -

Indrykket : 5. september 2006 - (Læst 1274 gange)

*

Skriv en kommentar

om...

Weblog at bo-k dot dk - blog om blogs, nettet, IT, medier og fri software

cookies

Weblog at bo-k dot dk anvender både 1. parts- og 3. parts cookies. Besøg på Weblog at bo-k dot dk forudsætter at du er indforstået med anvendelsen af cookies.

følg med...

RSS Feed til din nyhedslæser Følg bloggen på twitter

find...

søg i alle indlæg:

kontakt...

kontaktformular

Creative Commons Navngivelse - Ikke-kommerciel - Del på samme vilkår 2.5  Licens Weblog at bo-k dot dk is powered by WordPress etc.

Valid XHTML, Valid CSS,

weblog at bo-k dot dk : http://www.bo-k.dk/weblog/index.php