как не показать плагин в администраторской области

Я просто начинаю с разработкой Wordpress. Я пытаюсь создать простой плагин, которые показывают результаты дб в таблице. Я могу сделать это, но я испытываю затруднения из-за показа плагина наверху администраторских страниц. Я не уверен, почему это делает это.

моя сменная функция:

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>";
    }

вызов в index.php

    <?php
        if(is_admin())
        {

        }
        else
        {
            if(function_exists('hello_world')) {
                echo "<div>";
                hello_world();
                echo "</div>";
            }
        }
    ?>

как я могу препятствовать тому, чтобы это показало в администраторском разделе?

2
09.11.2012, 00:33
2 ответа

К ответу дополнительного @s_ha_dum: Если Вы просто хотите предложить функцию, которая будет использоваться в теме, сделайте ее пользовательским действием.

Образец:

add_action( 'call_hello_world', 'hello_world' );

Теперь, в теме, автор может вызвать Вашу функцию с …

do_action( 'call_hello_world' );

… и функция распечатает свое содержание только там, где автору нужен он.

Это имеет по крайней мере три преимущества:

  • Можно отключить плагин в любое время, и ничто не повредится. Если не будет никакого обратного вызова для действия, то ничего не произойдет.
  • Вы не должны сверяться function_exists(), который всегда является … ужасен.
  • Другой плагин может использовать то же действие, или это может заменить Ваш обратный вызов.

Вот демонстрационный плагин:

<?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.';
    }
}

Установите, активируйте и используйте do_action() в теме так часто, как Вам нужен он.

6
19.02.2020, 22:25
  • 1
    ... очень хорошая идея. –  s_ha_dum 09.11.2012, 00:56
  • 2
    так, я заменил его Вашим предложением и назвал do_action ('call_hello_world'); на index.php странице, но плагине теперь не показывает. я пропускаю что-то? –  ironman 09.11.2012, 00:56
  • 3
    @user987795 я добавил демонстрационный плагин. Скопируйте его в отдельный файл и установите тот файл как плагин. –  fuxia♦ 09.11.2012, 01:12
  • 4
    привет @toscho, что, если это - вид ООП плагина, это может все еще применить? –  Reigel 28.01.2013, 12:45
  • 5
    @Reigel Видит мое обновление. –  fuxia♦ 28.01.2013, 13:02

Вы сцепили свою функцию с init который работает (я верю), каждая загрузка страницы, передняя сторона или назад, и Вы повторяете данные. Не быть резким, но что Вы ожидали происходить?

Для решения этого удалите первую строку- add_action('init','hello_world'); Ваша функция будет затем только работать, когда явно названо из Вашего кода в index.php.

0
19.02.2020, 22:25
  • 1
    , Хотя статья является неполной, ссылка на Кодекс всегда хороша :) - codex.wordpress.org/Plugin_API/Action_Reference/init –  brasofilo 09.11.2012, 00:43
  • 2
    @brasofilo, да, Вы правы. Я пытаюсь добавить те ссылки. Я забыл. –  s_ha_dum 09.11.2012, 00:45
  • 3
    благодарит, я удалил add_action ('init', 'hello_world'); это удалило его не только от администраторского раздела, но также и индекса. Снова, я только начинаю с Wordpress dev, таким образом, это все плохо мне знакомо. –  ironman 09.11.2012, 00:47
  • 4
    @user987795, я предположил, что Ваш плагин правильно загружался и что это было выборкой. Возможно, это не имеет место. Плагины не должны быть сложными, hello dolly плагин, который поставлется с WordPress, почти так прост, как он может добираться, но Вам действительно нужны несколько вещей, как правильные заголовки. –  s_ha_dum 09.11.2012, 00:50