Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress 如何使php tu随机生成的链接自动打开?_Wordpress_Random_Hyperlink_Article - Fatal编程技术网

Wordpress 如何使php tu随机生成的链接自动打开?

Wordpress 如何使php tu随机生成的链接自动打开?,wordpress,random,hyperlink,article,Wordpress,Random,Hyperlink,Article,在我的菜单上,我想成为一个名为“Random”的链接,点击它会打开一篇随机文章,就像《stumbleupon》一样。我制作了thinkink模板,我可以从那里实现这一点。但我不能。我在问你如何打开页面上存在的唯一链接,以及模板生成的链接(在php代码的帮助下)。我想这可能需要两步操作:首先,用户点击我菜单中的Random,然后打开/Random页面,上面有一个随机链接(我的文章链接之一)。 第二,我希望该链接直接打开(自动),而不需要页面的其他加载项。 可以这样做吗?还是有别的原因? 这一页完全

在我的菜单上,我想成为一个名为“Random”的链接,点击它会打开一篇随机文章,就像《stumbleupon》一样。我制作了thinkink模板,我可以从那里实现这一点。但我不能。我在问你如何打开页面上存在的唯一链接,以及模板生成的链接(在php代码的帮助下)。我想这可能需要两步操作:首先,用户点击我菜单中的Random,然后打开/Random页面,上面有一个随机链接(我的文章链接之一)。 第二,我希望该链接直接打开(自动),而不需要页面的其他加载项。 可以这样做吗?还是有别的原因? 这一页完全是空的。(由于dns更改,我的网站现在处于脱机状态。它将在几个小时后启动并运行)。
希望我能让自己明白,我不知道该怎么解释。如果我不能更好地解释这一点,我真的很抱歉

也许,这种方法会更好:

我已经为Nav菜单准备了一个定制的Walker,它为菜单项生成一个指向post的随机链接,并从administration菜单中指定了类“random”

因此,为了完成这项工作,您必须将此代码复制并粘贴到functions.php

class Random_Walker_Nav_Menu extends Walker_Nav_Menu {

    function start_el(&$output, $item, $depth, $args) {
        global $wp_query;
        $indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';

        $class_names = $value = '';

        $classes = empty( $item->classes ) ? array() : (array) $item->classes;
        if ( !empty( $classes ) && in_array( 'random', $classes ) ){
            $args = array( 'numberposts' => 1, 'orderby' => 'rand' ); 
            $rand_posts = get_posts( $args ); 
            foreach( $rand_posts as $p ){
                $item->url = get_permalink( $p->ID );       
            }           
        }
        $classes[] = 'menu-item-' . $item->ID;

        $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
        $class_names = ' class="' . esc_attr( $class_names ) . '"';

        $id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args );
        $id = strlen( $id ) ? ' id="' . esc_attr( $id ) . '"' : '';

        $output .= $indent . '<li' . $id . $value . $class_names .'>';

        $attributes  = ! empty( $item->attr_title ) ? ' title="'  . esc_attr( $item->attr_title ) .'"' : '';
        $attributes .= ! empty( $item->target )     ? ' target="' . esc_attr( $item->target     ) .'"' : '';
        $attributes .= ! empty( $item->xfn )        ? ' rel="'    . esc_attr( $item->xfn        ) .'"' : '';
        $attributes .= ! empty( $item->url )        ? ' href="'   . esc_attr( $item->url        ) .'"' : '';

        $item_output = $args->before;
        $item_output .= '<a'. $attributes .'>';
        $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
        $item_output .= '</a>';
        $item_output .= $args->after;

        $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
    }
}
然后,您将进入管理外观->菜单,并将向所需菜单添加新的自定义链接。URL其实并不重要。所以,选择你的博客ULR。称之为“随机帖子”或“随机”,这取决于你。然后给它分配一个类“random”(没有qoutes)。如果类字段未显示给您,请从右上角的“屏幕选项”启用它。保存


好吧,斯派克。我还有另一个解决方案,可能更容易实现

将此代码插入functions.php,并使用自定义模板将$page_id值修改为页面的id:

function binda_redirect_to_rand( $query ) {
    $page_id = 234; //ID of your page with custom template  
    if ( $query->is_page() && $query->query_vars['page_id'] == $page_id && $query->is_main_query() ) {          
        $args = array( 'numberposts' => 1, 'orderby' => 'rand' ); 
        $rand_posts = get_posts( $args ); 
        foreach( $rand_posts as $p ){
            $query->set( 'p', $p->ID );
            $query->set( 'page_id', '' );   
        }     
    }
    return $query;
}
add_action( 'pre_get_posts', 'binda_redirect_to_rand' );

这段代码将指向具有指定ID的页面的查询重定向到随机post,然后再从DB获取任何post数据,因此它与我的第一个解决方案一样快。我更喜欢上一个,因为您不必创建冗余页面,但是这个页面非常容易实现。

显示您在模板中使用的代码
对不起,请将新信息添加到问题本身()。别忘了读这本书;)你说的我都做了,到目前为止一切都很好,没有破坏,但仍然存在一个问题。。我猜不出来。。如何做你所说的更换那条线。我找到了。它是这样的:wp_导航菜单(数组('theme_location'=>'主菜单','container'=>'','menu_id'=>'主菜单');我在header.php中找到了它。我如何编辑它才能像你说的那样工作?因为我尝试过任何组合,但都没有出现任何效果(数组('theme\u location'=>'primary menu','container'=>'','menu\u id'=>'primary menu','walker'=>new Random\u walker\u nav\u menu());
function binda_redirect_to_rand( $query ) {
    $page_id = 234; //ID of your page with custom template  
    if ( $query->is_page() && $query->query_vars['page_id'] == $page_id && $query->is_main_query() ) {          
        $args = array( 'numberposts' => 1, 'orderby' => 'rand' ); 
        $rand_posts = get_posts( $args ); 
        foreach( $rand_posts as $p ){
            $query->set( 'p', $p->ID );
            $query->set( 'page_id', '' );   
        }     
    }
    return $query;
}
add_action( 'pre_get_posts', 'binda_redirect_to_rand' );