GLOBAL$POST在我的一些自定义POST类型存档页面中显示为空

时间:2017-11-17 作者:mhuenchul

我的英语不是很好看
在我的功能中,我有几种自定义的帖子类型,“noticias”(新闻)、“articulos”(文章)等。php i使用如下代码按post\\u id或post\\u类型将脚本和样式排队:

function mahg_scripts_by_page() {
    global $post;
    $page_id = $post->ID;
    $post_type = $post->post_type; // var_dump($post_type);

    $noti = \'noticia\';      // POST-TYPE noticia
    $arti = \'articulo\'; // POST-TYPE articulo
    $com1 = 4;              // that page id
    $com2 = 6;              // that other page id
 // $etc if i needed

    $front_commons = array($noti, $arti, $com1, $com2, $etc);
    if ( is_home() || is_404() || is_single() || in_array($page_id, $front_commons, true) ) {   
        wp_register_style(\'uikit_css\', get_template_directory_uri().\'/css/uikit.css\', array(), \'\', \'all\' );
        wp_enqueue_style(\'uikit_css\');  
        wp_register_script(\'uikit_js\', get_template_directory_uri().\'/js/uikit.min.js\',\'\',\'\', true );
        wp_enqueue_script(\'uikit_js\');

    if (is_home() ) {
        wp_register_style(\'slideshow_css\', get_template_directory_uri().\'/css/components/slideshow.css\', array(), \'\', \'all\' );
        wp_enqueue_style(\'slideshow_css\');
        wp_register_script(\'slideshow_js\', get_template_directory_uri().\'/js/components/slideshow.min.js\',\'\',\'\', true );
        wp_enqueue_script(\'slideshow_js\');
    }
    // more scripts or styles from here     
}
add_action(\'wp_enqueue_scripts\', \'mahg_scripts_by_page\' );
我创建了archive-noticia.phparchive-articulo.php 在我的主题文件夹中。但当运行网站时,浏览器会在articulo archive页面中加载脚本和样式,但在Notifia archive页面中不会加载脚本和样式var_dump($post_type); 显示\'articulo\' (length=8) 在articulo archive页面中。但是显示null 在Notifia archive页和其他自定义帖子类型中<当我做register_post_type( \'articulo\', $args);, has\\u archive设置为true。noticia也一样。

$singular = \'Artículo\';
$plural = \'Artículos\';
$labels = array(
    \'name\'                  => $plural,
    \'singular_name\'         => $singular,
    \'add_new\'               => \'Nuevo \' . $singular,
    \'add_new_item\'          => \'Agregar nuevo \' . $singular,
    \'edit\'                  => \'Editar\',
    \'edit_item\'             => \'Editar \' . $singular,
    \'new_item\'              => \'Nuevo \' . $singular,
    \'view\'                  => \'Ver \' . $singular,
    \'view_item\'             => \'Ver \' . $singular,
    \'search_term\'           => \'Buscar \' . $plural,
    \'parent\'                => \'Parent \' . $singular,
    \'not_found\'             => \'No se han encontrado \' . $plural,
    \'not_found_in_trash\'    => \'No hay \' . $plural .\' en la papelera\'
);
$args = array(
    \'labels\'              => $labels,
    \'public\'              => true,
    \'publicly_queryable\'  => true,
    \'exclude_from_search\' => false,
    \'show_in_nav_menus\'   => false,
    \'show_ui\'             => true,
    \'show_in_menu\'        => true, 
    \'show_in_admin_bar\'   => false,
    \'menu_position\'       => 7,
    \'menu_icon\'           => \'dashicons-media-spreadsheet\',
    \'can_export\'          => true,
    \'delete_with_user\'    => false,
    \'hierarchical\'        => true,
    \'has_archive\'         => true,
    \'query_var\'           => true,
    \'capability_type\'     => \'post\',
    \'map_meta_cap\'        => true,
    \'rewrite\'             => true,
    \'rewrite\' => array( 
        \'slug\'          => \'articulos\', 
        \'with_front\'    => true,
        \'pages\'         => true,
        \'feeds\'         => false,
    ),
    \'supports\' => array(\'title\',\'editor\',\'thumbnail\',\'excerpt\')
);
register_post_type( \'articulo\', $args);

$singular = \'Noticia\';
$plural = \'Noticias\';
$labels = array(
    \'name\'                  => $plural,
    \'singular_name\'         => $singular,
    \'add_new\'               => \'Nueva \' . $singular,
    \'add_new_item\'          => \'Agregar nueva \' . $singular,
    \'edit\'                  => \'Editar\',
    \'edit_item\'             => \'Editar \' . $singular,
    \'new_item\'              => \'Nueva \' . $singular,
    \'view\'                  => \'Ver \' . $singular,
    \'view_item\'             => \'Ver \' . $singular,
    \'search_term\'           => \'Buscar \' . $plural,
    \'parent\'                => \'Parent \' . $singular,
    \'not_found\'             => \'No se han encontrado \' . $plural,
    \'not_found_in_trash\'    => \'No hay \' . $plural .\' en la papelera\'
);
$args = array(
    \'labels\'              => $labels,
    \'public\'              => true,
    \'exclude_from_search\' => false,
    \'publicly_queryable\'  => true,
    \'show_ui\'             => true,
    \'show_in_nav_menus\'   => false,
    \'show_in_menu\'        => true,
    \'show_in_admin_bar\'   => false,
    \'menu_position\'       => 6,
    \'menu_icon\'           => \'dashicons-media-document\',
    \'capability_type\'     => \'post\',
    \'map_meta_cap\'        => true,
    \'hierarchical\'        => true,
    \'supports\'            => array(\'title\',\'editor\',\'thumbnail\',\'excerpt\'), 
    \'has_archive\'         => true,
    \'rewrite\'             => true,    
    \'rewrite\' => array( 
            \'slug\'              => \'noticias\',
            \'with_front\'        => true,
            \'pages\'             => true,
            \'feeds\'             => false,
    ),
    \'query_var\'           => true,
    \'can_export\'          => true,
    \'delete_with_user\'    => false,
);
register_post_type( \'noticia\', $args);
wordpress为什么这么做?我做错了什么?

4 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

全球$post 对象表示中的当前帖子The Loop 并由the_post() 作用它支持以下功能the_title(), the_content() 等来显示当前帖子的标题和内容,而不需要传递ID或任何东西。

这就是为什么post类型归档没有$post 在脚本排队时设置的对象。为什么会这样?它代表什么职位?什么会$post->post_author 是否用于post类型存档?因为归档文件不是帖子,所以有一个没有意义。

正确的解决方案就是您找到的解决方案:is_post_type_archive() 作用在引擎盖下,它检查主查询,以查看它是否用于帖子类型的存档。

SO网友:Vincent Guesné

我也有类似的问题,在我努力禁用Yoast SEO及其作品后,global$post在免费主题(astrid)上是空的。

所以我更新了Yoast SEO并与合作。但老实说,我会用其他东西来改变Yoast,因为这个插件给我带来了很多麻烦。

希望对您有所帮助:-)

编辑:经过多次测试,我不确定问题是否来自Yoast(但我会更改它)。。。如果您在启用Yoast后创建自定义帖子类型,您将收到此问题。。。禁用/启用它并正常工作;-)

SO网友:P.O.W.

我对自定义帖子类型也有同样的问题。根据建议here, 我必须将永久链接设置重置为%postname%。

转到WP管理/设置/永久链接选择Post Name 选项(如果已选择)保存Post Name 无论如何,请再保存一次

SO网友:mhuenchul

我找到了一个解决方案,可以使用is_post_type_archive()

$front_common = array($com1, $com2, $etc);
if ( is_single() || is_post_type_archive(array(\'noticia\',\'articulo\',\'acta\')) || in_array($page_id, $front_common, true) ) { 
        wp_register_style(\'uikit_css\', get_template_directory_uri().\'/css/uikit.css\', array(), \'\', \'all\' );
        wp_enqueue_style(\'uikit_css\');
}
但这个解决方案并不能回答这个问题。

结束