我们能有一个没有WordPress“页面”的php“页面”吗?

时间:2015-01-02 作者:hawbsl

在主页的某个地方,我们需要显示一个容器页面,该页面可以处理一些自定义帖子类型的内容。实际上,它做什么并不重要,我的观点是它需要存在,并且可以从主页菜单访问。

我们之前已经这样做了,创建了一个WordPress“页面”作为容器页面,然后在主题/后端/PHP中创建了一个页面xxx。php是容器的所有工作发生的地方,并且。。。有点。。。作品

但这确实意味着WordPress管理菜单中有一个无用的“页面”,我们必须指示客户端不要编辑它,因为“这不是一个真正的页面,只是一个占位符”,而且大多数情况下都可以。但这并不理想。

我知道we can hide 客户端的占位符页。但有没有一个不那么麻烦的解决方案?

我们是否可以在PHP中创建一个页面,其中包含执行特定任务的代码,并且能够以slug/address的形式访问该代码,而不必将该页面作为admin中的页面存在?

3 个回复
SO网友:Hasin Hayder

好吧,在你的目录中只保留一个普通的php文件,比如我的页面。php,然后使用为其创建一个虚荣URL。htaccess。打开。htaccess文件(如果存在于安装目录中)或创建一个

RewriteEngine On
RewriteRule ^my-page-slug my-page.php
应该很好

更新

如果要访问WP帖子和其他对象,必须包括;wp负载。php“;您可以访问常规的$wpdb或$WP\\u查询对象。下面是一些示例代码

<?php
//path/to/your/wordpress/installation/my-page.php

include_once ("wp-load.php");

$posts = get_posts();
foreach($posts as $post){
    echo $post->post_name;
    echo "<hr/>";
}

SO网友:jep

当我需要使用Wordpress的自定义php页面时,通常我会这样做:

我在Wordpress允许的变量中添加了一个查询变量:

add_filter( \'query_vars\', \'myplugin_add_query_var\' );

function myplugin_add_query_var( $query_vars ){
   $query_vars[] = \'myplugin_page_name\';
}
我在parse\\u请求操作中添加了一个函数,用于检查是否设置了之前声明的变量。

 add_action( \'parse_request\', \'myplugin_front_controller\' );

 function myplugin_front_controller( $query ){
    if( array_key_exists( \'myplugin_page_name\', $query->query_vars ) ){
      myplugin_dosomething();
      die();
    }
 }
我将在php页面中编写的代码封装在一个函数中

 function myplugin_dosomething(){
     echo \'Hello World\';
 }
Note that I really don\'t know if this is a good practice.
但是,在完成所有这些工作之前,我会考虑是否不能使用AJAX实现。

SO网友:sakibmoon

您可以使用创建自定义帖子类型register_post_type() 具有的函数falseshow_ui 像这样的参数。

//code is taken from codex
//custom post type name is book here. Change the post type name and other options as your need
//Set `show_ui` and `show_in_menu` false
add_action( \'init\', \'codex_book_init\' );
function codex_book_init() {
$labels = array(
    \'name\'               => _x( \'Books\', \'post type general name\', \'your-plugin-textdomain\' ),
    \'singular_name\'      => _x( \'Book\', \'post type singular name\', \'your-plugin-textdomain\' ),
    \'menu_name\'          => _x( \'Books\', \'admin menu\', \'your-plugin-textdomain\' ),
    \'name_admin_bar\'     => _x( \'Book\', \'add new on admin bar\', \'your-plugin-textdomain\' ),
    \'add_new\'            => _x( \'Add New\', \'book\', \'your-plugin-textdomain\' ),
    \'add_new_item\'       => __( \'Add New Book\', \'your-plugin-textdomain\' ),
    \'new_item\'           => __( \'New Book\', \'your-plugin-textdomain\' ),
    \'edit_item\'          => __( \'Edit Book\', \'your-plugin-textdomain\' ),
    \'view_item\'          => __( \'View Book\', \'your-plugin-textdomain\' ),
    \'all_items\'          => __( \'All Books\', \'your-plugin-textdomain\' ),
    \'search_items\'       => __( \'Search Books\', \'your-plugin-textdomain\' ),
    \'parent_item_colon\'  => __( \'Parent Books:\', \'your-plugin-textdomain\' ),
    \'not_found\'          => __( \'No books found.\', \'your-plugin-textdomain\' ),
    \'not_found_in_trash\' => __( \'No books found in Trash.\', \'your-plugin-textdomain\' )
);

$args = array(
    \'labels\'             => $labels,
    \'public\'             => true,
    \'publicly_queryable\' => true,
    \'show_ui\'            => false,
    \'show_in_menu\'       => false,
    \'query_var\'          => true,
    \'rewrite\'            => array( \'slug\' => \'book\' ),
    \'capability_type\'    => \'post\',
    \'has_archive\'        => true,
    \'hierarchical\'       => false,
    \'menu_position\'      => null,
    \'supports\'           => array( \'title\', \'editor\', \'author\', \'thumbnail\', \'excerpt\', \'comments\' )
);

register_post_type( \'book\', $args );
}
这样,它就不会显示在管理菜单中。但您仍然可以将其与如下url一起使用example.com/wp-admin/edit.php?post_type=book.

您可以创建单独的模板single-book.php 按您喜欢的方式显示。您还可以像处理页面一样,使用id创建单独的文件。

如果您有一组属于同一类别的文件,则可以使用register_taxonomy() 创建分类法并为这些页面组使用不同的模板。

我相信这满足了您的所有要求:

它不显示在管理菜单中

  • 您可以使用所有wordpress函数为每个页面(或页面组,如果需要,使用自定义分类法)创建单独的php代码

  • 结束

    相关推荐

    WP-Includes/Comment-template.php:26-正在尝试获取非对象的属性

    我在调试新站点时收到此通知。有人知道这意味着什么吗?它不会破坏网站,但当我打开调试模式时,它只是一个警告,我想解决这个问题。此通知仅在“注释”选项可用时显示。当您打开一个帖子页面,并且评论已通过仪表板关闭时,不会显示此通知。这是我得到的“错误”:注意:wp包含/注释模板。php:26-尝试获取非对象的属性require(\'wp-blog-header.php\')、require\\u once(\'wp-includes/template loader.php\')、include(\'/themes