web-dev-qa-db-fra.com

Avec wp-cli, ne puis-je pas interroger les pages par leur titre?

Tous font la même chose:

wp post list --post_type=page
wp post list --post_type=page --post_title=dfdsfds
wp post list --post_type=page --title=sdfdsf

Comment interroger le message par son titre? En revanche, en utilisant --name cela fonctionne très bien:

wp post list --post_type=page --name=sdfdsf
2
Kit Sunde

Si nous nous limitons à la sortie de wp post list, alors voici un moyen de rechercher %test% dans le posts titres de published posts:

wp post list --ignore_sticky_posts=1 --post__in=$(wp db query 'SELECT ID FROM wp_posts WHERE post_title LIKE "%test%" AND post_status="publish" AND post_type="post"' --skip-column-names |  paste -s -d ',' - )

Voici la vue étendue:

wp post list                                 #<-- the first wp command
    --ignore_sticky_posts=1                  #<-- get rid of stickies
    --post__in=                              #<-- only specific post IDs
        $(wp db query                        #<-- the second wp command
            'SELECT ID                       #<-- only get the post IDs
             FROM wp_posts                   #<-- table name, adjust the prefix!
             WHERE post_title LIKE "%test%"  #<-- title search Word
               AND post_status="publish"     #<-- published
               AND post_type="post"'         #<-- posts
          --skip-column-names                #<-- Skip the ID column name
          | paste -s -d ',' -                #<-- csv
        )

Update:

Pour des cas exacts, on peut remplacer post_title LIKE "%test%" par post_title = "test".

Nous pouvons utiliser --skip-column-names pour supprimer le nom de colonne ID de la sortie de la requête interne, au lieu d'utiliser sed 's/^ID,//' pour le supprimer. Ce serait bien si nous pouvions utiliser --format=csv au lieu d'utiliser | paste -s -d ',' -, mais actuellement, cela ne semble pas être pris en charge par la commande wp db query.

Il existe également le wp db searchcommande , mais nous ne pouvons actuellement le limiter qu'à une ou plusieurs tables, comme wp db search test wp_posts, mais pas à une colonne de table donnée. On pourrait par exemple essayez de jouer avec wp db search test wp_posts --one_line | grep wp_posts:post_title, c.-à-d. cherchez dans la table wp_posts entière et filtrez la sortie contenant wp_posts:post_title, grâce à --one_line. Mais notez que ceci consiste à parcourir toute la table en premier!

Il y a aussi le wp Shell qui invite le shell wp-cli, où l'on a accès aux classes et fonctions WordPress, comme WP_Query et get_page_by_title().

Il est également possible d'exécuter wp evalcommande et le wp evail-filecommande d'exécuter un code php donné. Voici un exemple: wp eval 'print_r( get_page_by_title( "test" ) );

2
birgire