it-swarm.com.de

Wie bekomme ich Beiträge nach Inhalt?

Ich habe die folgenden Codes gefunden, um Post-Details zu erhalten. Es ist jedoch nicht möglich, die Beiträge nach Inhalt abzurufen . Hat jemand irgendwelche Ideen?

get_posts ()

//// get post ////
$args = array(
    'numberposts'     => -1, // number of posts to display; display all: -1.
    'offset'          => 0,
    // 'category'        => , // post category ID
    'orderby'         => 'post_date',
    'order'           => 'DESC', // Latest post first: 'ASC'; Olderest post first: 'DESC'
    // 'include'         => ,
    // 'exclude'         => ,
    // 'meta_key'        => ,
    // 'meta_value'      => ,
    'post_type'       => 'post', // get post type
    // 'post_mime_type'  => ,
    // 'post_parent'     => ,
    // 'post_status'     => 'publish'
);

// http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters
$posts_array = get_posts( $args );
foreach( $posts_array as $post ) : setup_postdata($post);
    echo "<li><a href='" . the_permalink() . "'>" . the_title() .
         "</a>" .
         $post->blog_ID . 
         $post->post_date . 
         $post->post_title . 
         $post->pubtimes . 
         $post->post_author . 
         $post->post_content . 
         $post->post_excerpt . 
         $post->post_status;
        "</li>";
endforeach;
2
goodseller

Sie müssen die Datenbankabfrage erweitern, um in der Spalte post_content zu suchen. Es gibt einen Filter: 'posts_where', den Sie verwenden können.

Ich würde einen einfachen Wrapper für get_posts() schreiben, um seine Argumente zu erweitern und den Filter einmal auszuführen. Beispiel:

class T5_Posts_By_Content
{
    protected static $content = '';

    protected static $like    = TRUE;

    /**
     * Mapper for get_posts() with extra arguments 'content' and 'like'
     *
     * 'content' must be a string with optional '%' for free values.
     * 'like' must be TRUE or FALSE.
     *
     * @param array $args See get_posts.
     * @return array
     */
    public static function get( $args )
    {
        if ( isset ( $args['content'] ) )
        {
            // This is TRUE by default for get_posts().
            // We need FALSE to let the WHERE filter do its work.
            $args['suppress_filters'] = FALSE;
            self::$content            = $args['content'];
            add_filter( 'posts_where', array ( __CLASS__, 'where_filter' ) );
        }

        isset ( $args['like'] ) and self::$like = (bool) $like;

        return get_posts( $args );
    }

    /**
     * Changes the WHERE clause.
     *
     * @param string $where
     * @return string
     */
    public static function where_filter( $where )
    {
        // Make sure we run this just once.
        remove_filter( 'posts_where', array ( __CLASS__, 'where_filter' ) );

        global $wpdb;
        $like  = self::$like ? 'LIKE' : 'NOT LIKE';
        // Escape the searched text.
        $extra = $wpdb->prepare( '%s', self::$content );

        // Reset vars for the next use.
        self::$content = '';
        self::$like    = TRUE;

        return "$where AND post_content $like $extra";
    }
}

So finden Sie die letzten fünf Beiträge mit der Zeichenfolge Größe ändern write:

$args = array(
    'content' => '%resized%'
);
$posts = T5_Posts_By_Content::get( $args );

So erhalten Sie die letzten fünf Beiträge nicht mit geänderter Größe :

$args = array(
    'content' => '%resized%',
    'like'    => FALSE
);
$posts = T5_Posts_By_Content::get( $args );
6
fuxia

Ich kann mir keinen eleganten Weg aus dem Kopf denken, ich bin mir nicht sicher, ob es überhaupt möglich ist, Kernfunktionen zu verwenden, aber das SQL, das Sie verwenden möchten, würde ungefähr so ​​aussehen (beachten Sie, dass dies Pseudocode ist):

SELECT  `ID` 
FROM  `$wpdb->posts` 
WHERE  `post_content` LIKE  '%search term%'

Dadurch werden alle IDs von Posts zurückgegeben, von denen SQL denkt, dass sie sich auf Ihren Suchbegriff beziehen.

1
mor7ifer