使用GET_POST_PERMALINK()时尝试获取非对象的属性

时间:2017-09-11 作者:TKEz

我正在尝试使用get\\u post\\u permalink()获取自定义帖子类型的permalink。我需要使用get\\u post\\u permalink(),因为我使用post\\u type\\u链接过滤器将特定post类型的permalink更改为其他类型。下面是我正在尝试运行的代码:

class Get_Department_Class {

/**
 * The department\'s post ID.
 *
 * @since    1.0
 * @access   public
 * @var      int    $ID    Holds the department\'s post ID
 */
public $ID;

/**
 * Will hold the department\'s post data.
 *
 * @since    1.0
 * @access   public
 * @var      array    $post    Holds the department\'s post data
 */
public $post;

/**
 * Will hold the department\'s permalink.
 *
 * @since    1.0
 * @access   protected
 * @var      string    $permalink    Holds the department\'s permalink
 */
protected $permalink;

/**
 * Build/construct the department.
 *
 * @since   1.0
 * @param   $post_id - allows you to pass the department\'s post ID or post title
 */
public function __construct( $post_id ) {
    global $wpdb, $blog_id;

    // If not main site, change $wpdb blog ID for queries
    // Will change back when we\'re done
    $old_blog_id = ( 1 != $blog_id ) ? $wpdb->set_blog_id( 1 ) : NULL;


    // Check against an ID
    if ( is_numeric( $post_id ) ) {

        $this->post = get_post( $post_id );

    }

    // Check against a post title
    if ( ! $this->post ) {

        $this->post = get_page_by_title( $post_id, OBJECT, \'departments\' );

    }

    // Reset the blog ID
    if ( isset( $old_blog_id ) )
        $wpdb->set_blog_id( $old_blog_id );


    // No point if there\'s no post ID
    if ( ! ( $this->ID = isset( $this->post ) && isset( $this->post->ID ) ? $this->post->ID : NULL ) ) {
        $this->post = NULL;
        return;
    }

}

/**
 * Get the department\'s permalink.
 *
 * @since   1.0
 */
public function get_permalink() {

    // Make sure we have the post ID
    if ( ! $this->ID )
        return false;

    // See if the permalink is already set
    if ( isset( $this->permalink ) && ! empty( $this->permalink ) )
        return $this->permalink;

    // Get the permalink
    if ( $permalink = get_post_permalink( $this->ID ) ) {

        // Store the permalink
        $this->permalink = $permalink;
        return $this->permalink;

    }

    return false;

}
}
返回的错误是“注意:在第266行的/Applications/MAMP/htdocs/wp includes/link-template.php中尝试获取非对象的属性。”在wordpress核心中进行一些测试之后,在链接模板中的第264行。php文件返回NULL。

第264行:

        $post_type = get_post_type_object($post->post_type);
然后在第266行,核心代码尝试访问$post\\u类型对象的属性,该属性为NULL,因此抛出错误。

我不想修改核心代码。有什么办法可以解决这个问题吗?

仅供参考:我正在运行WP 4.5.9。。。

1 个回复
最合适的回答,由SO网友:TKEz 整理而成

这是一个问题,因为我在多站点上使用switch\\u to\\u blog()。当前博客上不存在post\\u类型。它只存在于主博客上。由于post\\u类型不存在,因此get\\u post\\u type\\u object()函数返回null。

我所做的修复工作是创建一个自定义的\\u get\\u post\\u permalink函数,该函数还接受blog\\u id参数,因此在多站点上更改为适当的blog\\u id,以正确创建post\\u type\\u对象。

结束

相关推荐

Change Taxonomy Permalinks

我有自定义帖子,我创建了一个显示所有自定义帖子的页面。示例:www.example.com/archive-page我想知道是否可以更改与此自定义帖子相关的类别和标签的永久链接。现在我有:www.example.com/my-custom-post-type-cats/my-category-1www.example.com/my-custom-post-type-tags/my-tag-1</我想要这样的东西:www.example.com/archive-page?category=1www.e