[Script] - Interroger et manipuler Wordpress directement via un script PHP en crontab

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par iempty, 26 Avril 2012.

  1. iempty
    iempty WRInaute discret
    Inscrit:
    4 Février 2010
    Messages:
    217
    J'aime reçus:
    0
    Salut à tou(te)s,

    Voilà, j'ai un projet de blog sous Wordpress, et j'ai un besoin assez particulier...

    J'aimerais dans mon thème afficher une info présente dans un champ personnalisé "myKey".
    Jusque là pas de soucis, il suffit a priori d'utiliser "get_post_meta()" avec "myKey" en paramètre, à l'endroit souhaité dans mon thème...

    Par contre, j'aimerais que ce champ personnalisé soit mis à jour automatiquement toutes les nuits pour tous mes articles, avec des données récupérées via une API externe (de Google pour ne pas le nommer) qui me renvoie du JSON...

    Je pensais donc faire un petit script unix, ajouté en crontab (j'ai vu que chez OVH en hébergement mutualisé c'était possible) pour mettre à jour mes champs personnalisés (avec "update_post_meta()")

    Donc un truc du style :
    Code:
    #!/usr/local/bin/php
    <?php
    
    // 1 - Importer ce qu'il me faut pour pouvoir utiliser WP et manipuler sa BDD
    
    // 2 - Récupérér la liste des IDs de tous mes articles (éventuellement d'un catégorie spécifique)
    
    // 3 - Itération sur chaque ID d'article de la liste :
    
        // 3a - Appel API JSON et récupération de données à attacher à mon article
    
        // 3b - Mise à jour du champ personnalisé "myKey" de l'article avec les données récupérées : utilisation de "update_post_meta($post_id, $meta_key, $meta_value);"
    ?>
    
    Pensez-vous que c'est possible ?

    Si oui, comment réaliser toutes ces étapes (surtout 1 et 2 donc, puisque la 3 c'est plus mon domaine) ?

    Merci par avance pour votre aide, je sais qu'il y en a "qui tâtent" avec Wordpress ici, donc j'espère que vous pourrez m'aider !
    :)

    Bonne journée et à bientôt !
     
  2. Marie-Aude
    Marie-Aude WRInaute accro
    Inscrit:
    5 Juin 2006
    Messages:
    16 371
    J'aime reçus:
    2
    Je ne vois pas trop ce que tu veux dire pour le "1", l'exemple du siteduzero me semble clair :)

    1 - tu te connectes à la base de données (php de base)
    2 tu fais ta sélection
    select * from postmeta (comme ça tu as l'id, et tout)
    Si éventuellement tu veux filtrer sur la catégorie, c'est un peu plus complexe il faut faire un left join sur postmeta.post_id et term_relationships.object_id , puis filtrer sur term_relationships.object_id

    Ensuite tu fais directement un update dans la base de la ligne de postmeta, pour ce genre d'opération, si tu es sûr de tes sources de données (pas d'injection sql par exemple ^^) pas besoin de passer par les fonctions wordpress
     
  3. iempty
    iempty WRInaute discret
    Inscrit:
    4 Février 2010
    Messages:
    217
    J'aime reçus:
    0
    ... oui c'est sur je me complique peut être la tâche tu as raison...

    Je voulais passer par les méthodes de WP par simplicité d'utilisation pour la connexion à ma base et éviter de faire des requêtes SQL directes sur ma base... donc éviter de faire des conneries, car je suis vraiment une bille en SQL ! :)

    Bon après ce que je veux faire en effet doit pas être compliqué au niveau requêtes, c'est l'occasion de s'y mettre !

    Mais en effet, charger la base de WP pour utiliser 2 pauvres fonctions de mise à jour des customFields, c'est peut être un peu "lourd" !

    Merci pour ton retour en tout cas, je reviendrai poster éventuellement ici si j'ai des soucis ou des précisions à apporter !

    A+
     
  4. Marie-Aude
    Marie-Aude WRInaute accro
    Inscrit:
    5 Juin 2006
    Messages:
    16 371
    J'aime reçus:
    2
    En fait tu confonds "charger la base" et "activer l'ensemble des fonctionnalités et classes wordpress"

    Charger la base, c'est simplement le "connect"
     
  5. iempty
    iempty WRInaute discret
    Inscrit:
    4 Février 2010
    Messages:
    217
    J'aime reçus:
    0
    Salut !

    Bon, comme je suis vraiment une quiche en SQL, j'ai persévéré dans mon idée... comme quoi l'acharnement paie ! :)

    J'ai en fait analysé le code de chargement de wordpress, et essayé avec ce qui me paraissait le plus "light" permettant de charger le "coeur" de Wordpress pour mes besoins

    Il suffit donc d'importer le "wp-load.php" de Wordpress avant de pouvoir utiliser ses fonctions de manipulation.

    PHP:
    <span class="syntaxhtml"><br />#!/usr/local/bin/php<br /><span class="syntaxdefault"><?php<br />  </span><span class="syntaxcomment">// 1 - Importer ce qu'il me faut pour pouvoir utiliser WP et manipuler sa BDD<br /></span><span class="syntaxdefault">  require_once</span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> dirname</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">__FILE__</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> </span><span class="syntaxstring">'/wp-load.php'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">  <br />  </span><span class="syntaxcomment">// 2 - Récupérér la liste des IDs de tous mes articles (éventuellement d'un catégorie spécifique)<br /></span><span class="syntaxdefault">  $args </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(<br /></span><span class="syntaxdefault">      </span><span class="syntaxstring">'category_name'</span><span class="syntaxdefault">   </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'ma_categorie'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">      </span><span class="syntaxstring">'post_type'</span><span class="syntaxdefault">       </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'post'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">      </span><span class="syntaxstring">'post_status'</span><span class="syntaxdefault">     </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'publish'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">  $myposts </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> get_posts</span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> $args </span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">  <br />  <br />  </span><span class="syntaxcomment">// 3 - Itération sur chaque ID d'article de la liste :<br /></span><span class="syntaxdefault">  foreach</span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> $myposts as $post </span><span class="syntaxkeyword">){</span><span class="syntaxdefault">   <br />    </span><span class="syntaxcomment">// 3a - Appel API JSON et récupération de données à attacher à mon article<br /></span><span class="syntaxdefault">    </span><span class="syntaxcomment">// Récupération d'un customField de mon article saisi à la main et qui me sert de clé pour mon API<br /></span><span class="syntaxdefault">    $myApiKey </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> get_post_meta</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$post</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">ID</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'myApiKey'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> true</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    if</span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> isset</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$myApiKey</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">){<br /></span><span class="syntaxdefault">      </span><span class="syntaxcomment">// Appel du webservice de l'API Google par exemple avec ma clé, et analyse du résultat JSON pour extraire ma donnée recherchée<br /></span><span class="syntaxdefault">      $dataAPI </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> getDataAPI</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$myApiKey</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">      </span><span class="syntaxcomment">// 3b - Mise à jour du champ personnalisé "myApiData" de l'article avec les données récupérées<br /></span><span class="syntaxdefault">      update_post_meta</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$post</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">ID</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'myApiData'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $dataAPI</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">  </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">?><br /></span></span>
    Ca fonctionne pour mon besoin, et ça permet de faire pas mal de trucs sur Wordpress via un script.
    Pour le moment j'ai juste testé "en ligne" via une exécution par URL (donc en commentant la première ligne).
    Je vais essayer ce soir de le planifier dans mon manager OVH pour exécution via shell + crontab.

    Je vous dirai si je confirme que ça fonctionne également...

    A+
     
  6. iempty
    iempty WRInaute discret
    Inscrit:
    4 Février 2010
    Messages:
    217
    J'aime reçus:
    0
    Pour info, testé hier soir d'ajouter mon script au planificateur de tâches OVH, et ça fonctionne nickel !

    Attention, bien nommer son script "monscript.php" et donner le chemin complet depuis "www" dans le manager OVH.

    Voilà, en espérant que ça pourra aider du monde un jour ! :)

    Et merci à Marie-Aude pour ses conseils.
    A+
     
Chargement...
Similar Threads - [Script] Interroger manipuler Forum Date
[script] anti spam referrer Développement d'un site Web ou d'une appli mobile 20 Août 2015
[script] miniature et cache d'image à la volée Développement d'un site Web ou d'une appli mobile 13 Décembre 2013
[script] changer un texte en images Développement d'un site Web ou d'une appli mobile 10 Décembre 2013
[Script] Ajouter les boutons de partage des réseaux sociaux sans le tracking Développement d'un site Web ou d'une appli mobile 25 Août 2013
[Script] Clone légal? Développement d'un site Web ou d'une appli mobile 7 Avril 2013
[script] Comment charger un script différent suivant l'heure ? Help ! Développement d'un site Web ou d'une appli mobile 4 Octobre 2012
[script] Oméga-Annonces 1.5.1 - Php/MySqL Développement d'un site Web ou d'une appli mobile 4 Septembre 2012
[script] tracking formulaire d'affiliation Développement d'un site Web ou d'une appli mobile 5 Août 2012
[Script] Pour charger un fichier et le mettre sur son serveur Développement d'un site Web ou d'une appli mobile 6 Mars 2012
[SCRIPT] Topsite Développement d'un site Web ou d'une appli mobile 28 Août 2011
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice