将过滤器重写为短码(或类似代码),以便在CPT中的任何位置使用

时间:2017-08-23 作者:Democloak

我有2个与关系相关的CPT:stficstfic-child.

single-stfic.php 创建图书采访和目录(来自stfic-child) 和single-stfic-child.php 作为本章的内容。他们都链接到stfic-manuscripts 作为分类法。

然后我在中创建了一个过滤器single-stfic.php 为我的小说网站创建目录(如下)。

那么,我怎样才能把它作为一个短代码呢?或者让它成为任何地方都可以使用的简单工具?

我还添加了原文single-stfic.php 此处的文件内容:https://pastebin.com/LhVgK0AS

$args = array(
    \'post_type\'         => \'stfic-child\',
    \'posts_per_page\'    => -1,
    \'post_status\'       => \'publish\',
    \'order\'             => \'ASC\',
    \'post_parent\'       => 0,
    \'stfic-manuscripts\' => $termSlug
);

$query = new WP_Query( $args );

while ( $query->have_posts($post->ID) ) : $query->the_post();
    echo \'<li><a href="\'. get_permalink(). \'">\' .get_the_title() .\'</a></li>\';  
endwhile;

wp_reset_query();

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

让你的代码变得简单,并且能够“在任何地方使用”是非常主观的。由于您正在编写代码,并且没有指定代码的最终使用位置,因此最简单的方法是将其作为函数:function my_function() { ... }

然而,为了使其成为一个短代码,在codex 当我想制作一个短代码时,我总是使用它:

function bartag_func( $atts, $content = null ) {
    $a = shortcode_atts( array(
        \'foo\' => \'something\',
        \'bar\' => \'something else\',
    ), $atts );

    //Run whatever code I want to here...

    return $my_result;
}
add_shortcode( \'bartag\', \'bartag_func\' ); //[bartag foo="foo-value"]
如果您不想传入任何变量,那么可以删除用于提取变量的第一个代码块。

对于短代码,您必须return 您的结果。任何直接被回应/打印的内容最终都会出现在页面上奇怪的地方,而不是你想要的地方。如果要使用的函数想要直接回显,请使用输出缓冲区捕获数据并将其放入字符串:

ob_start();
    //My Code
$result = ob_get_clean();
短代码函数应该能够根据您想要做的事情来添加和应用过滤器,但值得注意的是,如果您使用的是WP使用的短代码/过滤器组合(如在放置在帖子内容中的短代码函数中过滤帖子内容),您可能会陷入过滤循环

结束

相关推荐

尝试将动态内容调用为ShortCode属性

我正在尝试向现有(第三方)短代码添加动态属性。短代码在同一页上出现多次。当我这样做时(在functions.php中),我可以得到第一个正确输出的短代码,但其他的则不行。function testOne(){ return do_shortcode(\'[abc type=\"contact\" orderby=\"menu_order\" order=\"asc\" style=\"list-post\" logic=\"and\" abc_tax_student=\"student1\