为自定义发布类型选择新建和编辑页面

时间:2011-02-17 作者:Noel Tock

我可能遗漏了一些东西,除非这真的不可能,因为某种原因,我无法让我的函数只在newedit 自定义帖子类型的页面(新帖子不成问题):

我当前正在使用:

if ((isset($_GET[\'post_type\']) && $_GET[\'post_type\'] == \'events\') || (isset($post_type) && $post_type == \'tf_events\')) {
    add_action(\'admin_init\', "admin_head");
}
然而,这只适用于adding a new post 其中URL为:

/post-new.php?post_type=events
但对于编辑帖子来说,它不起作用,URL是:

/post.php?post=12&action=edit
(尽管未将帖子类型添加到链接属性)

WORKING CODE (See Mark\'s response below):

// 7. JS Datepicker UI

function events_styles() {
    global $post_type;
    if( \'tf_events\' != $post_type )
        return;
    wp_enqueue_style(\'ui-datepicker\', get_bloginfo(\'template_url\') . \'/css/jquery-ui-1.8.9.custom.css\');
}

function events_scripts() {
    global $post_type;
    if( \'tf_events\' != $post_type )
        return;
    wp_deregister_script(\'jquery-ui-core\');
    wp_enqueue_script(\'jquery-ui\', get_bloginfo(\'template_url\') . \'/js/jquery-ui-1.8.9.custom.min.js\', array(\'jquery\'));
    wp_enqueue_script(\'ui-datepicker\', get_bloginfo(\'template_url\') . \'/js/jquery.ui.datepicker.min.js\');
    wp_enqueue_script(\'custom_script\', get_bloginfo(\'template_url\').\'/js/pubforce-admin.js\', array(\'jquery\'));
}

add_action( \'admin_print_styles-post.php\', \'events_styles\', 1000 );
add_action( \'admin_print_styles-post-new.php\', \'events_styles\', 1000 );

add_action( \'admin_print_scripts-post.php\', \'events_scripts\', 1000 );
add_action( \'admin_print_scripts-post-new.php\', \'events_scripts\', 1000 );

3 个回复
最合适的回答,由SO网友:t31os 整理而成

好的,对我原来的答案进行了全面的修改,结果变得一团糟。

您的代码的问题是,您正在启动init,这覆盖了每个管理页面,此外,检查管理变量来计算当前页面还为时过早(尽管您可以只检查$_GET 如果您真的需要那么早运行代码)。

虽然您没有指出需要在post列表上运行to(edit.php),但您希望专门挂钩到post-edit页面,因此我将从下面的示例中排除这一点。

您可以钩住管理头部内部发生的几个不同操作,并在那里执行任何需要执行的操作,并且能够通过提供$post_type 回调函数中的作用域。

所以你的回电会有点像这样。。

function mycallback() {
    global $post_type;
    if( \'events\' != $post_type )
        return;
    // Do your code here
}
你想挂接什么动作取决于你当时想运行什么,如果你没有做任何特别的事情,但想执行一些东西,那么也许通用的管理头钩子将是合适的。。

add_action( \'admin_head-post.php\', \'mycallback\', 1000 );
add_action( \'admin_head-post-new.php\', \'mycallback\', 1000 );
如果正在加载脚本,则可以使用。。

add_action( \'admin_print_scripts-post.php\', \'mycallback\', 1000 );
add_action( \'admin_print_scripts-post-new.php\', \'mycallback\', 1000 );
如果您正在加载样式表,那么可能。。

add_action( \'admin_print_styles-post.php\', \'mycallback\', 1000 );
add_action( \'admin_print_styles-post-new.php\', \'mycallback\', 1000 );
否则我需要更多地了解你在做什么……:)

SO网友:Bainternet

您可以尝试致电global$post,以便:

global $post;
if ((isset($_GET[\'post_type\']) && $_GET[\'post_type\'] == \'events\') || (isset($post_type) && $post_type == \'tf_events\') || (get_post_type($post) == "events") || (get_post_type($post) == "tf_events")){) {
    add_action(\'admin_init\', "admin_head");
}
更新尝试:

global $typenow;
if( \'your_post_type\' == $typenow ){
// do you stuff
}
还要确保先运行register\\u post\\u type调用,以便在运行此代码之前注册post类型。

希望这有帮助。

SO网友:Sabry Suleiman

我尝试了以前的解决方案,但这些解决方案在编辑页面上不起作用

global $typenow;    
if ( $typenow == \'slider\' ||  get_post_type($_GET[\'post\']) == \'slider\' ):
  // What you want to do
endif;

结束

相关推荐

使用WP_QUERY根据评论数量对帖子进行排序

我的客户有一个特殊的要求,我需要满足。他们希望能够首先查看评论最多的帖子。起初我想用custom select query 会成功的。我必须向编写子查询,但能够使用自定义选择查询来实现该功能。没过多久我就意识到WP Page Numbers 插件停止工作。查看插件的源代码,我意识到它依赖于WP_Query 对象已填充,以便计算页码和导航内容。我想不出使用WP_Query 类来做我需要做的排序。同时,我不想实现自己的分页功能,因为我的客户端(和我)非常喜欢WP页码插件。在我开始扩展WP_Query 按照Mi