Je commence tout juste avec le développement wordpress. J'essaie de créer un plugin simple qui montre les résultats d'une base de données dans un tableau. Je peux le faire, mais je ne parviens pas à afficher le plug-in en haut des pages d'administration. Je ne sais pas pourquoi il fait ça.
ma fonction de plugin:
add_action('init','hello_world');
function hello_world()
{
global $wpdb;
$query = "Select ID, post_title
From $wpdb->posts Limit 0, 10";
$results = $wpdb->get_results($query, ARRAY_A);
echo "<div class=\"datagrid\"><table>";
echo "<thead><tr><th>header</th><th>header</th><th>header</th><th>header</th></tr></thead>";
echo "<tfoot>
<tr>
<td colspan=\"4\">
<div id=\"paging\">
<ul>
<li>
<a href=\"#\"><span>Previous</span></a>
</li>
<li>
<a href=\"#\" class=\"active\"><span>1</span></a>
</li>
<li>
<a href=\"#\"><span>2</span></a>
</li>
<li>
<a href=\"#\"><span>3</span></a>
</li>
<li>
<a href=\"#\"><span>4</span></a>
</li>
<li>
<a href=\"#\"><span>5</span></a>
</li>
<li>
<a href=\"#\"><span>Next</span></a>
</li>
</ul>
</div>
</tr>
</tfoot>";
echo "<tbody>";
$i = 0;
while($i < 10)
{
foreach ($results as $item)
{
$postID = $item['ID'];
$postTitle = $item['post_title'];
echo "<tr class=\"alt\">";
echo "<td>" .$postID."</td>";
echo "<td>".$postTitle."</td>";
echo "</tr>";
$i++;
}
}
echo "</tbody>";
echo "</table></div>";
}
appelant index.php
<?php
if(is_admin())
{
}
else
{
if(function_exists('hello_world')) {
echo "<div>";
hello_world();
echo "</div>";
}
}
?>
comment puis-je empêcher cela de s'afficher dans la section admin?
Pour compléter la réponse de @ s_ha_dum: Si vous souhaitez uniquement proposer une fonction à utiliser dans un thème, faites-en une action personnalisée.
Échantillon:
add_action( 'call_hello_world', 'hello_world' );
Maintenant, dans un thème, l'auteur peut appeler votre fonction avec…
do_action( 'call_hello_world' );
… Et la fonction imprimera son contenu uniquement là où l'auteur en a besoin.
Cela présente au moins trois avantages:
function_exists()
, qui est toujours… moche.Voici un exemple de plugin:
<?php
/*
* Plugin Name: Custom Action
*/
add_action( 'call_hello_world', 'hello_world' );
/**
* Demo function.
*
* Usage:
* do_action( 'call_hello_world' );
*
* @wp-hook call_hello_world
* @return void
*/
function hello_world()
{
print '<h1>Hello World!</h1>';
}
// static class method
add_action( 'call_static_method', array ( 'Demo_Class', 'static_method' );
// dynamic class method
$demo = new Demo_Class;
add_action( 'call_dynamic_method', array ( $demo, 'dynamic_method' );
class Demo_Class
{
public static function static_method()
{
print 'I was called statically.';
}
public function dynamic_method()
{
print 'I was called with an instance.';
}
}
Installez, activez et utilisez la do_action()
dans un thème aussi souvent que vous en avez besoin.
Vous avez raccordé votre fonction à init
qui s'exécute sur (je crois) chaque page chargée, que ce soit avant ou arrière, et vous transmettez des données en écho. Ne pas être dur, mais qu'espériez-vous qu'il se passe?
Pour résoudre ce problème, supprimez la première ligne - add_action('init','hello_world');
. Votre fonction ne sera alors exécutée que lorsqu'elle sera explicitement appelée à partir de votre code dans index.php
.