Asadar,
Lucrand mai tot timpul cu wordpress, doresc sa arat celor interesati cum pot sa iti customizeze o tema standard pe platforma wordpress pentru sistemul de afiliere 2parale, in care pot introduce link-ul de afiliat direct in admin panel, fara sa puna butonul in post, etc...
Asadar, pe scurt:
1. trebuie modificat fisierul function.php din tema wordpress
2. trebuie modificat fisierul single.php (content-single.php la alte teme).
Pe larg:
1. Deschidem fisierul function.php in care introducel urmatorul cod care va aparea in admin panel, la adaugarea / modificarea unui post.
Cod PHP:
<?php
$sp_boxes = array (
'Informatii afiliere' => array (
array( 'imgprodus', 'Imaginea produsului: http://numesite.com/imagini/sony-vayo.jpg' ),
array( 'linkafiliat', 'Link afiliat:' ),
array( 'pret', 'Pret produs:' ),
),
// Do not edit past this point.
// Use the admin_menu action to define the custom boxes
add_action( 'admin_menu', 'sp_add_custom_box' );
// Use the save_post action to do something with the data entered
// Save the custom fields
add_action( 'save_post', 'sp_save_postdata', 1, 2 );
// Adds a custom section to the "advanced" Post and Page edit screens
function sp_add_custom_box() {
global $sp_boxes;
if ( function_exists( 'add_meta_box' ) ) {
foreach ( array_keys( $sp_boxes ) as $box_name ) {
add_meta_box( $box_name, __( $box_name, 'sp' ), 'sp_post_custom_box', 'post', 'normal', 'high' );
}
}
}
function sp_post_custom_box ( $obj, $box ) {
global $sp_boxes;
static $sp_nonce_flag = false;
// Run once
if ( ! $sp_nonce_flag ) {
echo_sp_nonce();
$sp_nonce_flag = true;
}
// Genrate box contents
foreach ( $sp_boxes[$box['id']] as $sp_box ) {
echo field_html( $sp_box );
}
}
function field_html ( $args ) {
switch ( $args[2] ) {
case 'textarea':
return text_area( $args );
case 'checkbox':
// To Do
case 'radio':
// To Do
case 'text':
default:
return text_field( $args );
}
}
function text_field ( $args ) {
global $post;
// adjust data
$args[2] = get_post_meta($post->ID, $args[0], true);
$args[1] = __($args[1], 'sp' );
$label_format =
'<label for="%1$s">%2$s</label><br />'
. '<input style="width: 95%%;" type="text" name="%1$s" value="%3$s" /><br /><br />';
return vsprintf( $label_format, $args );
}
function text_area ( $args ) {
global $post;
// adjust data
$args[2] = get_post_meta($post->ID, $args[0], true);
$args[1] = __($args[1], 'sp' );
$label_format =
'<label for="%1$s">%2$s</label><br />'
. '<textarea style="width: 95%%;" name="%1$s">%3$s</textarea><br /><br />';
return vsprintf( $label_format, $args );
}
/* When the post is saved, saves our custom data */
function sp_save_postdata($post_id, $post) {
global $sp_boxes;
// verify this came from the our screen and with proper authorization,
// because save_post can be triggered at other times
if ( ! wp_verify_nonce( $_POST['sp_nonce_name'], plugin_basename(__FILE__) ) ) {
return $post->ID;
}
// Is the user allowed to edit the post or page?
if ( 'page' == $_POST['post_type'] ) {
if ( ! current_user_can( 'edit_page', $post->ID ))
return $post->ID;
} else {
if ( ! current_user_can( 'edit_post', $post->ID ))
return $post->ID;
}
// OK, we're authenticated: we need to find and save the data
// We'll put it into an array to make it easier to loop though.
// The data is already in $sp_boxes, but we need to flatten it out.
foreach ( $sp_boxes as $sp_box ) {
foreach ( $sp_box as $sp_fields ) {
$my_data[$sp_fields[0]] = $_POST[$sp_fields[0]];
}
}
// Add values of $my_data as custom fields
// Let's cycle through the $my_data array!
foreach ($my_data as $key => $value) {
if ( 'revision' == $post->post_type ) {
// don't store custom data twice
return;
}
// if $value is an array, make it a CSV (unlikely)
$value = implode(',', (array)$value);
if ( get_post_meta($post->ID, $key, FALSE) ) {
// Custom field has a value.
update_post_meta($post->ID, $key, $value);
} else {
// Custom field does not have a value.
add_post_meta($post->ID, $key, $value);
}
if (!$value) {
// delete blanks
delete_post_meta($post->ID, $key);
}
}
}
function echo_sp_nonce () {
// Use nonce for verification ... ONLY USE ONCE!
echo sprintf(
'<input type="hidden" name="%1$s" id="%1$s" value="%2$s" />',
'sp_nonce_name',
wp_create_nonce( plugin_basename(__FILE__) )
);
}
// A simple function to get data stored in a custom field
if ( !function_exists('get_custom_field') ) {
function get_custom_field($field) {
global $post;
$custom_field = get_post_meta($post->ID, $field, true);
echo $custom_field;
}
}
?>
2. Deschidem fisierul single.php (content-single.php la anumite teme) si vom insera urmatorul cod acolo unde dorim sa ne apara informatiile adaugate in admin panel:
Cod PHP:
<?php if( get_post_meta($post->ID, "imgprodus", true) ): ?>
<img src="<?php bloginfo('template_directory'); ?>/timthumb.php?src=<?php $values = get_post_custom_values("imgprodus"); echo $values[0]; ?>&w=200&zc=1&q=200" alt="<?php the_title(); ?>"><?php endif; ?>
<a href="<?php $values = get_post_custom_values("linkafiliat"); echo $values[0]; ?>" target="_blank"><img src="http://www.lanting.com/graphics/buy-button.jpg" border="0" /></a>
Pret:<?php $values = get_post_custom_values("pret"); echo $values[0]; ?> <?php if( get_post_meta($post->ID, "pret", true) ): ?>
<?php endif; ?>
Aici eu am pus ca exemplu un buton (http://www.lanting.com/graphics/buy-button.jpg) care poate fi modificat de catre voi ori prin link, buton, text, etc...
Deasemenea, codul de mai sus poate fi aranjat in pagina wordpress dupa bunul dvs plac (ex: imaginea in dreapta, pretul in stanga, butonul la mijloc, etc...)
In codul de mai sus am folosit imagine pusa direct pe host, si pentru a functiona mai aveti nevoie si de un fisier numit: timthumb.php care in puteti descarca de aici si trebuie urcat pe host in folderul temei.
Daca intampinati probleme, aveti intrebari, nelamururi va stau la dispozitie cu cea mai mare placere.
Enjoy ...