¿Cómo puedo crear una CLAVE API para woocommerce por WP-CLI?
Estoy creando una tienda WooCommerce con estos comandos:
sudo /usr/local/bin/wp --info --allow-root
sudo /usr/local/bin/wp cli update --allow-root
sudo /usr/local/bin/wp core download --allow-root
sudo /usr/local/bin/wp core config --dbname=$MYSQL_DATABASE --dbuser=$MYSQL_USER --dbpass=$MYSQL_PASSWORD --allow-root
sudo chown -R apache:apache wp-config.php
sudo /usr/local/bin/wp core install --url=$URL --title="$WP_TITLE" --admin_user=$WP_USERNAME --admin_password=$WP_PASSWORD --admin_email=$WP_MAIL --allow-root
sudo /usr/local/bin/wp theme install woot storefront --allow-root
sudo /usr/local/bin/wp plugin install homepage-control --allow-root
sudo /usr/local/bin/wp plugin activate homepage-control --allow-root
sudo /usr/local/bin/wp theme activate woot --allow-root
sudo /usr/local/bin/wp plugin install woocommerce --allow-root
sudo /usr/local/bin/wp plugin activate woocommerce --allow-root
sudo /usr/local/bin/wp post delete 1 --allow-root
Después de eso, necesito crear una nueva CLAVE para la API por línea de comando, ¿alguien puede ayudarme, por favor?
Gracias
Aquí hay un script bash que hice que hará exactamente lo que quieres hacer. Si te gusta esta respuesta, por favor muéstrame un poco de amor, esto me tomó mucho tiempo.
as_web_user() {
su $user --shell $SHELL -c "$*"
}
# Run the wp commands as web-user
# This part has some inspiration from https://github.com/autopilotpattern/wordpress/blob/master/bin/prestart.sh
as_web_user "wp core install --url=\"$WORDPRESS_SITE_URL\" \
--title=\"$WORDPRESS_SITE_TITLE\" \
--admin_user=\"$WORDPRESS_ADMIN_USER\" \
--admin_password=\"$WORDPRESS_ADMIN_PASSWORD\" \
--admin_email=\"$WORDPRESS_ADMIN_EMAIL\" "
if [ -n "$WORDPRESS_ACTIVE_THEME" ]; then
as_web_user "wp theme activate \"$WORDPRESS_ACTIVE_THEME\""
fi
# TODO: install plugins from env variable and ensure woocommerce
as_web_user "wp plugin install woocommerce --activate"
# Set up woocommerce
as_web_user "wp wc tool run install_pages --user=\"$WORDPRESS_ADMIN_USER\""
# Creates the woocommerce_api_keys table if it doesn't exist
if [ -n $WOOCOMMERCE_CONSUMER_KEY ] && [ -n $WOOCOMMERCE_CONSUMER_SECRET ]; then
as_web_user "wp eval 'WC_Install::install();'"
as_web_user "wp eval '
global \$wpdb;
echo \$wpdb->insert(
\$wpdb->prefix . \"woocommerce_api_keys\",
array(
\"user_id\"=>1,
\"permissions\"=>\"read_write\",
\"consumer_key\"=> wc_api_hash( \"$WOOCOMMERCE_CONSUMER_KEY\" ),
\"consumer_secret\"=> \"$WOOCOMMERCE_CONSUMER_SECRET\",
\"truncated_key\" => substr( \"$WOOCOMMERCE_CONSUMER_SECRET\", -7 )
),
array( \"%d\", \"%s\", \"%s\",\"%s\",\"%s\", )
);'"
fi
if [ -n "$WOOCOMMERCE_TEST_DATA" ] && [ ! -f "sample_products.xml" ]; then
as_web_user "wp plugin install wordpress-importer --activate"
as_web_user "curl -OL https://raw.githubusercontent.com/woocommerce/woocommerce/master/sample-data/sample_products.xml"
as_web_user "wp import sample_products.xml --authors=create"
fi
Deberá proporcionar estas variables de entorno
WORDPRESS_SITE_URL
WORDPRESS_SITE_TITLE
WORDPRESS_ADMIN_USER
WORDPRESS_ADMIN_PASSWORD
WORDPRESS_ADMIN_EMAIL
WORDPRESS_ACTIVE_THEME
WOOCOMMERCE_TEST_DATA
WOOCOMMERCE_CONSUMER_KEY
WOOCOMMERCE_CONSUMER_SECRET
user # the web user (e.g. www-data)
Esto es parte de mi imagen acoplable para aprovisionar una instalación de WooCommerce completa con claves API y datos de prueba.
Esta es una modificación de la respuesta de @Derwent, ya que no pude entender la suya. wp eval
comando para trabajar:
WOOCOMMERCE_CONSUMER_KEY=<key> WOOCOMMERCE_CONSUMER_SECRET=<secret> wp eval '
global $wpdb;
echo $wpdb->insert(
$wpdb->prefix . "woocommerce_api_keys",
array(
"user_id" => 1,
"description" => "Frontend Client",
"permissions" => "read",
"consumer_key"=> wc_api_hash(getenv("WOOCOMMERCE_CONSUMER_KEY")),
"consumer_secret" => getenv("WOOCOMMERCE_CONSUMER_SECRET"),
"truncated_key" => substr(getenv("WOOCOMMERCE_CONSUMER_SECRET"), -7)
)
);'
El problema principal con el que me estaba encontrando era que $WOOCOMMERCE_CONSUMER_KEY
no era reconocible dentro wp eval
. los getenv
La función PHP resuelve esto.