检查页面插件是否存在,然后显示该页面的标题

时间:2016-03-17 作者:John Carlos

遇到这个函数来检查一个页面是否通过其slug存在,它工作得很好

function the_slug_exists($post_name) {
global $wpdb;
if($wpdb->get_row("SELECT post_name FROM wp_posts WHERE post_name = \'" . $post_name . "\'", \'ARRAY_A\')) {
    return true;
} else {
    return false;
}
}

但我现在需要做的是检查是否存在,然后输出该页面的标题,非常感谢您的帮助。

因此,当我将此代码放在页面上查找slug时:

<?php if (the_slug_exists(\'page-name\')) {
                    echo \'$post_title\';
} ?>
除了我需要函数来输出标题和查找段塞之外,其他一切都很完美,希望这更有意义。

3 个回复
最合适的回答,由SO网友:Prasad Nevase 整理而成

查看函数中的MySQL查询可以清楚地看到,尽管它与post\\u名称匹配并返回true或false。你想找到的是,如果一个页面是通过它的slug存在的。因此,在这种情况下,您选择的函数是错误的。

要按标题获取页面,只需使用:

$page = get_page_by_title( \'Sample Page\' );
echo $page->title
以防万一,如果您想按slug获取页面,可以使用以下代码:

function get_page_title_for_slug($page_slug) {

     $page = get_page_by_path( $page_slug , OBJECT );

     if ( isset($page) )
        return $page->post_title;
     else
        return "Match not found";
}
您可以调用上述函数,如下所示:

echo "<h1>" . get_page_title_for_slug("sample-page") . "</h1>";
如果有帮助,请告诉我。

SO网友:Pieter Goosen

当WordPress具有本机函数来执行特定作业时,几乎永远不会建议运行自定义SQL。鼻涕虫或post_name 在页面的路径(URL)中也使用了,用于在访问此类页面时标识并返回该页面的内容。这意味着,我们可以使用get_page_by_path() 只需将slug(post\\u name)传递给函数并获取返回的页面对象。

get_page_by_path ( 
    string $page_path, 
    string $output = OBJECT, 
    string|array $post_type = \'page\' 
)
像许多其他函数和命名约定一样post_name 实际上是slug,而不是WordPress中的名称,get_page_by_path()\'s的名称令人困惑,而且很愚蠢,因为您可以将任何post类型传递给函数

我们可以使用get_page_by_path() 如果找不到页面或页面对象成功,则将不返回任何内容。让我们编写一个适当的包装函数,该函数在失败时将返回false,并且无论页面是否存在,都将始终返回页面对象

function get_post_by_post_name( $slug = \'\', $post_type = \'\' )
{
    //Make sure that we have values set for $slug and $post_type
    if (    !$slug
         || !$post_type
    )
        return false;

    // We will not sanitize the input as get_page_by_path() will handle that
    $post_object = get_page_by_path( $slug, OBJECT, $post_type );

    if ( !$post_object )
        return false;

    return $post_object;
}
然后可以按如下方式使用它

if ( function_exists( \'get_post_by_post_name\' ) ) {
    $post_object = get_post_by_post_name( \'post-name-better-known-as-slug\', \'your_desired_post_type\' );
    // Output only if we have a valid post 
    if ( $post_object ) {
        echo apply_filters( \'the_title\', $post_object->post_title );
    }
}
如果您真的只需要返回帖子标题,我们可以稍微修改一下函数

function get_post_title_by_post_name( $slug = \'\', $post_type = \'\' )
{
    //Make sure that we have values set for $slug and $post_type
    if (    !$slug
         || !$post_type
    )
        return false;

    // We will not sanitize the input as get_page_by_path() will handle that
    $post_object = get_page_by_path( $slug, OBJECT, $post_type );

    if ( !$post_object )
        return false;

    return apply_filters( \'the_title\', $post_object->post_title );
}
然后按如下方式使用

if ( function_exists( \'get_post_title_by_post_name\' ) ) {
    $post_title = get_post_title_by_post_name( \'post-name-better-known-as-slug\', \'your_desired_post_type\' );
    // Output only if we have a valid post 
    if ( $post_title ) {
        echo $post_title;
    }
}

SO网友:Motaz M. El Shazly

下面是对相同代码的更新

function the_slug_exists($post_name) {
global $wpdb;
//Sanitize title
$post_name = sanitize_title($post_name);
if($wpdb->get_row("SELECT post_name FROM wp_posts WHERE post_name = \'" . $post_name . "\'", \'ARRAY_A\')) {
    return $post_name;
} else {
    return false;
}
然后,您只需使用echo函数调用它即可运行它,如下代码所示,这将只打印存在的帖子名称。

echo the_slug_exists($post_name); 

UPDATE

或者,您可以依赖默认的条件WordPress函数是\\u page(),因此您的代码变得如下所示。。

if( is_page($post_name) ):

   echo $post_name; 

endif;

相关推荐

如何在Functions.php中链接style.css

我是WordPress的新手;我刚开始学习WordPress。我想把风格联系起来。函数中的css。php,但我无法解决这里可能存在的问题。谁能给我指出正确的方向吗?指数php<?php get_header(); ?> <?php if ( have_posts() ) { while ( have_posts() ) { the_post();