JQuery prepend a function

时间:2012-11-21 作者:user1757516

我正在尝试查看此代码的错误所在。我试图在管理菜单上预先设置头像和用户元。由于代码就在body标记的正下方,所以我已经收到了标题发送的消息。

function profile_script() {
echo \'<script type="text/javascript">
/* <![CDATA[ */
(function($) {
    $("#adminmenu").prepend($menuprofile);
})(jQuery);
/* ]]> */
</script>\';
}
add_action( "admin_footer", \'profile_script\' );

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

admin\\u菜单挂钩不是用来显示菜单的,它实际上是菜单构造过程的一部分,用于准确了解菜单中的内容,这是您应该调用以下函数的地方add_submenu_page. 因此,当启动此操作时,尚未打印任何内容,也没有头部/身体标签。

但即使这样,我也不知道你的代码是如何工作的。第二个函数试图通过AJAX预先编写代码,但它在Javascript代码中间调用了一个PHP变量。要想让它起作用,需要密码赋予某种超自然的精神力量。JQuery代码不了解PHP变量。

但是,如果说它确实有那些超自然的精神力量,或者说一位谷歌工程师带着soem魔术技术出现,让你的javascript进入PHP进程的内存(该进程在页面加载完成后已经退出),那么我们就有了一个全新的问题。

您试图使用变量$menuprofile,但该变量未在任何地方声明。,如果它被宣布,它将包含什么?它不包含菜单配置文件html,它将echo输出到前端,它没有放入一个名为$menuprofile.

请记住,代码中的所有内容都是有原因的,都是按特定顺序排列的,都是有特定原因的,如果您不知道为什么要在其中添加“echo”,那么您应该仔细阅读,因为您可能会花更多时间在复制粘贴随机内容上,因为这样做很可能会失败。

因此,让我们从JS代码开始:

function profile_script() {
    echo \'<script type="text/javascript">
    /* <![CDATA[ */
    (function($) {
        var menuprofile = ?; // where do we get this value from?
        $("#adminmenu").prepend(menuprofile);
    })(jQuery);
    /* ]]> */
    </script>\';
}
add_action( "admin_footer", \'profile_script\' );
我们需要从某处获取menuprofile,我们有两种选择:

将代码作为js字符串回显,并在js中创建html元素,然后在PHP中回显,然后使用JQuery抓取元素并将其移动到正确的位置,我将使用第二个选项作为示例:

function profile_script() {
    echo \'<div id="example>Hello World</div>";
    echo \'<script type="text/javascript">
    /* <![CDATA[ */
    (function($) {
        var menuprofile = $("#example"); // grab that html element from before
        $("#adminmenu").prepend(menuprofile);
    })(jQuery);
    /* ]]> */
    </script>\';
}
add_action( "admin_footer", \'profile_script\' );
您还应该为函数命名名称,或者至少为它们添加前缀,以防止与编写具有相同命名思想的函数的其他人发生冲突。您还应该等待DOM就绪:

function wpse73532_profile_script() {
    echo \'<div id="example>Hello World</div>";
    echo \'<script type="text/javascript">
    /* <![CDATA[ */
    jQuery(document).ready(function(){
        var menuprofile = jQuery("#example"); // grab that html element from before
        jQuery("#adminmenu").prepend(menuprofile);
    });
    /* ]]> */
    </script>\';
}
add_action( "admin_footer", \'wpse73532_profile_script\' );
相反,您是否考虑过修改管理栏?还有,当菜单被折叠时,您会怎么做?或者如果CSS和菜单布局在未来版本的WordPress中发生变化?

免责声明:本回答中使用了大量讽刺,但无意冒犯

结束

相关推荐

Using shortcodes in PHP

我试图在我的页面中使用短代码,我从一个简单的测试开始。在里面functions.php:function HelloWorldShortcode() { return \'<p>Hello World!</p>\'; } add_shortcode(\'helloworld\', \'HelloWorldShortcode\'); 在中index.php:[helloworld] 这不会产生<p>Hello World