老龙眼 發表於 2025-6-13 00:00:00

通过自定义字段重新排序 WordPress 文章方法

<p>您想更改网站博客页面上 WordPress 文章的顺序吗?那么您就在正确的地方学习此功能并更改文章的顺序。因此,在本文中,我将向您展示如何通过自定义字段更改文章的顺序。</p>
<p>WordPress 中文章的默认顺序基于发布日期,并按时间倒序显示。这意味着它将在顶部显示最新的文章。</p>
<p>通过为 WordPress 添加自定义字段,您可以根据该自定义字段更改顺序。</p>
<p>我将在下面的分步指南中解释如何创建自定义字段并更改博客页面上文章的顺序。</p>
<h3>按自定义字段排序 WordPress 文章</h3>
<p>让我们开始在帖子中创建一个自定义字段,并使用文章 ID 保存值并显示它们。</p>
<h3>在发布元框中创建自定义字段</h3>
<p>我们将在编辑文章页面右侧边栏的发布元框中创建一个数字自定义字段。字段值将保存在 post meta 表中,我们稍后将使用它来更改文章顺序。</p>
<p>有关发布元框中的自定义字段,请参阅下面的代码。</p>
<div class="jb51code"><pre>add_action(&#39;post_submitbox_misc_actions&#39;, &#39;add_publish_meta_custom_field&#39;);
function add_publish_meta_custom_field($post_obj) {

        global $post;
        $post_type = &#39;post&#39;;
        $value = get_post_meta($post_obj-&gt;ID, &#39;post_order&#39;, true);
        $val = ($value) ? $value : &quot;0&quot;;
        if($post_type==$post-&gt;post_type) {

          echo &#39;&lt;div class=&quot;misc-pub-section misc-pub-section-last&quot;&gt;&#39;
                 .&#39;&lt;label&gt;Post Order &lt;input name=&quot;post_order&quot; type=&quot;number&quot; step=&quot;1&quot; min=&quot;0&quot; id=&quot;post_order&quot; value=&quot;&#39;.$val.&#39;&quot; class=&quot;small-text&quot;&gt;&lt;/label&gt;&#39;
                 .&#39;&lt;/div&gt;&#39;;
        }
}</pre></div>
<p>以上将在发布元框中创建自定义字段,您将看到如下图所示的字段。</p>
<p><img style="max-width:100%!important;height:auto!important;"alt="在发布元框中创建自定义字段,您将看到如下图所示的字段。" height="539" src="https://zhuji.jb51.net/uploads/allimg/20250613/1-2506131J02K04.jpg" width="840" /></p>
<p>发布元框中的自定义字段</p>
<h3>保存自定义字段的值</h3>
<p>现在,我们必须保存Post Order字段的值。所以我们将<code>save_post</code>在保存文章之前运行动作钩子,并<code>update_post_meta()</code>用于保存相应文章的字段值。</p>
<p><code>update_post_meta()</code>操作将值与文章 ID 一起保存在wp_postmeta表中。</p>
<p>好的。请参阅代码以保存该自定义字段的值。</p>
<div class="jb51code"><pre>add_action( &#39;save_post&#39;, &#39;save_publish_meta_custom_field&#39;, 10 , 3);
function save_publish_meta_custom_field($post_id, $post, $update) {

        $post_type = &#39;post&#39;;
        if ( $post_type != $post-&gt;post_type ) {
            return;
        }

        if ( wp_is_post_revision( $post_id ) ) {
            return;
        }

        if(isset($_POST[&#39;post_order&#39;])) {
            update_post_meta($post_id, &#39;post_order&#39;, $_POST[&#39;post_order&#39;]);
        }

}</pre></div>
<p>上面的代码将自定义字段值保存在数据库中,并将显示在该输入数字字段中。</p>
<p><img style="max-width:100%!important;height:auto!important;"alt="自定义字段中保存的值" height="318" src="https://zhuji.jb51.net/uploads/allimg/20250613/1-2506131J02O39.jpg" width="840" /></p>
<p>自定义字段中保存的值</p>
<h3>按自定义字段更改 WordPress 文章的顺序</h3>
<p>现在,我们将使用我们自己的顺序值更改 WordPress 文章的默认顺序。在显示结果之前,我们将运行<code>pre_get_posts</code><span style="background-color:initial">动作钩子来修改现有的WP_Query文章。</span></p>
<p><code>pre_get_posts</code>给我们一些解决方案来修改<code>wp_query</code>无需编写自定义WP_Query。</p>
<div class="jb51code"><pre>function pre_custom_post_order_sort( $query ){
if ( is_home() &amp;&amp; $query-&gt;is_main_query() ){
    $query-&gt;set( &#39;orderby&#39;, &#39;meta_value&#39; );
    $query-&gt;set( &#39;meta_key&#39;, &#39;post_order&#39; );
    $query-&gt;set( &#39;order&#39; , &#39;ASC&#39; );
}
}
add_action( &#39;pre_get_posts&#39; , &#39;pre_custom_post_order_sort&#39; );</pre></div>
<p>上面的代码示例将更改博客页面或主页上的 WordPress 文章顺序。</p>
<p>我们在这篇文章中检查了一个主要查询和主页,然后使用meta_key元值设置查询顺序。它将检查文章是否具有自定义字段值,并根据字段值将它们置于顶部。</p>
<h3>在模板文件中按自定义字段排序 WordPress 文章</h3>
<p>您还可以创建自己的自定义WP_Query以按顺序显示文章。</p>
<p>您必须创建一个WordPress 自定义模板页面,然后您可以在该模板中编写自己的查询。</p>
<p>在此处查看有关如何在 WordPress 中创建自定义页面模板的分步指南。</p>
<p>好的。您现在有一个自定义模板文件。因此,在该模板中编写以下代码。</p>
<div class="jb51code"><pre>$args = array(
    &#39;post_type&#39; =&gt; &#39;post&#39;,
    &#39;meta_key&#39; =&gt; &#39;post_order&#39;,
    &#39;orderby&#39; =&gt; &#39;meta_value&#39;,
    &#39;order&#39; =&gt; &#39;ASC&#39;
);

$query = new WP_query ( $args );

if ( $query-&gt;have_posts() ) {
    while ($query-&gt;have_posts() ) {
      $query-&gt;the_post();

      if ( !empty(get_post_meta( $post-&gt;ID, &#39;post_order&#39;, true )) ) {
            the_title();
      }

    wp_reset_postdata();
}</pre></div>
<p>上面的代码将按自定义字段值显示文章标题顺序,并根据自定义字段值将文章置于顶部。</p>
<p>您还可以在functions.php 文件中创建上述代码的简码,并在小工具、页面或您想要显示文章的任何地方使用该简码。</p>
<p>就是这样。您已完成按自定义字段值显示 WordPress 文章顺序。</p>
頁: [1]
查看完整版本: 通过自定义字段重新排序 WordPress 文章方法