web-dev-qa-db-fra.com

comment ne pas afficher le plugin dans la zone d'administration

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?

2
ironman

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:

  • Vous pouvez désactiver le plugin à tout moment, et rien ne se cassera. S'il n'y a pas de rappel pour une action, rien ne se passera.
  • Vous n’avez pas à vérifier avec function_exists(), qui est toujours… moche.
  • Un autre plugin peut utiliser la même action ou remplacer votre rappel.

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.

6
fuxia

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.

0
s_ha_dum