在“样式表”和“模板”挂钩上获取帖子ID

时间:2021-12-06 作者:HHGK

我正在尝试创建一个插件,您可以在每个页面上选择不同的主题。

要获取所选主题,我需要在;样式表“;和;“模板”;钩住Wordpress选择主题的点:

add_filter( \'stylesheet\',\'hk_get_theme\');
add_filter( \'template\',\'hk_get_parent_theme\' );

function hk_get_theme($stylesheet){
  $postID = $GLOBALS[\'post\']->ID;
  if ($postID != false) {
    $selectedTheme = get_post_meta( $postID, \'hk_theme_select\', true );
    if (isset($selectedTheme) && $selectedTheme != \'\') {
       $theme = $selectedTheme;
    }
  }
  $theme = $theme ? esc_attr( $theme ) : $stylesheet;
  return $theme;
}

function hk_get_parent_theme( $template ){
  $postID = $GLOBALS[\'post\']->ID;
  if ($postID != false) {
    $selectedTheme = get_post_meta( $postID, \'hk_theme_select\', true );
    if (isset($selectedTheme) && $selectedTheme != \'\') {
       $child_theme = $selectedTheme;
    }
  }
  $themes = wp_get_themes();
  if( !isset( $themes[$child_theme] ) ) {
    return $child_theme;
  }
  $theme = $themes[$child_theme];
  if( isset( $theme->template ) ){
    return $theme->template;
  }
  return $template;
}
不幸的是,第一次;样式表“;和;“模板”;钩子被执行了,帖子id似乎不存在。

有没有其他方法可以这么早获得页面元数据?还是用另一种方法存储页面的选定主题,以便在此早期获取此数据?请不要吃饼干。

1 个回复
SO网友:Tom J Nowell

这不可能通过这些挂钩实现。现在太早了。

不可能的原因是主题加载发生得很早。还没有要获取的帖子,WordPress尚未处理URL或创建主查询。现在还很早,帖子类型还没有定义。甚至init 钩子没有发生。

相关推荐

Wodpress XML Import hooks

要将来自给定远程站点的帖子合并到给定类别下的一个站点中,我如何挂接导入插件以保存给定类别的帖子:给出的示例:接收方站点具有类别auto 我想从(例如)导入所有帖子auto.com 在下面this category. 如果远程帖子有另一个类别auto 添加为子级。应该下载内部帖子图片,更新帖子内的所有链接,因此我已经找到了一个核心方法,下面是我尝试的方法,但我认为这可以变得更简单<?php if (!class_exists(\'Wp_Http\')) in