单个自定义 Wordpress 子页面

Single Custom Wordpress Child Page

我管理着 5 个以上的博客,我正在努力使页面布局更有效地进行更新。对于每个博客,他们有大约 5-6 个自定义页面,除了内容区域外,它们的代码通常相同。这是我已经成功编写的示例。

(抱歉,篇幅太长了,想在这里详细介绍一下背景)

<?php 

/* Template Name: Contributors Page */

get_header(); ?>

<div id="main-content">
    <div class="container">
        <div id="content-area" class="clearfix">
            <div id="left-area">
                <?php include 'content-contributors.php'; ?>
            </div> <!-- #left-area -->

            <?php get_sidebar(); ?>
        </div> <!-- #content-area -->
    </div> <!-- .container -->
</div> <!-- #main-content -->

<?php get_footer(); ?>

除包含 link.

之外,此代码将成为所有自定义页面的标准代码

例如,我将使用行 <?php include 'content-contributors.php'; ?> 来调用以下文件:

<?php 

// Get all users, display in alphabetical order
$allUsers = get_users('role=contributor&orderby=display_name&order=ASC&exclude=');

$users = array();

// Remove subscribers from the list as they won't write any articles
foreach($allUsers as $currentUser)
{
    if(!in_array( 'subscriber', $currentUser->roles ))
    {
        $users[] = $currentUser;
    }
}

?>

<section class="author-content" role="main">
<!-- insert content here -->
</section>

由于在更新超过 20-30 个页面时这会非常重复,我想将其缩小到每个博客一个自定义页面。这是我尝试过的:

<?php 

/* Template Name: Custom Page */

get_header(); ?>

<div id="main-content">
    <div class="container">
        <div id="content-area" class="clearfix">
            <div id="left-area">
                <?php include get_stylesheet_directory_uri() . '/includes/inc-page-content.php'; ?>
            </div> <!-- #left-area -->

            <?php get_sidebar(); ?>
        </div> <!-- #content-area -->
    </div> <!-- .container -->
</div> <!-- #main-content -->

<?php get_footer(); ?>

这里我用 <?php include get_stylesheet_directory_uri() . '/includes/inc-page-content.php'; ?> 替换了原来的 include 并调用了这个文件:

<?php
    if ( is_page( 'archives' ) ) {
        echo "include get_stylesheet_directory_uri() . "'/content-archives.php'";
    }
    elseif ( is_page( 'contributors' ) ) {
        echo "include get_stylesheet_directory_uri() . "'/content-contributors.php'";
    }
    elseif ( is_page( 'subscribe' ) ) {
        echo "include get_stylesheet_directory_uri() . "'/content-subscribe.php'";
    }
    elseif ( is_page( 'sitemap' ) ) {
        echo "include get_stylesheet_directory_uri() . "'/content-sitemap.php'";
    }
    elseif ( is_page( 'tags' ) ) {
        echo "include get_stylesheet_directory_uri() . "'/content-tag_cloud.php'";
    }
    elseif ( is_page( 'thankyou' ) ) {
        echo "include get_stylesheet_directory_uri() . "'/content-thankyou.php'";
    }

    else {
        // do nothing
    }

?> 

不幸的是,什么也没发生。我查看了我的代码并认为它​​是有道理的。希望这是一个简单的修复。也许我把事情复杂化了。

感谢任何帮助。谢谢!

get_stylesheet_directory_uri() returns 样式表 URI (URL) - 您不能通过 URL 包含 php 文件(实际上在某些情况下你可以,但是你非常很少应该)。

您应该改用 get_stylesheet_directory()

此外,正如@Clyff 指出的那样,不要将 include 语句包装在 echo 语句中 - 您正在做的是将它们转换为字符串(更重要的是,您在这些行中的语法是离题太远了,你的引述没有加起来,所以如果你没有得到任何致命错误,我会感到惊讶......?)

要包含主题根目录中的文件,请执行以下操作:

include get_stylesheet_directory() . '/content-thankyou.php';

...或者如果您已经在主题根目录中的另一个文件中,应该这样做:

include 'content-thankyou.php';

顺便说一句,我真的看不出有任何理由包含一个其唯一目的是包含其他文件的文件。如果我明白你想做什么,你可以把整个东西放在你的自定义模板中:

<?php 

/* Template Name: Contributors Page */

get_header(); ?>

<div id="main-content">
    <div class="container">
        <div id="content-area" class="clearfix">
            <div id="left-area">
                <?php
                if ( is_page( 'archives' ) ) {
                    include 'content-archives.php';
                } elseif ( is_page( 'contributors' ) ) {
                    include 'content-contributors.php';
                } elseif ( is_page( 'subscribe' ) ) {
                    include 'content-subscribe.php';
                } elseif ( is_page( 'sitemap' ) ) {
                    include 'content-sitemap.php';
                } elseif ( is_page( 'tags' ) ) {
                    include 'content-tag_cloud.php';
                } elseif ( is_page( 'thankyou' ) ) {
                    include 'content-thankyou.php';
                } else {
                    // do nothing
                }
                ?>
            </div> <!-- #left-area -->

            <?php get_sidebar(); ?>
        </div> <!-- #content-area -->
    </div> <!-- .container -->
</div> <!-- #main-content -->

<?php get_footer(); ?>