独立于环境的方式链接到前端的某些页面

时间:2017-02-21 作者:certainlyakey

在我现在工作的网站上,有许多硬编码到模板中的链接,例如

隐私和Cookie注册策略、搜索帮助等。

链接到这些页面的页面没有任何特殊设计,它们只是继承默认页面布局。

我正在从事的项目使用GIT和一个具有多个环境的工作流(针对不同开发人员的多个本地环境、临时环境和生产环境)。在所有这些数据库上,它们通常是完全独立的、非共享的或同步的。

在前端链接这些页面的最佳方式是什么?我已经考虑了三种选择,目前我正在使用后一种。

如果我只通过引用页面ID(通过get_permalink 例如),那么在登台时,ID可能不相同,链接将断开。此外,页面无法重新分配,这可能不好\'meta_key\' => \'_wp_page_template\' WP\\u查询参数),使用此模板。这种解决方案并不是最优的,因为它可能会使项目中重复模板的数量不断增加,这些模板都是空的,不能作为主题的一部分提供任何有意义的功能

4 个回复
SO网友:Laxmana

我认为最好的方法是创建主题选项,让管理员决定每个页面是哪个页面,例如下拉列表。

这样,无论环境如何,都可以获得所选页面。

SO网友:Ben Lonsdale

有几种方法可以做到这一点:

获取permalink(通过路径获取page\\u(\'slug goes here\'))

  • 获取permalink(通过标题获取page\\u(\'title goes here\'))
  • 主页url(\'/slug goes here/\')
  • 以上任何一项都适用,这样可以避免使用帖子ID,但只要slug/标题保持不变,它就会工作。

    Is it possible to get a page link from its slug?

    SO网友:certainlyakey

    经过一些研究,我正在添加我自己的答案。在我看来,以下是使解决方案保持相对灵活和快速实施的最佳选择,以及我最终得到的解决方案。我一直在努力寻找一个解决方案,在保持上述优势的同时,也可以是本土的。

    如果在主题中永久使用独立链接(我们不要称其为硬编码链接,因为这显然会造成一些混淆),并且站点使用自定义字段,那么一个简单的解决方案就是创建一个字段。我不确定它是如何设计的——它应该是中继器吗?复选框?它应该是全球性的吗?有待澄清page.php, 可以说,不会造成任何伤害。不过,这不是一个可扩展的解决方案我现在使用的第三个最终解决方案不是本机的,但仍然使用自定义模板机制。它使用一种注册自定义模板的方法,而不实际创建所描述的模板here — 我修改了那里提供的代码,允许从主题设置模板名称(github).

    因此,基本上,如果您在布局中的某个位置有一个独立的链接,该链接应该始终位于某个位置,并且应该指向通过admin创建的页面-您可以在挂钩函数中提供一个“虚拟”自定义模板文件名/标题,将此自定义模板与通过Template 管理设置,然后使用_wp_page_template 元键post查询。

    SO网友:Sanjay Goswami

    你可能在找

    1-get_permalink( get_page_by_path( \'slug\' ) )

    2-get_permalink( get_page_by_title( \'slug\' ) )

    3-home_url( \'/slug/\' )

    作用get_page_by_pathget_page_by_title 返回Post Object.

    References:

    1. get_page_by_path

    get_page_by_path( string $page_path, string $output = OBJECT, string|array $post_type = \'page\' )

    1. get_page_by_title

    get_page_by_title( string $page_title, string $output = OBJECT, string|array $post_type = \'page\' )

    Update

    您可以从所选模板获取页面/帖子。

    $pages = get_pages(array(
        \'meta_key\' => \'_wp_page_template\',
        \'meta_value\' => \'custom-template.php\'
    ));
    foreach($pages as $page){
        echo $page->ID.\'<br />\';
    }
    
    上面的代码返回具有自定义模板的页面的post对象数组。已选择php模板。

    如果您只是想返回页面ID,那么您可以尝试get_posts 作用

    $args = array(
        \'post_type\' => \'page\',
        \'fields\' => \'ids\',
        \'nopaging\' => true,
        \'meta_key\' => \'_wp_page_template\',
        \'meta_value\' => \'page-special.php\'
    );
    $pages = get_posts( $args );
    foreach ( $pages as $page ) 
       echo $page . \'</br>\';
    
    Reference: Get page id by template

    相关推荐

    来自Git repo的本地WordPress,在哪里设置文档根?

    我得到了Wordpress项目的存储库,需要在本地运行它,我正在使用Mamp。在哪里设置文档根目录?我没有看到index.php 文件位于回购的根目录中,但/wp-content 文件夹,当然还有/themes 都具有index.php 文件夹。我需要能够查看其中的一个主题。是否将文档根目录设置为/themes/myproject? 因为这似乎也不起作用。我想这是因为我需要在phpmyadmin中创建一个特定的数据库,但我怎么知道它需要什么名称呢?另外,我也没有看到wp-config.php 在回购协议中