web-dev-qa-db-fra.com

Insertion d'une sortie de fonctions après le contenu

J'essaie donc d'ajouter un bouton à la fin de mon blog, voici le code que j'ai dans le plugin jusqu'à présent:

<?php
/*
Plugin Name: etc....
*/

function shares_content() { ?>
  <div class='social-shares-container'>
    <a href='https://www.facebook.com/sharer/sharer.php?u=<?php echo the_permalink(); ?>'>Share on Facebook</a>
  </div> <?php
}

function shares_add_buttons($content) {
  global $post;

  if (!is_page() && is_object($post)) {
    return $content . shares_content();
  }

  return $content;
}

add_filter('the_content', 'shares_add_buttons');
?>

Cela ajoute le lien juste avant mon contenu, mais si je fais quelque chose comme ceci, il ajoute le nouveau contenu à l'endroit souhaité (après the_content):

function shares_add_buttons($content) {
  global $post;

  if (!is_page() && is_object($post)) {
    return $content . 'some random content';
  }

  return $content;
}

Quelqu'un pourrait-il me dire pourquoi c'est s'il vous plaît?

1
D. Winning

Votre fonction shares_content renvoie directement le contenu, ce qui ne fonctionnera pas si vous essayez d'affecter les résultats à une variable ou de les utiliser dans une instruction return dans une autre fonction.

Vous pouvez le changer en return la chaîne:

function shares_content() {
    $content = "<div class='social-shares-container'><a href='https://www.facebook.com/sharer/sharer.php?u=%s'>Share on Facebook</a></div>";
    return sprintf( $content, get_permalink() );
}

Il convient également de souligner ici l'utilisation de get_permalink(). Si vous regardez le code source, cette fonction a aussi returns sa valeur. Il existe une autre fonction API, the_permalink(), qui contient echo au lieu de return. Cela briserait également la sortie de votre filtre. La plupart des fonctions WordPress ont deux versions comme celle-ci.

1
Milo

Dans cette ligne:

return $content . shares_content();

Vous concaténez le contenu d'origine avec le résultat de la fonction shares_content. Donc, cela semble correct, mais alors ...

Dans cette fonction:

function shares_content() { ?>
  <div class='social-shares-container'>
    <a href='https://www.facebook.com/sharer/sharer.php?u=<?php echo the_permalink(); ?>'>Share on Facebook</a>
  </div> <?php
}

vous ne renvoyez rien, donc cette fonction n’a aucun résultat, donc rien n’est ajouté au contenu de votre filtre.

Mais aussi ... Cette fonction fait écho à div avec le lien, de sorte que le contenu soit imprimé, lorsque la fonction est exécutée, de sorte qu'il soit imprimé avant le contenu ...

0
Krzysiek Dróżdż