我对自己缺乏PHP/WP知识以及在解释我要找的内容时的冗长表示歉意,但我已经尝试了几天的解决方案,现在我才开始关注过滤器和循环。
Here\'s what I\'d like to accomplish:
我正在使用的插件的一个短代码有一个属性标记“sched”,我想让它本质上是动态的,改为当前(自定义)帖子的(自定义)类别slug。下面是一个与MSTW Schedules and Scoreboards插件配合良好的现有短代码示例:
[mstw_schedule_table sched="v-football"]
我的计划是将“sched”属性的值设置为“sport”(在所有帖子上),作为占位符,用当前帖子的“sport”自定义类别slug替换。我已经设置了所有“运动”类别的slug,以与插件中使用的“sched”值相对应,以确保当前帖子上显示的时间表是正确的。
注意:所有这些自定义帖子(设置为“团队”)应该只应用一个“运动”类别:我在admin中将“运动”类别设置为下拉框,如this.
另请注意:我希望自定义帖子的内容中可以使用可编辑的快捷码,这样我就可以根据需要编辑每个帖子的其他属性。
Here is what I\'ve tried:
这是我得到的最接近的结果,但我知道我使用了错误的过滤器,或者在错误的时间调用了函数。注意,在循环之前,我在为自定义post类型创建的“single team.php”文件中运行了这段代码。我知道它应该在函数中。php或单独的插件(请告知)。
我的灵感:
do_shortcode_tag / get_the_terms
add_filter( \'do_shortcode_tag\', \'wpse_106269_do_shortcode_tag\', 10, 4);
function wpse_106269_do_shortcode_tag( $output, $tag, $attr, $m ) {
if( $tag === \'mstw_schedule_table\' ) {
//* Do something useful
if ($attr[\'sched\'] === \'sport-slug\') {
print_r($attr);
// Get a list of tags and extract their names
$sport = get_the_terms( get_the_ID(), \'sport\' );
if ( ! empty( $sport ) && ! is_wp_error( $sport ) ) {
$sport_slug = wp_list_pluck( $sport, \'slug\' );
$attr[\'sched\'] = $sport_slug[0];
}
echo "<br>";
print_r($attr);
}
}
return $output;
}
这将输出:
Array ( [sched] => sport-slug )
Array ( [sched] => v-football )
所以我知道我可以更改短代码的$attr的值,但在插件解析之前,我不知道如何用修改后的短代码替换原来的短代码。
我试过使用the_content:
// Modify Content of a Post
add_filter(\'the_content\', \'se24265_my_function\');
function se24265_my_function( $content )
{
$write = \'hello world\';
$new_content = $write . $content;
$sport = get_the_terms( get_the_ID(), \'sport\' );
if ( ! empty( $sport ) && ! is_wp_error( $sport ) ) {
$sport_slug = wp_list_pluck( $sport, \'slug\' );
str_replace("sport-slug", $sport_slug[0], $new_content);
}
return $new_content;
// outputs hello world
// outputs inital shortcode without modifications
}
我还考虑过运行插件的shortcode处理函数(如
this) 使用修改后的参数,但我不知道如何在插件解释之前访问/修改该参数。
我也看到了this 在自定义帖子模板中生成快捷码的示例。。。
// Making your custom string parses shortcode
$string = do_shortcode( $string );
// If your string has a custom filter, add its tag name in an applicable add_filter function
add_filter( \'my_string_filter_hook_tag_name\', \'do_shortcode\' );
。。。但我希望能够根据需要在每个自定义帖子的不同位置编辑/放置短代码,而且我仍然不知道要使用哪个过滤器挂钩(content\\u edit\\u pre?)
任何帮助都将不胜感激。谢谢