jnthnclrk
  • 0
Учитель

Как получить идентификатор сообщения (страницы или CPT) из заголовка или ярлыка?

  • 0

Я прошерстил Кодекс, не смог заставить работать get_page_by_title() и очень удивлен, что для этой задачи не существует стандартной функции WP.

Мне нужно получить идентификатор любого поста/cpt или страницы, используя слаг заголовка поста/страницы. В идеале я ищу следующее:

get_post_ID_by_title('My post title', 'customposttype');

Что я должен делать?

Share
  1. Как вы использовали get_page_by_title и является ли иерархический тип пользовательского сообщения, я не думаю, что get_page (вызванный get_page_by_title ) будет работать для неиерархических типов.

    • 0
  2. вы можете использовать эту функцию, которая прыгает через Google «получить пост по заголовку»

    /**
    * Retrieve a post given its title.
    *
    * @uses $wpdb
    *
    * @param string $post_title Page title
    * @param string $post_type post type ('post','page','any custom type')
    * @param string $output Optional. Output type. OBJECT, ARRAY_N, or ARRAY_A.
    * @return mixed
    */
    function get_post_by_title($page_title, $post_type ='post' , $output = OBJECT) {
        global $wpdb;
            $post = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_title = %s AND post_type= %s", $page_title, $post_type));
            if ( $post )
                return get_post($post, $output);
    
        return null;
    }
    
    • 0
  3. Вам не хватает параметра функции. Добавьте null для второго необязательного параметра $output, и эта функция должна работать для вас.

    get_page_by_title('My post title', null, 'customposttype');
    

    Я только что столкнулся с той же проблемой, и добавление нуля исправило ее для меня.

    • 0
  4. Я склонен избегать прямых запросов к БД. Вместо этого я использую WP_Query объект для разбора вещей для себя.

    По сути, это функция, которую я использую в одной из своих тем для получения поста на основе заданного слага:

    function get_post_id( $slug, $post_type ) {
        $query = new WP_Query(
            array(
                'name' => $slug,
                'post_type' => $post_type
            )
        );
    
        $query->the_post();
    
        return get_the_ID();
    }
    

    Это создаст запрос с использованием WP API для получения сообщения определенного типа с заданным слагом, запустит обычные функции цикла для результата и вернет идентификатор сообщения. Вы также можете использовать его, чтобы вернуть весь пост, немного изменив функцию, но это на ваше усмотрение.

    • 0
  5. Этому уже несколько лет, но оно все еще всплывает при поиске в Google. Итак, вот простой способ сделать это:

    $page = get_page_by_title( 'my post title' );
    

    или

    $page = get_post_ID_by_title('my post title', OBJECT, 'customposttype');
    

    Затем просто используйте объект $page, чтобы получить идентификатор:

    $page->ID
    
    • 0
  6. В настоящее время (WP > 4.9.2) вы можете найти свой «любой» данный пост/страницу и т. д. по заголовку/слагу следующим образом:

    $page = get_posts(
        array(
            //'name'      => 'your-post-slug', // by post slug
            'title'      => 'Your post title', // by post title
            'post_type' => 'page' // post type of your preference
        )
    );
    
    if ($page = $page[0]) // First/lowest ID taken if many objects
    {
        // Then you do whatever is needed...
        // $id = $page->id;
        // $content = $page->post_content;
        // or $content = apply_filters('the_content', $page->post_content);
        // etc.
    }
    
    • 0

Оставить ответ

You must login to add an answer.