我花了一天的大部分时间回顾过去的问题和答案,但没有找到任何能够解决我正在尝试做的事情的答案。也许我的搜索词不对。
假设我有一类反映当前委员会成员的文件职位。我可以使用Wordpress为特定帖子创建WP菜单项,但是,用户可以使用USP Pro插件提交新帖子。现在,菜单项需要指向最近更新的帖子。我想避免每次添加新帖子时都要更新菜单。
我在函数中创建了一个短代码函数。php文件获取类别的最新帖子(短代码参数)。当我尝试重定向到该帖子的永久链接时,我得到了一个空白页面。
//[latestpost]
function get_latest_post( $atts) {
extract( shortcode_atts( array(
\'cat\' => \'\',
), $atts, \'latestpost\' ) );
$args = array(
\'posts_per_page\' => 1, // we need only the latest post, so get that post $
\'cat\' => $cat, // Use the category id, can also replace with category_nam$
//\'category_name\' => \'SLUG OF FOO CATEGORY,
);
$q = new WP_Query( $args);
if ( $q->have_posts() ) {
while ( $q->have_posts() ) {
$q->the_post();
//Your template tags and markup like:
//the_title();
$link=get_permalink($post);
// echo $link;
// echo $cat;
if ( wp_redirect( $link) ) {
exit;
}
}
wp_reset_postdata();
}
}
add_shortcode(\'latestpost\',\'get_latest_post\')`
我输入了几个echo语句,以确认函数得到了正确的类别($cat)和permalink。它们出现在页面上,但页面不会重定向。
运行Wordpress 5.1,主题为2017个孩子。
谢谢你的帮助。
SO网友:Krzysiek Dróżdż
若要执行任何重定向,必须在站点发送任何输出之前发送标头。
获取、解析和打印内容时会运行短代码。因此,该站点已部分发送到浏览器,因此您将无法再执行任何重定向。
因此,您应该使用在将任何输出发送到浏览器之前触发的挂钩来运行代码。您可以使用wp
例如挂钩。
如果您真的想让短代码引起重定向,那么:
相反,显示一个链接-我想这会让用户更容易混淆
您必须在JS中执行重定向:。
function get_latest_post( $atts) {
extract( shortcode_atts( array(
\'cat\' => \'\',
), $atts, \'latestpost\' ) );
$args = array(
\'posts_per_page\' => 1, // we need only the latest post, so get that post $
\'cat\' => $cat, // Use the category id, can also replace with category_nam$
//\'category_name\' => \'SLUG OF FOO CATEGORY,
);
$q = new WP_Query( $args);
if ( $q->have_posts() ) {
while ( $q->have_posts() ) {
$q->the_post();
// Your template tags and markup like:
// the_title();
$link=get_permalink($post);
// echo $link;
// echo $cat;
echo \'<script type="text/javascript>document.location.href = "\' . $link . \'";</script>\'
return; // you want only one redirection in your site
}
wp_reset_postdata();
}
}
add_shortcode( \'latestpost\', \'get_latest_post\' );