En WordPress podemos ordenar nuestras entradas (post) por fecha, título, etc… pero imaginaros que tenéis un botón de “me gusta” para cada post, y queréis ordenar el listado por el número de “me gusta” de facebook de cada post…

En primer lugar, necesitamos un lugar para almacenar el número de “me gusta” de cada post.

Abrimos el archivo “functions.php” de nuestro tema y incluimos la siguiente función:

function inserta_customfield_facebook($post_ID) {
    global $wpdb;
    if(!wp_is_post_revision($post_ID)) {
        add_post_meta($post_ID, 'numero_megusta', '0', true);
    }
}
add_action('publish_page', 'inserta_customfield_facebook');
add_action('publish_post', 'inserta_customfield_facebook');

Con este código creamos automáticamente un campo personalizado (custom field) llamado “numero_megusta” que almacenara el número total me gusta de ese post.

A continuación, añadimos (si no lo tenéis ya) el botón “me gusta” de facebook:

<iframe src="http://www.facebook.com/widgets/like.php?href=<?php the_permalink(); ?>&layout=button_count&show_faces=false&width=100&action=like&font&colorscheme=light&height=20&locale=es_ES" scrolling="no" frameborder="0" allowTransparency="true"></iframe>

Lo siguiente que necesitamos para comprobar cuántos “me gusta” tiene ese post y actualizar el valor del campo personalizado que hemos creado al principio (numero_megusta).

Copia y pega uno de los 2 siguientes códigos en el header.php de tu tema.

a) Si no utilizas permalinks (ej. miweb.com/p?=144) en la urls de tu web wordpress, copia y pega este código:

global $wp_query;

$idpost = $wp_query->post->ID;

$data = file_get_contents('http://graph.facebook.com/?id='.bloginfo('url').'?p='.$idpost);

$json = $data;

$obj = json_decode($json);
$like_no = $obj->{'shares'};
$meta_values = get_post_meta($idpost, 'numero_megusta', true);

if ($like_no == $meta_values) {
    // paso
}elseif (empty($meta_values)) {
    add_post_meta($idpost, 'numero_megusta', $like_no, true);
    update_post_meta($idpost, 'numero_megusta', $like_no, false);
}else {
    update_post_meta($idpost, 'numero_megusta', $like_no, false);
}

b) Si utilizas permalinks (ej. miweb.com/mi-pagina) con url amigables, copia y pega este código:

global $wp_query;

$paginaweb = get_permalink();

$idpost = $wp_query->post->ID;

$data = file_get_contents('http://graph.facebook.com/?id='.$paginaweb);

$json = $data;

$obj = json_decode($json);
$like_no = $obj->{'shares'};
$meta_values = get_post_meta($idpost, 'numero_megusta', true);

if ($like_no == $meta_values) {
    // paso
}else if (empty($meta_values)) {
    add_post_meta($idpost , 'numero_megusta', $like_no, true);
    update_post_meta($idpost , 'numero_megusta', $like_no, false);
} else {
    update_post_meta($idpost, 'numero_megusta', $like_no, false);
}

Ahora ya solo falta hacer el “loop” de nuestros post (por ejemplo en nuestro index.php, archive.php, etc…)

<?php
$query_facebook = new WP_Query();
$query_facebook->query('posts_per_page=20&meta_key=numero_megusta&orderby=meta_value&order=desc&paged='.$paged);

while ($query_facebook->have_posts()) : $query_facebook->the_post(); ?>

<div class="post" id="post-<?php the_ID(); ?>">
    <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
    <p>Fecha: <?php the_time('j M Y') ?></p>
    <?php the_excerpt(); ?>
    <div class="boton_facebook">
        <iframe src="http://www.facebook.com/widgets/like.php?href=<?php the_permalink(); ?>&layout=button_count&show_faces=false&width=100&action=like&font&colorscheme=light&height=20&locale=es_ES" scrolling="no" frameborder="0" allowTransparency="true"></iframe>
    </div>
</div>

<?php endwhile; ?>

* Adaptar el loop a los campos de vuestros diseños

Agradezco tu comentario 🤘