创建自定义短码wp并将php代码放入

时间:2020-04-05 作者:omid chahardoli

我使用ACF 插件和我想把这个查询放在短代码中。但我有个问题。(not output anything)

    add_shortcode(\'pishnahadi\' , \'kn_inline_related\');
global $post;
function kn_inline_related( $atts ) {
$html= \'\';
$posts = get_field(\'pishnahadi\', false, false);
$loop = new WP_Query(array(\'post_type\' => \'news\', \'posts_per_page\' => 3, \'post__in\' => $posts, \'post_status\' => \'publish\', \'orderby\' => \'post__in\', \'order\' => \'ASC\' ));

if($loop->have_posts()) {
     $html .= \'<div class="rel-posts">\';

        while ($loop->have_posts()) : $loop->the_post();

             $html .= \'<div class="related-post">\';
                    $html .=  \'<h3><a href="\' .the_permalink get_permalink() . \'">\' . the_title( \'\', \'\', false ) . \'</a></h3>\';
             $html .=  \'</div>\';

        endwhile;

$html .= \'</div>\';
} wp_reset_query();
}
return $html;
}
更新:(以下代码正确且有效)

add_shortcode(\'pishnahadi\' , \'kn_inline_related\');
global $post;
function kn_inline_related( $atts ) {
$html= \'\';
$posts = get_field(\'pishnahadi\', false, false);
$loop = new WP_Query(array(\'post_type\' => \'news\', \'posts_per_page\' => 3, \'post__in\' => $posts, \'post_status\' => \'publish\', \'orderby\' => \'post__in\', \'order\' => \'ASC\' ));

if($loop->have_posts()) {
     $html .= \'<div class="rel-posts">\';

        while ($loop->have_posts()) : $loop->the_post();

             $html .= \'<div class="related-post">\';
                    $html .=  \'<h3><a href="\' . get_permalink() . \'">\' . the_title( \'\', \'\', false ) . \'</a></h3>\';
             $html .=  \'</div>\';

        endwhile;

$html .= \'</div>\';
} wp_reset_query();
return $html;
}

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

the_permalink() echoes 输出,以及the_title() 默认情况下。所以你应该使用get_permalink()get_the_title():

$html .=  \'<h3><a href="\' . get_permalink() . \'">\' . get_the_title() . \'</a></h3>\';
或使用the_title() 使用第三个parameter 设置为false 要返回并不回显输出,请执行以下操作:

$html .=  \'<h3><a href="\' . get_permalink() . \'">\' . the_title( \'\', \'\', false ) . \'</a></h3>\';
Update: 这个return $html; (在您原来未编辑的问题中)实际上超出了函数的范围,这将导致短代码不给您任何输出!因此,请确保它位于实际代码中的函数内。:)和用于辅助/自定义WP_Query 实例,如$loop 变量,只需调用wp_reset_postdata() 而不是wp_reset_query() 因为辅助查询不涉及(全局)$wp_query 变量当然,除非在代码中修改了该变量。但你为什么要这么做。

相关推荐

Custom Post type shortcodes

我使用高级自定义字段在我的主题中创建自定义帖子类型(功能)。我想知道如何创建自定义帖子类型的短代码。因此,我只使用任何页面的自定义帖子类型的短代码来显示我在自定义帖子类型(功能)中添加的信息。