【问题标题】:Wordpress plugin admin page loads in the wrong placesWordpress 插件管理页面加载到错误的位置
【发布时间】:2012-06-18 18:21:54
【问题描述】:

我正在尝试将自定义 cms 模块修改为 WordPress 插件。

插件仅包含一个管理部分。访问者看到的部分是通过嵌入了 PHP 代码的常规 WordPress 页面加载的。这很好用。

对于管理部分,我在 plugins 目录中创建了一个单独的文件夹,其中包含两个 PHP 文件。插件已激活,并且菜单项正确加载。但是,我遇到的问题是插件的管理内容已加载 A) 在每个 wordpress 管理页面中,以及 B)一直在页面顶部。整个管理菜单低于我围绕内容放置的包装类。

对于 A) 我在想我应该告诉插件仅在其自己的页面上加载,但我不知道如何。 对于 B)我的猜测是我应该告诉插件在哪里插入内容(使用钩子?),但我也不知道如何。 这是我第一次尝试构建插件。我在许多网站上阅读了有关如何编写插件的信息,但我无法正确理解。

两个 PHP 文件:

  • 主插件文件:verkoopstatus-admin.php(我省略了插件模板信息部分):

Pastebin verkoopstatus-admin.php

  • 插件内容部分:verkoopstatus.php

Pastebin verkoopstatus.php

谁能告诉我这里缺少什么?

【问题讨论】:

    标签: php wordpress plugins load hook


    【解决方案1】:
    <?php
    /*
    if($include_flag == 1)
    {
    */
    function showHome($project)
    {
        $home_query = mysql_query("SELECT * FROM mod_verkoopstatus WHERE project = '$project'") or die(mysql_error());
        while($home_info = mysql_fetch_object($home_query))
        {
            if($home_info->status == 1)
            {
                $color = '#2E2EFE';
            }
            if($home_info->status == 2)
            {
                $color = '#3E8028';
            }
            if($home_info->status == 3)
            {
                $color = '#F26A20';
            }
            if($home_info->status == 4)
            {
                $color = '#F1F121';
            }
            echo '<a target="_self" href="http://localhost/abc/wp-admin/admin.php?page=Verkoopstatus'.$home_info->project.'&nr='.$home_info->nr.'">';
            echo '<div style="position: absolute; border: 1px solid black; margin-left: '.$home_info->left.'px; margin-top: '.$home_info->top.'px; height: '.$home_info->height.'px; width: '.$home_info->width.'px; background-color: '.$color.'"><p style="padding-top: 0px; margin-top: 0px;" align="center">'.$home_info->nr.'</p></div>';
            echo '</a>';
        }
    }
    

    上面一段的最后一个括号应该在文件的末尾(在 div end .wrap 之后)

    【讨论】:

    • 谢谢金贝尔!管理设置现在仅显示在插件管理页面上。但是,信息会无限重复,而不是只重复一次。有什么想法吗?
    • 调整了代码:[link(]pastebin.com/fqEgm02W) 当我将代码分成块时: 1:showhome 函数 2:if(isset part 3: table/html/css 4:关闭 php 也禁用块 4 中的所有代码(不知道它的意图)测试:1. 如果代码如您在 pastebin 中看到的那样,则问题与最初发布的一样。2. 将块 1 的右括号移动到块 4:仅显示页面在插件页面和标题下方,但插件本身显示在一个循环中。3.将块 2 的右括号移动到块 4:空页面。我需要找到一种方法来应用 Gembel 的解决方案,但要避免循环。有人吗?
    • 取得了一些进展,将关闭此主题并打开一个新主题。
    【解决方案2】:

    我认为更好的是

    function showHome($project)
    {
        $out = '';
    
        $home_query = mysql_query("SELECT * FROM mod_verkoopstatus WHERE project = '$project'") or die(mysql_error());
        while($home_info = mysql_fetch_object($home_query))
        {
            switch ( $home_info->status ) {
                case 1:
                    $color = '#2E2EFE';
                    break;
    
                case 2:
                    $color = '#3E8028';
                    break;
    
                case 3:
                    $color = '#F26A20';
                    break;
    
                case 4:
                    $color = '#F1F121';
                    break;
                default:
                    $color = '#FFF';
                    break;
            }
    
           $out.= '<a target="_self" href="http://localhost/abc/wp-admin/admin.php?page=Verkoopstatus'.$home_info->project.'&nr='.$home_info->nr.'">';
           $out.= '<div style="position: absolute; border: 1px solid black; margin-left: '.$home_info->left.'px; margin-top: '.$home_info->top.'px; height: '.$home_info->height.'px; width: '.$home_info->width.'px; background-color: '.$color.'"><p style="padding-top: 0px; margin-top: 0px;" align="center">'.$home_info->nr.'</p></div>';
            $out.='</a>';
        }
        return $out; // & echo showHome($project);
    }
    

    【讨论】:

      猜你喜欢
      • 2017-09-19
      • 1970-01-01
      • 2019-03-07
      • 1970-01-01
      • 2018-03-01
      • 1970-01-01
      • 2015-02-07
      • 2012-03-05
      • 1970-01-01
      相关资源
      最近更新 更多