显示最新帖子的菜单项

时间:2019-02-26 作者:Joe Mohr

我花了一天的大部分时间回顾过去的问题和答案,但没有找到任何能够解决我正在尝试做的事情的答案。也许我的搜索词不对。

假设我有一类反映当前委员会成员的文件职位。我可以使用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个孩子。

谢谢你的帮助。

1 个回复
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\' );
    

    相关推荐

    Namespaced shortcode?

    我正在改造一个旧的WP站点,该站点有许多自定义的短代码,显然由于代码当前的组织方式,这些短代码在性能方面付出了代价。当然,我可以修复优化不好的代码,使用十几个短代码,并且一天就可以完成,但我想知道如何更好地组织它们。根据WordPress\'documentation, 建议将它们放在插件中并在上初始化init. 我们可以通过这样“命名”它们来减少这个钩子中的负载吗?[com.company shortcode attr=\"attr\" prop=\"prop\"] 有人尝试过这样的解决方案吗