在我的主题中实现/访问内置页面的正确方式

时间:2017-07-28 作者:Henrique Vianna

我的主题有一个顶部菜单栏,带有可访问性快捷方式(跳转到内容、高对比度模式等)。我需要包括一个指向信息页面的链接,该页面描述了访问者可用的辅助功能。

这是一个大学多站点网络项目,有许多托管站点,因此我需要一个不需要在每个站点上手动创建页面的解决方案。我还希望能够在主题的未来版本上轻松更新此内容(即,在多个网站的数据库中插入内容可能不是一个好主意)。

我正在考虑使用一些URL参数链接到网站主页,例如site1。实例com/?info=索引中的内容的可访问性和寻址。php,但这看起来不太优雅。

有没有关于更干净的方法来实现这一点的建议?

提前感谢!

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

通过阅读您的问题,我假设以下设置:

地点网络com公司

现场-2。网络com公司

现场-3。网络com公司

主站点在网络上的位置。com(即博客id1).所有站点(或至少所有子域站点)共享相同的主题。

您需要能够创建单个内容页,并使该内容在所有网站上可用,例如*。网络com/某些页面/

下面介绍了使用主站点上的一个页面(id 1)作为内容源(允许您通过编辑器更新/编辑该内容),以及用于匹配页面标题的模板文件。

您可以用同样的方式包含静态内容。(请参见最后步骤1的注释)。

步骤1您可以通过复制页面向特定页面的主题添加页面模板,例如,命名为可访问性。php并将其重命名为页面可访问性。php

页面可访问性中的第2步。php中,我们将删除正常的循环,并用一些代码替换它以获得不同页面的内容:主站点的可访问性页面;使用switch_to_blog().

如果主站点id为1, 模板页面的可访问性。php可能如下所示:

get_header(); 

switch_to_blog(1);
$post = get_page_by_title( \'Accessibility\' );

if ($post) {
    $content    = do_shortcode( html_entity_decode( $post->post_content ) );
}
restore_current_blog();

?>

    <div id="primary" class="content-area">
        <main id="main" class="site-main" role="main">

        <?php echo $content; ?>

        </main><!-- #main -->
    </div><!-- #primary -->

<?php
get_sidebar();
get_footer();
步骤3为所有站点创建一个名为可访问性的空页面。而不是使用switch_to_blog() 要为每个页面创建一个页面,我们可以检查上是否存在该页面init 只有当它不存在时才创建它。

功能。主题的php

add_action( \'init\', \'set_default_page\' );

function set_default_page() {

  check_exists_create_page( \'Accessibility\' ); //again, checking by title
}


function check_exists_create_page( $title ) {

  if ( get_page_by_title( $title ) == NULL ) {

      $args = array(
              \'post_title\'      => $title,
              \'post_content\'    => \'\',
              \'post_status\'     => \'publish\',
              \'post_author\'     => 1,
              \'post_type\'       => \'page\'
        );

        wp_insert_post( $args ); 
  }

}
步骤1的注释您也可以使用template hierarchy 包括静态内容。删除普通循环,直接添加内容或包含另一个php文件等。然后跳到步骤3,创建一个名称与页面匹配的页面-{your page name}。每个站点的php模式。

如果要使用id以外的站点,请注意步骤21, 您始终可以通过以下方式检索希望使用的站点的id:get_current_blog_id()

get_page_by_title() 使用标题not 鼻涕虫要获取标题为“我的新页面”的页面,请执行以下操作:

get_page_by_title( \'My New Page\' )

这里我只是在链接更多信息do_shortcode()html_entity_decode().对于switch_to_blog()restore_current_blog().

步骤3的注释可能有一个比init. 如果希望从此页面检查/创建中排除某些站点,还可以添加条件检查。查看我的answer on a different question 如果你需要的话。

在测试期间,请注意垃圾箱中的页面仍然存在。

SO网友:Dub Scrib

如果插件可以工作,请参阅WP辅助功能插件。在“设置”“添加Skiplinks”部分中,有一个选项可以添加您自己的链接(链接或容器ID)。可以指向中心页吗?

结束

相关推荐

WordPress Get_Pages meta_key不显示页面

我正在Wordpress主题中使用get\\u页面来创建nav。我有一些页面不想在导航中显示。在所有页面上,我都有一个“dont\\u show\\u in\\u nav”真/假自定义字段。我可以使用meta\\u键添加选择了“dont\\u show\\u in\\u nav”的页面,但我不想显示选择了“dont\\u show\\u in\\u nav”的页面。我可以创建一个“show\\u in\\u nav”自定义字段,并选择要显示的所有页面,但我需要很多页面才能做到这一点。我试过了\'meta_