我想编写一个 WordPress 插件,它能够向浏览器提供 URL 中请求之外的另一个页面。该插件不应将浏览器转发到另一个 URL(浏览器 URL 不应更改)。
假设我们有 2 个 WordPress 页面:“page1”和“page2”。浏览器将表单中的一些后期数据发送到 www.example.com/wordpress/page1。该插件检查后数据并决定传送 page2 而不是 page1。
Wordpress 提供了全局变量 $pagename,它存储 URL 中请求的页面的名称。不幸的是,wordpress 并不关心您是否将 $pagename 设置为另一个值(如我的代码所示)。它仍然提供 page1 而不是 page2...
<?php
/*
Plugin Name: example plugin
Description: This is just an example.
*/
function msu_wp_loaded() {
global $pagename;
if($pagename == "page1" && some_other_condition ) {
$pagename = "page2";
}
}
add_action('wp_loaded','msu_wp_loaded');
?>
有什么解决办法吗?
最佳答案
我会创建两个不同的页面,每个页面都有不同的内容。然后,我将使用 pre_get_posts 来获取 postid 参数。这样,您就不必处理重定向。
function conditional_change_content_by_id( $query ){
if( $query->is_page( YOURPAGEID ) && $query->is_main_query() && (isset($_POST["pageid"]) && !empty($_POST["pageid"])) ) {
$query->set( 'page_id', $_POST["pageid"] );
}
}
add_action( 'pre_get_posts', 'conditional_change_content_by_id' );
关于php - WordPress插件开发: Deliver other page to browser than requested in URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54492993/