主页/WordPress笔记/博客文章/综合文章/如何在 WordPress 中设置文章或文章的部分内容过期

如何在 WordPress 中设置文章或文章的部分内容过期

Bug编译狮

Bug编译狮

要在 WordPress 中设置文章或文章部分内容过期,你可以通过以下几种方法来实现:

方法一:使用永久链接模式(Permalink Settings)

  1. 进入设置

    • 登录到您的 WordPress 管理面板。
    • 在左侧菜单栏点击“设置” -> “常规”。
  2. 选择永久链接模式

    • 在右侧的页面上找到“永久链接”部分。
    • 选择您喜欢的永久链接结构。
  3. 设置文章或部分内容过期

    • 在“永久链接”选项卡下,找到“日志”和“文章”下的“显示方式”选项。
    • 将“显示方式”设置为“自定义”。
    • 然后,您可以编辑这些条目以指定它们何时可以被访问或何时不再可用。
  4. 保存更改

    • 完成上述设置后,点击右上角的“保存更改”。

这种方法适用于那些不需要完全控制文章发布时间的人,因为它依赖于 WordPress 的默认功能。

示例代码

假设我们想要让一篇文章在发布后的第一个月内对所有人可见,之后仅对特定用户可见。

// 设置文章或部分内容的到期时间
add_filter( 'pre_get_posts', 'set_post_expiration' );
function set_post_expiration( $query ) {
    if ( ! is_admin() && $query->is_main_query() ) {
        // 检查是否已经设置了文章过期时间
        if ( empty( $_GET['post_id'] ) || empty( $_GET['expiration_date'] ) ) {
            return;
        }

        $post_id = absint( $_GET['post_id'] );
        $expiration_date = strtotime( $_GET['expiration_date'] );

        if ( time() > $expiration_date ) {
            // 如果当前时间已超过到期日期,则禁用该文章
            $query->set('posts_per_page', -1);
            $query->set('meta_key', '_wp_http_referer');
            $query->set('orderby', 'date');
            $query->set('order', 'ASC');
            $query->set('meta_value', '');
            $query->set('meta_compare', '=');

            $posts = new WP_Query($query);
            foreach ($posts as $post) {
                wp_die();
            }
        } else {
            // 否则,允许访问
            add_action( 'template_redirect', 'allow_access_to_article' );
            function allow_access_to_article() {
                global $post;

                // 获取文章 ID
                $article_id = $post->ID;

                // 获取文章标题
                $title = get_the_title();

                // 设置文章有效期
                update_post_meta( $article_id, '_expires_in', date_i18n( 'Y-m-d H:i:s', $expiration_date ) );

                // 允许访问
                wp_safe_redirect( get_permalink( $article_id ) . '?expiration_date=' . date_i18n( 'Y-m-d H:i:s', $expiration_date ) );
                exit;
            }
        }
    }
}

使用步骤

  1. 插入上述代码到您的主题的 functions.php 文件中。
  2. 在 WordPress 管理面板中创建一个新的文章并添加一些内容。
  3. 发布文章后,在文章详情页的 URL 中加入查询参数 ?expiration_date=YYYY-MM-DD HH:MM:SS,其中 YYYY-MM-DD HH:MM:SS 是文章的到期时间。
  4. 当达到到期时间时,文章将被阻止访问,直到再次更新其过期时间为止。

效果说明

  • 当用户尝试访问未到期的文章时,他们会被重定向回文章的主页,显示一条消息通知他们文章已过期。
  • 文章一旦到期,即使其他用户重新提交请求,也无法访问文章的内容。

这种方法结合了 WordPress 的内置功能和自定义代码,提供了灵活而强大的文章管理能力。

黑板前的Bug语法讲师

黑板前的Bug语法讲师

在 WordPress 中,要设置文章或部分内容过期,您可以使用 post_datepost_excerpt 两个字段。以下是实现这一目标的一般步骤和一些示例代码。

步骤1: 设置过期日期

假设您有一个名为 posts 的表单,其中包含以下字段:

  • id: 文章 ID(自动填充)
  • title: 文章标题
  • content: 文章正文
  • date: 发布日期
  • excerpt: 部分内容摘要

要设置过期日期,您可以为 post_date 字段添加一个过期时间戳。这个时间戳将表示文章或部分内容的有效期限。

示例代码:

// 获取当前时间戳
$current_time = time();

// 创建一个新的过期时间戳
$expiration_time = $current_time + DAY_IN_SECONDS;

// 将过期时间戳应用到 post_date 字段
$post->post_date_expires = $expiration_time;

这里 DAY_IN_SECONDS 是您希望文章或部分内容过期的时间间隔(以秒为单位)。

步骤2: 设置过期摘要

对于部分内容的过期,可以使用 post_excerpt 字段。如果部分内容超过设定的过期时间,它将在其后面显示“已过期”。

示例代码:

// 获取当前时间戳
$current_time = time();

// 创建一个新的过期时间戳
$expiration_time = $current_time + DAY_IN_SECONDS;

// 将过期时间戳应用到 post_excerpt 字段
$post->post_excerpt_expiration = $expiration_time;

结合使用

如果您想同时设置文章和部分内容的过期,只需将这两个操作合并即可。

示例代码:

// 获取当前时间戳
$current_time = time();

// 创建一个新的过期时间戳
$expiration_time = $current_time + DAY_IN_SECONDS;

// 将过期时间戳应用到 post_date 和 post_excerpt 字段
$post->post_date_expires = $expiration_time;
$post->post_excerpt_expiration = $expiration_time;

注意事项

  • 确保您的过期时间戳是正确的格式,例如:'2023-04-05T08:00:00Z'
  • 如果需要更长的过期时间,请确保使用适当的 SQL 时间函数来计算。
  • 在实际生产环境中,可能需要考虑其他因素,如缓存策略、用户身份验证等,以确保过期机制的安全性和有效性。

通过以上步骤,您可以在 WordPress 中有效地设置文章或部分内容的过期。请根据实际情况调整代码中的参数和逻辑。