WordPress 标签调用相关标签文章和相关标签第一篇文章分类下的文章

WordPress 标签调用相关标签文章和相关标签第一篇文章分类下的文章

以下是钻芒博主与Chat*PT的对话获得的代码,基本上第一遍告诉它需求就可以生成出可用的代码,但如果让它在原有基础上做些优化,它可能就会忘记,经过不断沟通,最后生成的代码是可以用状态。

你好

你好!有什么我可以帮助你的吗?

我想调用Wordpress 标签下的文章,如何调用呢

好的,我来给你详细解释一下如何在主题的标签模板页面中调用所有带有当前标签的文章。

首先,你需要找到主题的标签模板文件,通常这个文件的名称是 tag.phptag-{tag_slug}.php,其中 {tag_slug} 是当前标签的别名。

在这个标签模板文件中,你需要使用 WP_Query 类来获取所有带有当前标签的文章,然后使用循环输出这些文章的信息。下面是一个基本的示例代码,你可以根据自己的需要进行调整:

<?php
// 获取当前标签的名称和 ID
$tag = get_queried_object();
$tag_name = $tag->name;
$tag_id = $tag->term_id;

// 定义 WP_Query 参数
$args = array(
    'tag_id' => $tag_id,
    'posts_per_page' => 10
);

// 获取符合条件的文章
$query = new WP_Query($args);

if ($query->have_posts()) :
    // 开始循环
    while ($query->have_posts()) :
        $query->the_post();

        // 在这里输出文章的信息
        ?>
        <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
        <div><?php the_excerpt(); ?></div>
        <?php
    endwhile;

    // 重置文章数据
    wp_reset_postdata();
else :
    // 没有找到文章
    echo '<p>没有找到与 "' . $tag_name . '" 标签相关的文章。</p>';
endif;
?>

在这个代码中,我们首先使用 get_queried_object() 函数获取当前标签的名称和 ID,然后使用这些信息来定义 WP_Query 参数。接着使用 WP_Query 类来获取符合条件的文章,并使用循环逐个输出这些文章的标题和摘要等信息。

最后使用 wp_reset_postdata() 函数来重置文章数据,以便后续的查询不会受到影响。如果没有找到符合条件的文章,我们还可以输出一个提示信息。

不错的代码,我试了可以完美运行,太棒了,可以帮我简单优化一下前端的页面吗? 以列表呈现

当然可以,这里是一个简单的例子,将文章以列表的形式展示。你可以将代码添加到主题的 tag.php 模板文件中,替换原有的文章展示代码。

<?php
$tag = get_queried_object();
$tag_name = $tag->name;
$tag_id = $tag->term_id;

$args = array(
    'tag_id' => $tag_id,
    'posts_per_page' => 10
);

$query = new WP_Query($args);

if ($query->have_posts()) :
?>
    <h2>所有带有“<?php echo $tag_name; ?>”标签的文章:</h2>
    <ul>
        <?php while ($query->have_posts()) : $query->the_post(); ?>
            <li>
                <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
                <p class="post-meta">发布于 <?php the_time('Y年m月d日') ?> | 作者:<?php the_author_posts_link(); ?> | <?php comments_popup_link('评论:0', '评论:1', '评论:%'); ?></p>
                <div class="entry">
                    <?php the_excerpt(); ?>
                </div>
            </li>
        <?php endwhile; ?>
    </ul>
<?php
    wp_reset_postdata();
else :
    echo '<p>没有找到与 "' . $tag_name . '" 标签相关的文章。</p>';
endif;
?>

在这个代码中,我们使用了一个 ul 标签来展示所有带有当前标签的文章。每篇文章都包括标题、发布日期、作者、评论数量和摘要等信息。你可以根据自己的需要对 CSS 样式进行调整。

希望这个代码能够帮助到你,如果有任何问题,请随时问我。

我要在Wordpress elementor插件中制作一个tag的模板,然后在这个模板中输出包含此tag标签文章的分类 下的所有文章,你有什么好的建议吗

好的,那么你可以使用Elementor Pro的“动态内容”小部件来实现这个功能。以下是具体的步骤:

  1. 创建一个新的页面或者在现有页面中打开Elementor编辑器。
  2. 从左侧的小部件面板中拖动并放置“动态内容”小部件到你想要添加标签文章列表的位置。
  3. 在“动态内容”小部件的设置中,选择“帖子”类型。
  4. 在“查询”选项卡中,选择“标签”为查询类型。
  5. 在“标签”选项卡中,选择你想要显示文章的标签。
  6. 在“排版”选项卡中,可以选择不同的布局和样式选项。
  7. 点击“更新”按钮,保存并预览你的页面。

这样,你就可以在Elementor页面中显示包含特定标签的所有文章了。如果你想要显示这些文章的分类,你可以通过添加一个分类选择器,让用户可以选择特定的分类来过滤文章。你可以使用Elementor Pro的“动态内容”小部件来实现这一点,选择“分类”为查询类型,并在“分类”选项卡中选择你想要显示的分类。

希望这些步骤能够帮助你实现你的需求。

我试了 并不可以

如果以上方法不可行,你可以尝试以下步骤:

  1. 在Elementor编辑器中创建一个新页面,选择使用Elementor Full Width模板。
  2. 添加一个“Posts”小部件,它可以在页面中显示文章。
  3. 在小部件设置中,选择“自定义查询”,然后在“查询设置”下拉菜单中选择“标签”。
  4. 输入你要显示文章的标签名称,并选择你想要显示的文章数量、排序方式、文章类型等设置。
  5. 保存并更新页面,预览查看效果。

这种方法的优点是可以使用Elementor的可视化编辑器轻松创建自定义模板,并且可以完全控制显示的文章内容。如果你需要更多的灵活性和自定义选项,可以尝试使用Elementor的动态内容模块或者编写自定义PHP代码实现。

我不要输入文章标签,应为我在制作一个tag的模板,每个页面就代表一个tag

好的,我明白了你的需求。你可以尝试以下步骤来实现你想要的功能:

  1. 在 Elementor 中创建一个新的页面,并选择 “页面模板” 选项。
  2. 在页面设置中选择 “Archive” 类型,并选择你想要的文章类型。如果你想要针对某个特定标签的模板,可以选择 “标签” 类型,并选择对应的标签。
  3. 然后你可以在 “动态内容” 部分中选择 “文章框架” 模块,并将其拖到你的页面上。
  4. 在 “文章框架” 模块的设置中,你可以选择 “标签” 选项,并输入你想要显示的标签的名称。
  5. 最后,你可以使用 “文章列表” 模块来显示包含选定标签的分类下的所有文章。将 “文章列表” 模块拖动到你的页面上,并在设置中选择 “动态” 作为内容类型,然后选择 “分类” 并输入分类名称。

通过这些步骤,你应该能够创建一个标签模板,并在其中显示包含该标签的分类下的所有文章。

这样并不能实现我的要求,你可以用php代码帮我实现吗

好的,以下是一个简单的 PHP 代码示例,可以在 Elementor 模板中使用,用于显示包含特定标签的分类下的所有文章:

<?php
    $tag = get_queried_object();
    $args = array(
        'post_type' => 'post',
        'post_status' => 'publish',
        'tag__in' => array($tag->term_id),
        'orderby' => 'date',
        'order' => 'DESC'
    );
    $query = new WP_Query($args);
    if ($query->have_posts()):
        while ($query->have_posts()):
            $query->the_post();
?>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<?php
        endwhile;
        wp_reset_postdata();
    else:
        echo "No posts found.";
    endif;
?>

在这个代码中,我们首先获取当前页面的标签对象,然后使用 WP_Query 获取包含此标签的文章,排序方式为按日期降序排列。接下来,我们使用循环遍历每篇文章,将文章标题和链接输出到页面上。最后,我们使用 wp_reset_postdata() 重置文章查询,以确保在页面中使用其他查询时不会出现冲突。

请将上述代码复制并粘贴到你的 Elementor 模板中,然后将代码中的 $tag 更改为你要显示的标签的名称。注意,此代码仅适用于 Elementor 模板中,不可在主题函数中使用。

这个代码并不起作用,我将其插入到1的tag表页页面中访问,它只输出了包含1这个tag的其他文章,而不是输出的1这个tag的第一篇文章下的分类下的文章

非常抱歉,我的之前的回答可能有误导性。你提供的代码确实只会输出包含特定标签的文章,而不是特定标签的第一篇文章下的分类下的所有文章。

以下是一个修改后的代码片段,可以输出特定标签的第一篇文章下的分类下的所有文章:

<?php
$tag = get_queried_object();
$args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'tag__in' => array($tag->term_id),
    'orderby' => 'date',
    'order' => 'DESC'
);
$query = new WP_Query($args);
if ($query->have_posts()):
    $query->the_post();
    $categories = get_the_category();
    $cat_id = $categories[0]->cat_ID;
    $args2 = array(
        'post_type' => 'post',
        'post_status' => 'publish',
        'cat' => $cat_id,
        'orderby' => 'date',
        'order' => 'DESC'
    );
    $query2 = new WP_Query($args2);
    if ($query2->have_posts()):
        while ($query2->have_posts()):
            $query2->the_post();
?>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<?php
        endwhile;
        wp_reset_postdata();
    else:
        echo "No posts found.";
    endif;
else:
    echo "No posts found.";
endif;
?>

请将上面的代码添加到 Elementor 的 HTML 模块中,并将模块添加到你的页面中。注意,这将只适用于特定标签页面上的文章。

请注意,如果文章没有分类,这段代码将无法工作。您需要考虑在没有分类的情况下的备用方案。

如果没有分类,就随机输出20篇文章

如果没有分类,可以使用get_posts()函数来随机输出20篇文章。以下是示例代码:

<?php
    $tag = get_queried_object();
    $args = array(
        'post_type' => 'post',
        'post_status' => 'publish',
        'tag__in' => array($tag->term_id),
        'orderby' => 'date',
        'order' => 'DESC'
    );
    $query = new WP_Query($args);
    if ($query->have_posts()):
        while ($query->have_posts()):
            $query->the_post();
?>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<?php
        endwhile;
        wp_reset_postdata();
    else:
        $args = array(
            'numberposts' => 20,
            'orderby' => 'rand',
            'post_type' => 'post',
            'post_status' => 'publish',
        );
        $posts = get_posts($args);
        if ($posts):
            foreach ($posts as $post):
                setup_postdata($post);
?>
                <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<?php
            endforeach;
            wp_reset_postdata();
        else:
            echo "No posts found.";
        endif;
    endif;
?>

这段代码首先查询是否有符合条件的文章,如果有,就按照原来的方法输出。如果没有,就使用get_posts()函数随机输出20篇文章。

貌似并没有输出随机文章

很抱歉,可能我没有写得清楚。你可以尝试将以下代码替换掉之前的代码,这样它应该可以输出随机文章了。

<?php
    $tag = get_queried_object();
    $args = array(
        'post_type' => 'post',
        'post_status' => 'publish',
        'tag__in' => array($tag->term_id),
        'orderby' => 'rand',
        'posts_per_page' => 20
    );
    $query = new WP_Query($args);
    if ($query->have_posts()):
        while ($query->have_posts()):
            $query->the_post();
?>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<?php
        endwhile;
        wp_reset_postdata();
    else:
        echo "No posts found.";
    endif;
?>

请注意,在这个新的代码中,我们将 'orderby' => 'rand' 添加到 $args 中,以便随机排序输出文章。同时,我们还将 posts_per_page 参数设置为 20,以便仅输出前20篇随机文章。

只有这一段代码是可以用的: 让我提出一些要求,你优化一下这些前端展示 可以吗

当然可以,请告诉我您的具体需求,我会尽力满足您的要求。

输出的标题用h3标签,文本字号18px 粗细400 新窗口打开

可以通过修改代码来实现标题样式的调整。在标题输出的地方,添加一个 h3 标签,并在样式中设置字体大小为 18px,字重为 400。另外,可以通过设置链接属性来实现在新窗口打开。

修改后的代码如下:

<?php
$tag = get_queried_object();
$args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'tag__in' => array($tag->term_id),
    'orderby' => 'date',
    'order' => 'DESC'
);
$query = new WP_Query($args);
if ($query->have_posts()):
    $query->the_post();
    $categories = get_the_category();
    $cat_id = $categories[0]->cat_ID;
    $args2 = array(
        'post_type' => 'post',
        'post_status' => 'publish',
        'cat' => $cat_id,
        'orderby' => 'date',
        'order' => 'DESC'
    );
    $query2 = new WP_Query($args2);
    if ($query2->have_posts()):
        while ($query2->have_posts()):
            $query2->the_post();
?>
            <h3><a href="<?php the_permalink(); ?>" target="_blank" rel="noopener" style="font-size:18px;font-weight:400;"><?php the_title(); ?></a></h3>
<?php
        endwhile;
        wp_reset_postdata();
    else:
        echo "No posts found.";
    endif;
else:
    echo "No posts found.";
endif;
?>

在代码中,我们将标题用 h3 标签包裹,并通过样式设置字体大小和字重。同时,在链接中设置了 target=”_blank” 和 rel=”noopener”,以在新窗口中打开链接。

这里的代码你可以帮我修改成 输出文章标题的同时,在输出一些文章描述吗

当然可以,以下是修改后的代码,其中在输出文章标题的同时,也输出了文章摘要,可以根据需要调整摘要的字数和样式。代码中已经加入了相应的HTML标签和CSS样式。

<?php
$tag = get_queried_object();
$args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'tag__in' => array($tag->term_id),
    'orderby' => 'date',
    'order' => 'DESC'
);
$query = new WP_Query($args);
if ($query->have_posts()):
    $query->the_post();
    $categories = get_the_category();
    $cat_id = $categories[0]->cat_ID;
    $args2 = array(
        'post_type' => 'post',
        'post_status' => 'publish',
        'cat' => $cat_id,
        'orderby' => 'date',
        'order' => 'DESC'
    );
    $query2 = new WP_Query($args2);
    if ($query2->have_posts()):
        while ($query2->have_posts()):
            $query2->the_post();
?>
            <div style="margin-bottom:20px;">
                <h3><a href="<?php the_permalink(); ?>" target="_blank" rel="noopener" style="font-size:18px;font-weight:400;"><?php the_title(); ?></a></h3>
                <p style="font-size:14px;color:#666;margin-top:5px;"><?php echo wp_trim_words(get_the_excerpt(), 25); ?></p>
            </div>
<?php
        endwhile;
        wp_reset_postdata();
    else:
        echo "No posts found.";
    endif;
else:
    echo "No posts found.";
endif;
?>

代码中将标题用<h3>标签包围,并添加了style属性,用于设置字号和粗细。摘要则用了<p>标签,同样添加了style属性,用于设置字号、颜色和顶部间距。

以两列显示,标题下方是描述 然后另起一列继续输出

可以尝试在循环输出文章时,将每两篇文章包裹在一个 div 元素中,每个 div 元素设置为 inline-block 或者 float:left,以实现两列显示的效果。

同时,在标题下方输出文章摘要,可以使用函数 the_excerpt(),例如:

<?php while ($query2->have_posts()): $query2->the_post(); ?>
    <div style="display:inline-block; width:50%;">
        <h3><a href="<?php the_permalink(); ?>" target="_blank" rel="noopener" style="font-size:18px;font-weight:400;"><?php the_title(); ?></a></h3>
        <p><?php the_excerpt(); ?></p>
    </div>
<?php endwhile; ?>

这样输出时,每两篇文章就会被包裹在一个宽度为 50% 的 div 元素中,两个 div 元素会在同一行上并排显示。每篇文章下方会输出一段摘要。

在优化下排版,现在的还是会在一行显示,而且两列之间因该有间距,描述的字号因该比标题小,标题改为纯黑色,并且不要忘记在标题上带上a标签,并以新窗口打开

好的,我来帮您进行调整和优化,以下是代码和样式:

<?php
$tag = get_queried_object();
$args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'tag__in' => array($tag->term_id),
    'orderby' => 'date',
    'order' => 'DESC'
);
$query = new WP_Query($args);
if ($query->have_posts()):
?>
    <div style="display:flex; justify-content: space-between; flex-wrap: wrap; gap: 20px;">
    <?php
    $query->the_post();
    $categories = get_the_category();
    $cat_id = $categories[0]->cat_ID;
    $args2 = array(
        'post_type' => 'post',
        'post_status' => 'publish',
        'cat' => $cat_id,
        'orderby' => 'date',
        'order' => 'DESC'
    );
    $query2 = new WP_Query($args2);
    if ($query2->have_posts()):
        while ($query2->have_posts()):
            $query2->the_post();
            $description = get_the_excerpt();
    ?>
            <div style="width: 45%; margin-bottom: 20px;">
                <h3 style="font-size: 24px; font-weight: 600; margin-bottom: 10px;">
                    <a href="<?php the_permalink(); ?>" target="_blank" rel="noopener" style="color: #000000;"><?php the_title(); ?></a>
                </h3>
                <p style="font-size: 16px;"><?php echo $description; ?></p>
            </div>
    <?php
        endwhile;
        wp_reset_postdata();
    else:
        echo "No posts found.";
    endif;
?>
    </div>
<?php
else:
    echo "No posts found.";
endif;
?>

您可以将此代码插入到您的 Elementor HTML 模块中,并在前端显示。我希望这次能够达到您的期望。

好的 如果我想限制上边代码输出的数量,该如何做

你可以在WP_Query中使用’post_per_page’参数来限制输出的文章数量,比如:

$args2 = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'cat' => $cat_id,
    'orderby' => 'date',
    'order' => 'DESC',
    'posts_per_page' => 10 //限制输出数量为10篇文章
);

这样就会限制每个分类下的输出数量为10篇文章。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容