【问题标题】:Display the beginning part of a page content on every page - wordpress在每个页面上显示页面内容的开头部分 - wordpress
【发布时间】:2013-03-11 15:39:56
【问题描述】:

我在 wordpress 中建立了一个 Twenty11 模板网站,我只使用 CMS 中的页面(没有帖子)。我有一个名为“Classes”的页面,它的页面内容会定期更新。

我想在每个页面的右上角添加一个正方形,显示“课程”页面的开头部分,下面的“更多”链接可以将人们引导到“课程”页面。

目前,我只是在学习时在 content-page.php 中添加了一个 html div。有没有插件可以实现我的目标?或者你能否给我一些关于如何编码的指导(一些建议的代码或学习链接会有所帮助)?

谢谢。

【问题讨论】:

  • 使用插件怎么样?尝试谷歌搜索wordpress page excerpt widget
  • 您好 Afekenholm,感谢您的回复。这看起来正是我所需要的。如何将此小部件添加到每个页面(不是帖子)?我可以通过侧边栏在我的测试“发布”页面上看到它。但是侧边栏不会显示在页面上。我正在学习,所以任何建议都会很棒。谢谢。
  • 另一个插件怎么样? :) Dynamic Sidebars
  • 谢谢 afekenholm,它正在使用这些插件,当您知道在哪里查找时,wordpress 非常容易。谢谢你。我还将尝试在下面学习其他选项。谢谢大家。

标签: php content-management-system wordpress


【解决方案1】:

如果你想用 PHP 来做,你可以试试这样的方法

<?php         
    $page_id = 11; //set page ID
    $page_data = get_page($page_id);
    $title = $page_data->post_title;
    $permalink = get_permalink($page_id);
    echo '<a href="'. $permalink .'">'. $title . '</a>';
    echo '<p>' . the_excerpt() . '<a href="'. $permalink . '">Read more</a></p>';
?>

如果您需要此脚本的页面 ID,您可以使用它

<?php
     $pages = get_pages();
     foreach ( $pages as $page ) {
         echo 'ID: '. $page->ID . ' title: ' . $page->post_title.'<br>';
     }
?>

如果您尝试基于小部件执行此操作,则需要确保执行这些步骤。

在二十一十二主题中,您在 Widgets 部分中有一个名为 Main Sidebar 的部分。在此区域中,您可以添加所需的小部件,并确保您希望小部件所在的所有页面都设置为“默认主题”而不是“完整” -width 页面模板,无侧边栏”。

另外我不知道您是否对代码进行了任何更改,但如果有,您需要确保您的 wp-content/themes/twentytwelve/index.php 在页脚部分之前仍然具有此内容。

<?php get_sidebar(); ?> 

如果您想扩大小部件区域,您可以篡改控制宽度的 CSS,但请注意这可能会影响容器内项目的稳定性。

wp-content/themes/twentytwelve/style.css

1446 - 1449 行

编辑宽度

.widget-area {
    float: right;
    width: 26.041666667%;
}

如果先前的值被编辑,您还需要编辑主站点内容以获得适当的比例百分比。

1437 - 1440 行

.site-content {
    float: left;
    width: 65.104166667%;
}

【讨论】:

  • 嗨罗伯特,谢谢你的详细解释,是的,我试过这个方法,侧边栏显示得很窄,我想我只是需要以某种方式更改css?此外,我正在尝试学习如何像下面建议的 Sunyatasattva 那样在 php 中执行此操作,不幸的是它不起作用。如果我不使用小部件,您能否分享有关 php 的任何信息?谢谢罗伯特。
  • 小部件应该保持在容器空间内。您是在尝试完成容器外部的事情还是与主要内容并排的宽度相等的事情?我认为您可能需要修改您的问题,因为目前尚不清楚您到底想要什么。
  • 我继续并将更改添加到我的答案中。希望这会有所帮助。
【解决方案2】:

您不必使用插件

您想要实现的目标很容易通过编辑模板文件来完成,具体取决于您的需要。我会建议最简单的解决方案,但也许您可以将此 sn-p 转换为小部件,以获得更动态/可维护的用法。

  1. 编辑 page.php 模板文件,以便在您安装的 Wordpress 的每个页面中都显示一些内容。

  2. 为您的盒子设置所需的布局(可能是&lt;div&gt; 和一些float: right)。

  3. 获取所需页面并将其存储到 php 变量中,如下所示:&lt;?php $page = get_page( $page_id ); ?&gt;

  4. 使用stripos获取&lt;!--more--&gt;标签的位置。

  5. 只获取&lt;!--more--&gt;标签之前的部分,使用substr

  6. 应用the_content 过滤器,然后应用echo

您的代码将如下所示:

<div class="right-info">
    <?php
    $page = get_page(id);
    $more_tag = stripos( $page->post_content, '<!--more-->' );
    $excerpt = substr( $page->post_content, 0, $more_tag ); 
    echo apply_filters('the_content', $excerpt);
    ?>
</div>

【讨论】:

  • 您好 Sunyatasattya,感谢您的回复。我非常热衷于学习如何在 php 中做到这一点,我已经有了一个 div。我尝试了您的 php 代码,但在我输入 $page_id=11; 后它显示为空白;在以及。你能更多地解释你的代码吗?或者你知道有什么地方可以学吗?谢谢。
  • 你把$page_id=11放在哪里了?在第二行代码中,您可以设置:$page = get_page(11)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 2012-08-22
相关资源
最近更新 更多