在运行循环之前,使用自定义字段值更新一些(不是全部)帖子标题

时间:2021-10-20 作者:P. Britten

在这个项目中,有各种标题的自定义帖子。在每个标题为人名(名字、姓氏)的帖子中,都有一个自定义字段(custom\\u title),可以保存一个备用名称(姓氏、姓氏)。

为了在自定义存档页面中以有用的方式显示名称,对象将检查custom\\u title字段中的值,如果存在,则使用自定义标题更新文章标题。更新所有适用的标题后,查询必须按标题对所有帖子进行排序,同时识别更新的标题。

使用下面的代码,命名文章的原始标题将用自定义标题更新,但排序顺序不会改变,它仍然按原始标题排序。

感谢您抽出时间帮忙!

    function cchs_swap_title( $updatedTitle) 
    {
        $customTitle = get_post_meta( get_the_ID(), \'custom_title\', true);
        if(!empty($customTitle))
        {
            $updatedTitle = $customTitle;
        }
        return $updatedTitle;
    }
    add_filter( \'the_title\', \'cchs_swap_title\');
    
    function cchs_archives_orderby( $the_query ) {
        if(!is_admin() && $the_query->is_main_query())
        {
            $the_query->set( \'orderby\', \'title\' );
            $the_query->set( \'order\', \'DESC\' );
            
        }
    }
    add_action( \'pre_get_posts\', \'cchs_archives_orderby\', 99999 );      

    $args = array(
        \'post_type\'         => \'cchs_article\',
        \'posts_per_page\'    => -1
    );
    $the_query = new WP_Query( $args );

    if ( $the_query->have_posts() ) : 
        while ( $the_query->have_posts() ) : $the_query->the_post();
            get_template_part( \'template-parts/content\', \'archive-cchs_article\');
        endwhile;
        wp_reset_postdata();
    else :
        get_template_part( \'template-parts/content\', \'none\' );
    endif;

2 个回复
最合适的回答,由SO网友:Greg36 整理而成

如果您同时使用查询所有帖子\'posts_per_page\'=> -1 最简单的方法是将所有帖子作为一个数组,根据需要更新标题,然后对它们进行排序。

这种方法的缺点是必须更新循环以使用属性而不是函数,即the_title(); 您将使用echo $article->post_title; 以下示例可行without 这个cchs_swap_title 过滤器和cchs_archives_orderby 行动

$args = array(
        \'post_type\'         => \'cchs_article\',
        \'posts_per_page\'    => -1
    );
$the_query = new WP_Query( $args );
$articles = $the_query->get_posts(); // Get all the posts as an array

// Update post title based on custom field
foreach ( $articles as $article ) {
    $customTitle = get_post_meta( $article->ID, \'custom_title\', true);
    if( $customTitle ) {
        $article->post_title = $customTitle;
    }
}

// Sort all posts by title
usort($articles, function($a, $b) {
    return strcmp( $a->post_title, $b->post_title );
} );

// The loop
if ( $the_query->have_posts() ) :
    foreach ( $articles as $article ) {
        get_template_part( \'template-parts/content\', \'archive-cchs_article\', [ \'article\' => $article ] );
    }
else :
    get_template_part( \'template-parts/content\', \'none\' );
endif;

在上面的示例中,在模板零件文件内部,而不是the_title() 您需要使用echo $args[\'article\']->post_title;.

这个$args[\'article\'] 这篇文章是我们在文章中的第三个论点吗get_template_part 作用

SO网友:Greg36

Th类ere 我s 一not型h类er 一ppro一ch类: cre一t型e post型 m级et型一 v一lue w我t型h类 t型h类e t型我t型le wh类en t型h类e 一rt型我cle 我s cre一t型ed or upd一t型ed. Th类我s w一y we 一lw一ys h类一ve t型h类e f我n一l t型我t型le s一ved 一nd we c一n sort型 by 我t型 r我g级h类t型 一w一y.

&#x个A.;

To do t型h类我s h类ook t型o s一ve_post型, ch类eck 我f current型 post型 我s 一n 一rt型我cle 一nd upd一t型e t型h类e t型rue_t型我t型le m级et型一 v一lue w我t型h类 cust型om级 f我eld\'s v一lue or w我t型h类 post型 t型我t型le 我f t型h类一t型 one 我s em级pt型y.

&#x个A.;
一dd_一ct型我on( \'s一ve_post型\', \'wpse_3.97.1.4.5._s一ve_proper_t型我t型le\', 1.0, 2. );&#x个A.;&#x个A.;funct型我on wpse_3.97.1.4.5._s一ve_proper_t型我t型le( $post型_我d, $post型 ) {&#x个A.;    // Only ch类eck 我n 一rt型我cles&#x个A.;    我f ( \'cch类s_一rt型我cle\' !== $post型-&g级t型;post型_t型ype ) {&#x个A.;        ret型urn;&#x个A.;    }&#x个A.;&#x个A.;    // Set型 t型h类e f我n一l t型我t型le t型o cust型om级 f我eld, def一ult型 t型o t型h类e post型 t型我t型le&#x个A.;    $cust型om级T我t型le = g级et型_post型_m级et型一( g级et型_t型h类e_我D(), \'cust型om级_t型我t型le\', t型rue);&#x个A.;    我f( ! $cust型om级T我t型le ) {&#x个A.;        $cust型om级T我t型le = $post型-&g级t型;post型_t型我t型le;&#x个A.;    }&#x个A.;    upd一t型e_post型_m级et型一( $post型_我d, \'t型rue_t型我t型le\', $cust型om级T我t型le );&#x个A.;}&#x个A.;&#x个A.;
&#x个A.;

Now just型 ch类一ng级e t型h类e WP_Query 一rg级s t型o (you c一n even sk我p -1. h类ere):

&#x个A.;
$一rg级s = 一rr一y(&#x个A.;    \'post型s_per_p一g级e\' =&g级t型; -1.&#x个A.;    \'post型_t型ype\'      =&g级t型; \'cch类s_一rt型我cle\',&#x个A.;    \'m级et型一_key\'       =&g级t型; \'t型rue_t型我t型le\',&#x个A.;    \'orderby\'        =&g级t型; \'m级et型一_v一lue\',&#x个A.;    \'order\'          =&g级t型; \'DESC\'&#x个A.;);&#x个A.;
&#x个A.;

A.nd l一st型, wh类ere you use t型h类e_t型我t型le() for t型h类e 一rt型我cle, repl一

相关推荐

如何让`wp-list-table`显示我在Custom-Post中的`Custom-Fields`

一切都好吗<我需要wp-list-table 也要显示custom-fields 在每个custom-post 我有,但我不知道如何做到这一点,在这幅图中,它显示了带有字段的表格:Title, Author and Publication Date: 我想要的是能够选择custom-fields 将出现,例如以下示例Title, Carta, Naipe, Author, and Date of Publication: