所以我继续遇到这个问题,我只是在寻找解决这个问题的最佳和最简单的解决方案。
我已经在许多不同的项目中使用了自定义帖子类型,并使用自定义元框对其进行了扩展,然后通过添加自定义脚本(如jQuery事件日历选择器)对其进行了进一步扩展。。。除了一个关键问题外,所有这些都非常有效。。。我不想在管理中的每个页面上加载这些自定义jQuery脚本。
我本质上只是在寻找一种方法,当我在;编辑帖子;特定帖子类型的页面。
这里最好的解决方案是什么?
首先,非常感谢您。
事实上,我很震惊插件开发人员不能确定这样的事情,因为我发现这是不同插件存在问题的关键原因之一。
我对此还有一些问题。例如
我修改了脚本以调用if语句,如下所示:
if (is_admin() && $pagenow==\'post-new.php\' OR $pagenow==\'post.php\' && $typenow==\'events\')
正如你所看到的,我正在尝试设置,以便我的脚本仅在我添加或编辑“post type”中的帖子时才会被调用;事件;。
我不希望脚本加载到任何其他页面上,也不希望它在post类型中的页面列表上运行;“事件”;所以我认为if语句是正确的。
然而,问题似乎是,只有当我在此帖子类型中创建新帖子时,脚本才会加载,但当我编辑现有帖子时,脚本似乎不起作用。
你能不能测试一下,也许让我知道我可能做错了什么?
这是我使用的确切代码。。。也许有更好或更简单的方法可以做到这一点?
<?php
// INCLUDE METABOX CUSTOM JQUERY DATEPICKER 2
add_action(\'admin_init\',\'load_admin_datapicker_script\');
function load_admin_datapicker_script() {
global $pagenow, $typenow;
if (is_admin() && $pagenow==\'post-new.php\' OR $pagenow==\'post.php\' && $typenow==\'events\') {
$ss_url = get_bloginfo(\'stylesheet_directory\');
wp_enqueue_script(\'jquery\');
wp_enqueue_script(\'custom_js_jquery_ui\',"{$ss_url}/admin-metabox/js/jquery-ui-1.7.1.custom.min.js",array(\'jquery\'));
wp_enqueue_script(\'custom_js_daterangepicker\',"{$ss_url}/admin-metabox/js/daterangepicker.jQuery.js",array(\'jquery\'));
wp_enqueue_script(\'custom_js_custom\',"{$ss_url}/admin-metabox/js/custom.js",array(\'jquery\'),NULL,TRUE);
wp_enqueue_style(\'custom_css_daterangepicker\',"{$ss_url}/admin-metabox/css/ui.daterangepicker.css");
wp_enqueue_style(\'custom_css_jquery_ui\',"{$ss_url}/admin-metabox/css/redmond/jquery-ui-1.7.1.custom.css");
}
}
还有。。。如果我想添加三种帖子类型并为每种帖子类型加载不同的JS脚本,那么我会将上面的代码分别复制三次吗?或者这不是一种很好的方法吗?例如打电话是不是更好:global$pagenow,$typenow;在我的函数文件的顶部,或者当我多次复制它时,它是否重要或使事情复杂化?
在一个不同的问题上。。。例如,我正在使用;重力式;插件,但我注意到他们的脚本在管理员的每个页面上运行,这导致了其他插件的问题。我将如何修改他们的脚本,以确保脚本仅在需要时加载。
更新2我已经修改了我的功能。php文件和Mike(下面)提供的代码,但在创建新帖子或页面时,似乎仍然包含了适用的javascript。这意味着当您试图通过创建新的默认wordpress帖子/页面或基于自定义帖子类型创建新帖子/页面来创建新帖子或页面时。Mike提出的代码适用于所有其他管理页面,当您;“编辑”;现有帖子/页面或自定义帖子类型。是否有任何建议的修改以使此工作正确?
这是我当前的代码:
<?php
add_action(\'admin_init\',\'load_admin_datapicker_script\');
function load_admin_datapicker_script() {
global $pagenow, $typenow;
if (empty($typenow) && !empty($_GET[\'post\'])) {
$post = get_post($_GET[\'post\']);
$typenow = $post->post_type;
}
if (is_admin() && $pagenow==\'post-new.php\' OR $pagenow==\'post.php\' && $typenow==\'events\') {
$ss_url = get_bloginfo(\'stylesheet_directory\');
wp_enqueue_script(\'jquery\');
wp_enqueue_script(\'custom_js_jquery_ui\',"{$ss_url}/admin-metabox/js/jquery-ui-1.7.1.custom.min.js",array(\'jquery\'));
wp_enqueue_script(\'custom_js_daterangepicker\',"{$ss_url}/admin-metabox/js/daterangepicker.jQuery.js",array(\'jquery\'));
wp_enqueue_script(\'custom_js_custom\',"{$ss_url}/admin-metabox/js/custom.js",array(\'jquery\'),NULL,TRUE);
wp_enqueue_style(\'custom_css_daterangepicker\',"{$ss_url}/admin-metabox/css/ui.daterangepicker.css");
wp_enqueue_style(\'custom_css_jquery_ui\',"{$ss_url}/admin-metabox/css/redmond/jquery-ui-1.7.1.custom.css");
}
}
?>
最合适的回答,由SO网友:MikeSchinkel 整理而成
首先,我想你are using wp_enqueue_script()
to load your scripts, 正当
也就是说,如果我理解你的问题what you need is something like the following. 当然,您必须根据自己的详细信息对其进行编辑,但它提供了一般框架。
我们在勾搭admin_init
有了这个功能load_my_script()
测试全局$pagenow
与管理页面匹配edit.php
, 以及全球$typenow
查看帖子类型是否是您想要的类型。
剩下的只是你可以阅读的细节here 如果您需要了解更多信息:
<?php
add_action(\'admin_init\',\'load_my_script\');
function load_my_script() {
global $pagenow, $typenow;
if ($pagenow==\'edit.php\' && $typenow==\'my-custom-type\') {
$ss_url = get_bloginfo(\'stylesheet_directory\');
wp_enqueue_script(\'jquery\');
wp_enqueue_script(\'my-custom-script\',"{$ss_url}/js/my-custom-script.js",array(\'jquery\'));
}
}
更新我正在回复你的更新。不幸的是(无论出于何种原因)
$typenow
在期间没有值
admin_init
所以你需要
post_type
通过基于URL参数加载帖子
\'post\'
正如您在下面的示例中所看到的(我从您的示例中复制了上面和下面的行,以便您可以看到它的位置):
<?php
global $pagenow, $typenow;
if (empty($typenow) && !empty($_GET[\'post\'])) {
$post = get_post($_GET[\'post\']);
$typenow = $post->post_type;
}
if (is_admin() && $pagenow==\'post-new.php\' OR $pagenow==\'post.php\' && $typenow==\'events\') {
P.S。
As for your other questions, please post them as new question on the site 让我或其他人来回答。由于我们一直在努力帮助您,请尽可能小心地为您的标题提供最好的标题,并请用良好的格式和适当的英语尽可能清晰简洁地写下您的问题。如果你这样做,这将有助于解决同样的问题,认识到你的问题与他们的需要相似,这将使我们回答你的问题更加容易。
我向你(和所有其他在WordPress答案上提问的人)提出这一要求,以换取你花时间努力回答你的问题,因为我和其他版主希望让WordPress答案成为社区的巨大资源,而不是像网络上其他许多网站一样,另一个很难阅读和很难找到答案的草率论坛。
更新#2
我原以为您的if语句中可能存在运算符优先级问题,但当我之前进行测试时,我没有遇到它。如果它的行为符合您的要求,那么您几乎肯定会这样做,请尝试以下方法(抱歉,我现在没有时间测试它,以确保它确实有效):
<?php
add_action(\'admin_init\',\'load_my_script\');
function load_my_script() {
global $pagenow, $typenow;
if (empty($typenow) && !empty($_GET[\'post\'])) {
$post = get_post($_GET[\'post\']);
$typenow = $post->post_type;
}
if (is_admin() && $typenow==\'events\') {
if ($pagenow==\'post-new.php\' OR $pagenow==\'post.php\') {
$ss_url = get_bloginfo(\'stylesheet_directory\');
wp_enqueue_script(\'jquery\');
wp_enqueue_script(\'my-custom-script\',"{$ss_url}/js/my-custom-script.js",array(\'jquery\'));
}
}
}