自定义帖子类型中的帖子在前端共享相同的内容

时间:2017-01-17 作者:Darren Bachan

我创建了一个新的自定义帖子类型,名为doctors. 我一直在使用ACF并拉这些字段来帮助创建我的横幅。我想知道如果没有填写字段,帖子会是什么样子,所以我创建了第二个测试帖子,但我注意到它的内容与我的第一篇帖子完全相同。

显然,我觉得我的函数写得不对。

function doctor_banner_shortcode() {
    $args = array(
        \'posts_per_page\'    => 1,
        \'post_type\'     => \'doctors\',
        \'post_status\'       => \'publish\'
    );
    $doctors_query = new WP_Query( $args );
    if ( $doctors_query->have_posts() ) :
        while ( $doctors_query->have_posts() ) :
            $doctors_query->the_post();

            $dr_name = get_field( \'practitioner_name\' );
            $dr_degree = get_field( \'practitioner_title\' );
            $dr_bio = get_field( \'practitioner_short_bio\' );
            $dr_cv = get_field( \'practitioner_cv\' );

            $html_out = \'<h1>Dr. \' . $dr_name . \'</h1>
                         <h3">\' . $dr_degree . \'</h3>
                         <p>\' . $dr_bio . \'</p>
                         <a href="\' . $dr_cv . \'">\' . \'Read CV\' . \'</a>\';
        endwhile;
    else : // No results
        $html_out = "No Doctors Found.";
    endif;
    wp_reset_query();
    return $html_out;
}

add_shortcode( \'doctor_banner\', \'doctor_banner_shortcode\' );
不知何故,我认为,它没有读取该帖子的正确ID来输出正确的数据。我的两篇文章有两个链接herehere.

2 个回复
SO网友:Johansson

您正在查询doctors 键入,并将每页的帖子数设置为1。显然,这将始终返回相同的帖子。

您需要设置帖子的id,或者在循环中导航以找到匹配项。如果您在单个帖子页面中调用此函数,要根据帖子id筛选结果,应按以下方式使用此函数:

function doctor_banner_shortcode($doctor_id) {
$args = array(
    \'posts_per_page\'    => 1,
    \'post_type\'     => \'doctors\',
    \'post_status\'       => \'publish\',
    \'p\'        => $doctor_id
);
$doctors_query = new WP_Query( $args );
if ( $doctors_query->have_posts() ) :
    while ( $doctors_query->have_posts() ) :
        $doctors_query->the_post();

        $dr_name = get_field( \'practitioner_name\' );
        $dr_degree = get_field( \'practitioner_title\' );
        $dr_bio = get_field( \'practitioner_short_bio\' );
        $dr_cv = get_field( \'practitioner_cv\' );

        $html_out = \'<h1>Dr. \' . $dr_name . \'</h1>
                     <h3">\' . $dr_degree . \'</h3>
                     <p>\' . $dr_bio . \'</p>
                     <a href="\' . $dr_cv . \'">\' . \'Read CV\' . \'</a>\';
    endwhile;
else : // No results
    $html_out = "No Doctors Found.";
endif;
wp_reset_query();
return $html_out;
}

add_shortcode( \'doctor_banner\', \'doctor_banner_shortcode\' );
然后可以在single.php 模板如下:function doctor_banner_shortcode($post->ID)

如果要在其他页面中手动调用该函数,则应在调用该函数时设置ID。

SO网友:Pedro Coitinho

看起来您没有将ID提供给循环,强制它按时间顺序获取第一个项目(无论您在哪里调用快捷码,它总是最新的)。

如果你的shorcode在里面the_content 您甚至不必运行另一个循环,只需直接使用get\\u字段。

function doctor_banner_shortcode() {

    $dr_name = get_field( \'practitioner_name\' );
    $dr_degree = get_field( \'practitioner_title\' );
    $dr_bio = get_field( \'practitioner_short_bio\' );
    $dr_cv = get_field( \'practitioner_cv\' );

    $html_out = \'<h1>Dr. \' . $dr_name . \'</h1>
                 <h3">\' . $dr_degree . \'</h3>
                 <p>\' . $dr_bio . \'</p>
                 <a href="\' . $dr_cv . \'">\' . \'Read CV\' . \'</a>\';

    return $html_out;
}
让我知道它是否有效!

相关推荐

获取AJAX调用的ShortCode属性

我想给我的插件传递一个可以访问文件的文件夹,这样我就可以运行多个设置了不同文件夹的实例。我的第一个想法是用文件夹名添加一个属性。因为我使用的是AJAX,所以我需要始终访问我的短代码的属性。我找到了这样一种解决方案,将属性传递给JS,然后在发生AJAX调用时将其传回:https://wordpress.stackexchange.com/a/184219我试过了,但没用。有没有更优雅的方法?以下是我的PHP文件的重要部分:add_action(\'init\', \'wporg_shortcodes_ini